--- 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