local-clone: extract the closure copying caches
authorPierre-Yves David <pierre-yves.david@octobus.net>
Thu, 25 May 2017 11:55:00 +0200
changeset 32492 963de566de2f
parent 32491 f2116efd2c3a
child 32493 3c8a71a8df11
local-clone: extract the closure copying caches Closures often get on the way. They are not much value in having that as a closure so I'm extracting it at the module level.
mercurial/hg.py
--- a/mercurial/hg.py	Thu May 25 19:38:00 2017 +0200
+++ b/mercurial/hg.py	Thu May 25 11:55:00 2017 +0200
@@ -409,6 +409,17 @@
 
     return srcpeer, peer(ui, peeropts, dest)
 
+# Recomputing branch cache might be slow on big repos,
+# so just copy it
+def _copycache(srcrepo, dstcachedir, fname):
+    """copy a cache from srcrepo to destcachedir (if it exists)"""
+    srcbranchcache = srcrepo.vfs.join('cache/%s' % fname)
+    dstbranchcache = os.path.join(dstcachedir, fname)
+    if os.path.exists(srcbranchcache):
+        if not os.path.exists(dstcachedir):
+            os.mkdir(dstcachedir)
+        util.copyfile(srcbranchcache, dstbranchcache)
+
 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.
@@ -566,22 +577,12 @@
             if os.path.exists(srcbookmarks):
                 util.copyfile(srcbookmarks, dstbookmarks)
 
-            # Recomputing branch cache might be slow on big repos,
-            # so just copy it
-            def copybranchcache(fname):
-                srcbranchcache = srcrepo.vfs.join('cache/%s' % fname)
-                dstbranchcache = os.path.join(dstcachedir, fname)
-                if os.path.exists(srcbranchcache):
-                    if not os.path.exists(dstcachedir):
-                        os.mkdir(dstcachedir)
-                    util.copyfile(srcbranchcache, dstbranchcache)
-
             dstcachedir = os.path.join(destpath, 'cache')
             # In local clones we're copying all nodes, not just served
             # ones. Therefore copy all branch caches over.
-            copybranchcache('branch2')
+            _copycache(srcrepo, dstcachedir, 'branch2')
             for cachename in repoview.filtertable:
-                copybranchcache('branch2-%s' % cachename)
+                _copycache(srcrepo, dstcachedir, 'branch2-%s' % cachename)
 
             # we need to re-init the repo after manually copying the data
             # into it