Jörg Sonnenberger
News from the VCS front
NetBSD Developer Summit, EuroBSDCon 2017
Agenda
- lochley.NetBSD.org
- Mercurial performance
- Check list
- Pending work
lochley.NetBSD.org
- Former home of cvs.NetBSD.org
- Lots of RAM, lots of disk space
- New home of the automated CVS -> Fossil -> Git conversion
- ...and now home of the CVS -> Fossil -> Mercurial conversion, too
lochley and Mercurial: challenges
- fastimport used one directory with one file per blob
- ...with uncompressed content
- Duplicate commit check happens after transaction locks
- fastimport assumed markers are persistent
- ...tagging commits with markers, breaking duplicate detection
- fastimport missed support for its own mark file
- ...no incremental conversion without fixing it
lochley and Mercurial: status quo
- Conversion fully integrated now
- Similar time to the git cycle
- Results pushed to Bitbucket
- ...beware that src is pushing some scalability limits for BB
Mercurial performance relative to Git (I)
- Basic testing on E5 E3-1245v5 under Illumos with 100Mbit/s+ connectivity
- hg init + unbundle from cdn.NetBSD.org: ~8min, CPU bound (zstd)
- ...with zstd as revlog compression engine: 6min
- hg clone from https://bitbucket.org/netbsd/src: 10min (bzip2)
- ...with zstd as revlog compression engine: 7min
- git clone: ~5min with 3min local CPU time
- git clone needs 50% more bandwidth than the bundle
Mercurial performance relative to Git (II)
- hg co -r trunk after initial clone: 40s (2min CPU time)
- hg co -r netbsd-8 and back to trunk: 6s / 8s (16s / 22s CPU time)
- git checkout netbsd-8 and back to trunk: 5s / 8s (6s / 8s CPU time)
- hg commit vs hg commit BUILDING: 2s / 0.8s
- git commit -a vs git commit BUILDING: 0.7s / 2s
- hg blame UPDATING: 0.7s
- git blame UPDATING: 2s
Check list: compared to FreeBSD's VCS wiki
- CVS migration: solved
- History removal: possible, but tricky with convert
- Base system integration: not planned
- Database recovery: double check transaction assumptions
- Partial clones: needs investigation, shallow and remotefilelog extensions
Check list: core@ requirements (I)
- Performance: testing on low-end hardware in progress
- ...but comfortable on the 90$ Pinebook under Linux
- ...peak RSS on Linux ~800MB
- User interface and terminology mostly compatible with CVS
- Concurrent use of CVS: not planned
-
- ...but preparation and testing of infrastructure against Mercurial
- ...expected down time for final migration: around 2 days
Check list: core@ requirements (II)
- hg ↔ git bridges exists, performance and limitations need to be checked
- Automatic clean-up of CVS revision references: not feasible
- Repository conversion: character set conversion in CVS before final migration
- ...no detection of moves/copies planned
- ...no retro-patching of SCCS history planned
Pending work (I)
- Provide documented workflows for common operations, using modern best practises
- ...include merge vs rebase discussion for local changes
- ...staging repository vs "core" repository
- Work out the build and testing infrastructure
- ...move towards more off-the-shelf components
- ...somewhat easier with changesets
- ...currently under active investigation
Pending work (II)
- Figure out new release engineering workflow
- ...easier with changesets
- Current approach: push changes to staging repository
- ...CI verifies building (and maybe passing tests)
Pending work (III)
- Test repository server
- ...automatic pushing of clone bundles to ftp.NetBSD.org
- ...test build host attached
- ...allow pushing commits for authentication testing
- ...provide source-changes alternative based on hg notify
- Investigate Security Team ↔ Releng interaction