diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -664,11 +664,18 @@ 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 @@ -474,15 +474,12 @@ When both are defined, the value for any of them defined within the highest level config source (read later) should win. -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 ----------------- @@ -491,15 +488,12 @@ 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