Mercurial > public > mercurial-scm > hg
diff mercurial/configuration/rcutil.py @ 52423:0b791c90280a
repo-config: move rc component of repository inside `rcutil`
This gather logic about where to find config file in the same location.
This also reduce the amount of logic we do in dispatch.py which is a win in
itself.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 22 Oct 2024 23:42:15 +0200 |
parents | 91f22b89ea05 |
children | e3b45916c375 |
line wrap: on
line diff
--- a/mercurial/configuration/rcutil.py Wed Oct 23 00:00:17 2024 +0200 +++ b/mercurial/configuration/rcutil.py Tue Oct 22 23:42:15 2024 +0200 @@ -19,8 +19,11 @@ from .. import ( encoding, + localrepo, pycompat, + requirements as requirementsmod, util, + vfs, ) from ..utils import resourceutil @@ -127,6 +130,37 @@ return _rccomponents +def _shared_source_component(path: bytes) -> List[FileRCT]: + """if the current repository is shared one, this tries to read + .hg/hgrc of shared source if we are in share-safe mode + + 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) + return [sharedvfs.join(b"hgrc")] + except IOError: + pass + return [] + + +def repo_components(repo_path: bytes) -> List[FileRCT]: + """return the list of config file to read for a repository""" + components = [] + components.extend(_shared_source_component(repo_path)) + components.append(os.path.join(repo_path, b".hg", b"hgrc")) + components.append(os.path.join(repo_path, b".hg", b"hgrc-not-shared")) + return components + + def defaultpagerenv() -> Dict[bytes, bytes]: """return a dict of default environment variables and their values, intended to be set before starting a pager.