diff --git a/tests/test-treemanifest-prefetch.t b/tests/test-treemanifest-prefetch.t --- a/tests/test-treemanifest-prefetch.t +++ b/tests/test-treemanifest-prefetch.t @@ -368,3 +368,39 @@ $ rm -rf $CACHEDIR/master $ hg prefetchtrees -r '2 + 4' 5 trees fetched over * (glob) + +Test repack option + $ rm -rf $CACHEDIR/master + + $ hg prefetchtrees -r '0' + 2 trees fetched over *s (glob) + $ hg prefetchtrees -r '2' + 3 trees fetched over *s (glob) + + $ hg prefetchtrees -r '4' --repack + 3 trees fetched over *s (glob) + (running background incremental repack) + + $ sleep 0.5 + $ hg debugwaitonrepack + $ hg debugdatapack $CACHEDIR/master/packs/manifests/*.dataidx + $TESTTMP/hgcache/master/packs/manifests/70490b37ec1bf0862806062b34af9ad608268dc2: + (empty name): + Node Delta Base Delta Length Blob Size + ef362f8bbe8a 000000000000 46 46 + aa52a49be522 000000000000 95 95 + 60a7f7acb6bb 000000000000 95 95 + + Total: 236 236 (0.0% bigger) + dir: + Node Delta Base Delta Length Blob Size + bf22bc15398b 000000000000 43 43 + a18d21674e76 000000000000 43 43 + bc0c2c938b92 a18d21674e76 55 43 + + Total: 141 129 (9.3% bigger) + subdir: + Node Delta Base Delta Length Blob Size + ddb35f099a64 000000000000 43 43 + + Total: 43 43 (0.0% bigger) diff --git a/treemanifest/__init__.py b/treemanifest/__init__.py --- a/treemanifest/__init__.py +++ b/treemanifest/__init__.py @@ -113,6 +113,7 @@ _computeincrementalhistorypack, _runrepack, _topacks, + backgroundrepack, ) import cstore @@ -988,6 +989,7 @@ @command('prefetchtrees', [ ('r', 'rev', '', _("revs to prefetch the trees for")), + ('', 'repack', False, _('run repack after prefetch')), ('b', 'base', '', _("rev that is assumed to already be local")), ] + commands.walkopts, _('--rev REVS PATTERN..')) def prefetchtrees(ui, repo, *args, **opts): @@ -1003,6 +1005,10 @@ _prefetchtrees(repo, '', mfnodes, basemfnode, []) + # Run repack in background + if opts.get('repack'): + backgroundrepack(repo, incremental=True) + def _prefetchtrees(repo, rootdir, mfnodes, basemfnodes, directories): # If possible, use remotefilelog's more expressive fallbackpath if util.safehasattr(repo, 'fallbackpath'):