diff --git a/contrib/check-config.py b/contrib/check-config.py --- a/contrib/check-config.py +++ b/contrib/check-config.py @@ -13,6 +13,7 @@ import sys foundopts = {} documented = {} +allowinconsistent = set() configre = re.compile(r''' # Function call @@ -36,6 +37,11 @@ configwithre = re.compile(''' configpartialre = (r"""ui\.config""") +ignorere = re.compile(r''' + \#\s(?Pinternal|experimental|deprecated|developer|inconsistent)\s + config:\s(?P\S+\.\S+)$ + ''', re.VERBOSE | re.MULTILINE) + def main(args): for f in args: sect = '' @@ -82,10 +88,12 @@ def main(args): documented[m.group(1)] = 1 # look for ignore markers - m = re.search(r'# (?:internal|experimental|deprecated|developer)' - ' config: (\S+\.\S+)$', l) + m = ignorere.search(l) if m: - documented[m.group(1)] = 1 + if m.group('reason') == 'inconsistent': + allowinconsistent.add(m.group('config')) + else: + documented[m.group('config')] = 1 # look for code-like bits line = carryover + l @@ -100,7 +108,8 @@ def main(args): default = '' if re.match('[a-z.]+$', default): default = '' - if name in foundopts and (ctype, default) != foundopts[name]: + if (name in foundopts and (ctype, default) != foundopts[name] + and name not in allowinconsistent): print(l) print("conflict on %s: %r != %r" % (name, (ctype, default), foundopts[name])) diff --git a/mercurial/profiling.py b/mercurial/profiling.py --- a/mercurial/profiling.py +++ b/mercurial/profiling.py @@ -141,6 +141,7 @@ def statprofile(ui, fp): showmax = ui.configwith(fraction, 'profiling', 'showmax', 0.999) kwargs.update(minthreshold=showmin, maxthreshold=showmax) elif profformat == 'hotpath': + # inconsistent config: profiling.showmin limit = ui.configwith(fraction, 'profiling', 'showmin', 0.05) kwargs['limit'] = limit diff --git a/tests/test-check-config.t b/tests/test-check-config.t --- a/tests/test-check-config.t +++ b/tests/test-check-config.t @@ -14,6 +14,13 @@ Sanity check check-config.py > # Missing with default value > foo = ui.configbool('ui', 'missingbool1', default=True) > foo = ui.configbool('ui', 'missingbool2', False) + > # Inconsistent values for defaults. + > foo = ui.configint('ui', 'intdefault', default=1) + > foo = ui.configint('ui', 'intdefault', default=42) + > # Can suppress inconsistent value error + > foo = ui.configint('ui', 'intdefault2', default=1) + > # inconsistent config: ui.intdefault2 + > foo = ui.configint('ui', 'intdefault2', default=42) > EOF $ cat > files << EOF @@ -24,7 +31,12 @@ Sanity check check-config.py $ cd "$TESTDIR"/.. $ $PYTHON contrib/check-config.py < $TESTTMP/files + foo = ui.configint('ui', 'intdefault', default=42) + + conflict on ui.intdefault: ('int', '42') != ('int', '1') undocumented: ui.doesnotexist (str) + undocumented: ui.intdefault (int) [42] + undocumented: ui.intdefault2 (int) [42] undocumented: ui.missingbool1 (bool) [True] undocumented: ui.missingbool2 (bool) undocumented: ui.missingint (int) @@ -33,6 +45,3 @@ New errors are not allowed. Warnings are $ syshg files "set:(**.py or **.txt) - tests/**" | sed 's|\\|/|g' | > $PYTHON contrib/check-config.py - limit = ui.configwith(fraction, 'profiling', 'showmin', 0.05) - - conflict on profiling.showmin: ('with', '0.05') != ('with', '0.005')