mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 07:17:55 +03:00
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.
This commit is contained in:
parent
703f8d3ed8
commit
8f7105eac1
@ -11,7 +11,7 @@ from lock import release
|
||||
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 @@ def clone(ui, peeropts, source, dest=None, pull=False, rev=None,
|
||||
|
||||
# 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
|
||||
|
@ -25,12 +25,25 @@ List files in store/data (should show a 'b.d'):
|
||||
.hg/store/data/b.d
|
||||
.hg/store/data/b.i
|
||||
|
||||
Trigger branchcache creation:
|
||||
|
||||
$ hg branches
|
||||
default 10:a7949464abda
|
||||
$ ls .hg/cache
|
||||
branch2-served
|
||||
|
||||
Default operation:
|
||||
|
||||
$ hg clone . ../b
|
||||
updating to branch default
|
||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
||||
$ cd ../b
|
||||
|
||||
Ensure branchcache got copied over:
|
||||
|
||||
$ ls .hg/cache
|
||||
branch2-served
|
||||
|
||||
$ cat a
|
||||
a
|
||||
$ hg verify
|
||||
@ -58,6 +71,12 @@ No update, with debug option:
|
||||
listing keys for "bookmarks"
|
||||
#endif
|
||||
$ cd ../c
|
||||
|
||||
Ensure branchcache got copied over:
|
||||
|
||||
$ ls .hg/cache
|
||||
branch2-served
|
||||
|
||||
$ cat a 2>/dev/null || echo "a not present"
|
||||
a not present
|
||||
$ hg verify
|
||||
|
Loading…
Reference in New Issue
Block a user