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