Mercurial > public > mercurial-scm > hg
diff mercurial/hg.py @ 22264:4bc1fd86e915
clone: for local clones, copy over filtered branchcaches as well (issue4286)
Local clones copy/hardlink over files directly, so the branchcaches should all
be valid. There's a slight chance that a read operation would update one of the
branchcaches, but we hold a lock over the source repo so they shouldn't cause
an invalid branchcache to be copied over, just a different, valid one.
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Thu, 21 Aug 2014 16:05:29 -0700 |
parents | ab0c42d22522 |
children | 82b2ba904e3e |
line wrap: on
line diff
--- a/mercurial/hg.py Thu Aug 21 15:58:32 2014 -0700 +++ b/mercurial/hg.py Thu Aug 21 16:05:29 2014 -0700 @@ -11,7 +11,7 @@ from node import hex, nullid import localrepo, bundlerepo, unionrepo, httppeer, sshpeer, statichttprepo import bookmarks, lock, util, extensions, error, node, scmutil, phases, url -import cmdutil, discovery +import cmdutil, discovery, repoview import merge as mergemod import verify as verifymod import errno, os, shutil @@ -366,13 +366,20 @@ # Recomputing branch cache might be slow on big repos, # so just copy it + def copybranchcache(fname): + srcbranchcache = srcrepo.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') - srcbranchcache = srcrepo.join('cache/branch2') - dstbranchcache = os.path.join(dstcachedir, 'branch2') - if os.path.exists(srcbranchcache): - if not os.path.exists(dstcachedir): - os.mkdir(dstcachedir) - util.copyfile(srcbranchcache, dstbranchcache) + # In local clones we're copying all nodes, not just served + # ones. Therefore copy all branchcaches over. + copybranchcache('branch2') + for cachename in repoview.filtertable: + copybranchcache('branch2-%s' % cachename) # we need to re-init the repo after manually copying the data # into it