From patchwork Mon Dec 14 18:49:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D9598: share: propery copy cache files when cloning from a share From: phabricator X-Patchwork-Id: 47896 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Mon, 14 Dec 2020 18:49:02 +0000 joerg.sonnenberger created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY If a is shared to b and b cloned to c, the old code would look directly under b/.hg for the cache directory and not use the cachevfs layer to pick the members from a/.hg/cache. Adjust variable names and comments to reflect that the function is used for more than just the branchmap cache. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D9598 AFFECTED FILES mercurial/hg.py tests/test-share.t CHANGE DETAILS To: joerg.sonnenberger, #hg-reviewers Cc: mercurial-patches, mercurial-devel diff --git a/tests/test-share.t b/tests/test-share.t --- a/tests/test-share.t +++ b/tests/test-share.t @@ -56,6 +56,17 @@ rbc-revs-v1 tags2-visible +Cloning a shared repo should pick up the full cache dir on the other hand. + + $ hg clone . ../repo2-clone + updating to branch default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ ls -1 ../repo2-clone/.hg/cache + branch2-served + rbc-names-v1 + rbc-revs-v1 + tags2-visible + Some sed versions appends newline, some don't, and some just fails $ cat .hg/sharedpath; echo diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -590,16 +590,15 @@ return srcpeer, peer(ui, peeropts, dest) -# Recomputing branch cache might be slow on big repos, -# so just copy it +# Recomputing caches is often slow on big repos, so copy them. def _copycache(srcrepo, dstcachedir, fname): """copy a cache from srcrepo to destcachedir (if it exists)""" - srcbranchcache = srcrepo.vfs.join(b'cache/%s' % fname) - dstbranchcache = os.path.join(dstcachedir, fname) - if os.path.exists(srcbranchcache): + srcfname = srcrepo.cachevfs.join(fname) + dstfname = os.path.join(dstcachedir, fname) + if os.path.exists(srcfname): if not os.path.exists(dstcachedir): os.mkdir(dstcachedir) - util.copyfile(srcbranchcache, dstbranchcache) + util.copyfile(srcfname, dstfname) def clone(