# HG changeset patch # User Gregory Szorc # Date 2017-07-02 03:34:27 # Node ID 5d8942dbe49e64a8a9f6377c1c65273721a378af # Parent c077eac329e26a4ca7da8b80071ba9161994bcfe check-config: syntax to allow inconsistent config values The ignore regular expression has been updated to detect "inconsistent config." If present, we track which configs have that set and we suppress the conflicting defaults error for those options. I also added named groups to the regexp to aid readability. A comment was added to profiling.py to make a desired inconsistent value error go away. 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')