Mercurial > public > mercurial-scm > hg
diff mercurial/dispatch.py @ 45782:fd1de908f2b4
dispatch: load shared source repository config in share-safe mode
It seems to me now that there are two steps when config is loaded:
1) on dispatch
2) repository object creation
Recent patches added functionality that there can be shares in share-safe mode
where config of the source repository is shared with the the shares. However we
missed adding logic to read the source config on dispatch. This leads to
extensions not being loaded on dispatch and hence extensions command not being
recognized.
This patch fixes it by reading the shared source config on dispatch.
Differential Revision: https://phab.mercurial-scm.org/D9047
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Fri, 18 Sep 2020 18:52:38 +0530 |
parents | 0883413e09bc |
children | 88a47cbf063c |
line wrap: on
line diff
--- a/mercurial/dispatch.py Fri Sep 18 17:28:22 2020 +0530 +++ b/mercurial/dispatch.py Fri Sep 18 18:52:38 2020 +0530 @@ -36,13 +36,16 @@ help, hg, hook, + localrepo, profiling, pycompat, rcutil, registrar, + requirements as requirementsmod, scmutil, ui as uimod, util, + vfs, ) from .utils import ( @@ -939,6 +942,29 @@ return ret +def _readsharedsourceconfig(ui, path): + """if the current repository is shared one, this tries to read + .hg/hgrc of shared source if we are in share-safe mode + + Config read is loaded into the ui object passed + + This should be called before reading .hg/hgrc or the main repo + as that overrides config set in shared source""" + try: + with open(os.path.join(path, b".hg", b"requires"), "rb") as fp: + requirements = set(fp.read().splitlines()) + if not ( + requirementsmod.SHARESAFE_REQUIREMENT in requirements + and requirementsmod.SHARED_REQUIREMENT in requirements + ): + return + hgvfs = vfs.vfs(os.path.join(path, b".hg")) + sharedvfs = localrepo._getsharedvfs(hgvfs, requirements) + ui.readconfig(sharedvfs.join(b"hgrc"), path) + except IOError: + pass + + def _getlocal(ui, rpath, wd=None): """Return (path, local ui object) for the given target path. @@ -959,12 +985,14 @@ else: lui = ui.copy() if rcutil.use_repo_hgrc(): + _readsharedsourceconfig(lui, path) lui.readconfig(os.path.join(path, b".hg", b"hgrc"), path) if rpath: path = lui.expandpath(rpath) lui = ui.copy() if rcutil.use_repo_hgrc(): + _readsharedsourceconfig(lui, path) lui.readconfig(os.path.join(path, b".hg", b"hgrc"), path) return path, lui