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,20 @@ $ 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 + $ ls_l $CACHEDIR/master/packs/manifests | grep datapack | wc -l + \s*1 (re) 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 @@ -999,6 +1000,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): @@ -1014,6 +1016,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'):