# HG changeset patch # User Pierre-Yves David # Date 2017-05-25 09:59:07 # Node ID 3c8a71a8df111923250d59681a0d761b824f7913 # Parent 963de566de2f1d709c33c3c512cfa924544d132b local-clone: extract the listing of caches to copy Right now, the clone only copies the branchmap caches. There are multiple other valuable caches that we should copy and extensions might add their own. So we add a function to list the cache files to copy from the repository. The repository argument is unused but extensions will want it. diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -420,6 +420,14 @@ def _copycache(srcrepo, dstcachedir, fna os.mkdir(dstcachedir) util.copyfile(srcbranchcache, dstbranchcache) +def _cachetocopy(srcrepo): + """return the list of cache file valuable to copy during a clone""" + # In local clones we're copying all nodes, not just served + # ones. Therefore copy all branch caches over. + cachefiles = ['branch2'] + cachefiles.extend('branch2-%s' % f for f in repoview.filtertable) + return cachefiles + def clone(ui, peeropts, source, dest=None, pull=False, rev=None, update=True, stream=False, branch=None, shareopts=None): """Make a copy of an existing repository. @@ -578,11 +586,8 @@ def clone(ui, peeropts, source, dest=Non util.copyfile(srcbookmarks, dstbookmarks) dstcachedir = os.path.join(destpath, 'cache') - # In local clones we're copying all nodes, not just served - # ones. Therefore copy all branch caches over. - _copycache(srcrepo, dstcachedir, 'branch2') - for cachename in repoview.filtertable: - _copycache(srcrepo, dstcachedir, 'branch2-%s' % cachename) + for cache in _cachetocopy(srcrepo): + _copycache(srcrepo, dstcachedir, cache) # we need to re-init the repo after manually copying the data # into it