# HG changeset patch # User Pierre-Yves David # Date 2021-01-29 11:17:11 # Node ID b91a695b3b084e3d676a5e6aa1f6192fecf4aa8e # Parent a3dced4b7b04d06e82e6831fa77d04c0f68a2e28 config: use level to properly deal with value priority A higher priority alias will now take precedence over lower priority ones. This was a requirements step before using alias more widely, especially to rename existing and established config option. Differential Revision: https://phab.mercurial-scm.org/D9927 diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -662,11 +662,18 @@ class ui(object): msg %= (section, name, pycompat.bytestr(default)) self.develwarn(msg, 2, b'warn-config-default') + candidates = [] + config = self._data(untrusted) for s, n in alternates: - candidate = self._data(untrusted).get(s, n, None) + candidate = config.get(s, n, None) if candidate is not None: - value = candidate - break + candidates.append((s, n, candidate)) + if candidates: + + def level(x): + return config.level(x[0], x[1]) + + value = max(candidates, key=level)[2] if self.debugflag and not untrusted and self._reportuntrusted: for s, n in alternates: diff --git a/tests/test-config.t b/tests/test-config.t --- a/tests/test-config.t +++ b/tests/test-config.t @@ -476,15 +476,12 @@ being true if the config have other alia earlier will be considered "lower level" and the config read later would be considered "higher level". And higher level values wins. -BROKEN: currently not the case. - $ HGRCPATH="file-A.rc" hg log -r . value-A $ HGRCPATH="file-B.rc" hg log -r . value-B $ HGRCPATH="file-A.rc:file-B.rc" hg log -r . - value-A (known-bad-output !) - value-B (missing-correct-output !) + value-B Alias and include ----------------- @@ -493,15 +490,12 @@ The pre/post include priority should als See the case above for details about the two config options used. $ HGRCPATH="file-C.rc" hg log -r . - value-included (known-bad-output !) - value-C (missing-correct-output !) + value-C $ HGRCPATH="file-D.rc" hg log -r . - value-D (known-bad-output !) - value-included (missing-correct-output !) + value-included command line override --------------------- $ HGRCPATH="file-A.rc:file-B.rc" hg log -r . --config ui.logtemplate="value-CLI\n" - value-A (known-bad-output !) - value-CLI (missing-correct-output !) + value-CLI