Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hg.py @ 45496:b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
The second part of the Share Safe Plan is to share source repo config also.
This patch adds logic to load the source repo .hg/hgrc if we are in share safe
mode. On unshare, we copy and prepend source config to current repo so that
config which was shared is persisted.
A test is added to show that now if we enable a hook on the source repo, that
also runs on the shared repositories.
API change as a new optional argument sharedvfs added to localrepo.loadhgrc()
Differential Revision: https://phab.mercurial-scm.org/D8656
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Thu, 02 Jul 2020 16:23:36 +0530 |
parents | 034d94f8761b |
children | 03726f5b6092 |
line wrap: on
line diff
--- a/mercurial/hg.py Fri Aug 07 17:42:15 2020 +0530 +++ b/mercurial/hg.py Thu Jul 02 16:23:36 2020 +0530 @@ -332,6 +332,28 @@ return r +def _prependsourcehgrc(repo): + """ copies the source repo config and prepend it in current repo .hg/hgrc + on unshare. This is only done if the share was perfomed using share safe + method where we share config of source in shares""" + srcvfs = vfsmod.vfs(repo.sharedpath) + dstvfs = vfsmod.vfs(repo.path) + + if not srcvfs.exists(b'hgrc'): + return + + currentconfig = b'' + if dstvfs.exists(b'hgrc'): + currentconfig = dstvfs.read(b'hgrc') + + with dstvfs(b'hgrc', b'wb') as fp: + sourceconfig = srcvfs.read(b'hgrc') + fp.write(b"# Config copied from shared source\n") + fp.write(sourceconfig) + fp.write(b'\n') + fp.write(currentconfig) + + def unshare(ui, repo): """convert a shared repository to a normal one @@ -350,6 +372,11 @@ # fail destlock = copystore(ui, repo, repo.path) with destlock or util.nullcontextmanager(): + if requirements.SHARESAFE_REQUIREMENT in repo.requirements: + # we were sharing .hg/hgrc of the share source with the current + # repo. We need to copy that while unsharing otherwise it can + # disable hooks and other checks + _prependsourcehgrc(repo) sharefile = repo.vfs.join(b'sharedpath') util.rename(sharefile, sharefile + b'.old')