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.
--- a/mercurial/hg.py Thu May 25 11:55:00 2017 +0200
+++ b/mercurial/hg.py Thu May 25 11:59:07 2017 +0200
@@ -420,6 +420,14 @@
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 @@
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