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.
--- a/contrib/check-config.py Fri Jun 30 03:28:02 2017 +0200
+++ b/contrib/check-config.py Sat Jul 01 20:34:27 2017 -0700
@@ -13,6 +13,7 @@
foundopts = {}
documented = {}
+allowinconsistent = set()
configre = re.compile(r'''
# Function call
@@ -36,6 +37,11 @@
configpartialre = (r"""ui\.config""")
+ignorere = re.compile(r'''
+ \#\s(?P<reason>internal|experimental|deprecated|developer|inconsistent)\s
+ config:\s(?P<config>\S+\.\S+)$
+ ''', re.VERBOSE | re.MULTILINE)
+
def main(args):
for f in args:
sect = ''
@@ -82,10 +88,12 @@
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 @@
default = ''
if re.match('[a-z.]+$', default):
default = '<variable>'
- 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]))
--- a/mercurial/profiling.py Fri Jun 30 03:28:02 2017 +0200
+++ b/mercurial/profiling.py Sat Jul 01 20:34:27 2017 -0700
@@ -141,6 +141,7 @@
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
--- a/tests/test-check-config.t Fri Jun 30 03:28:02 2017 +0200
+++ b/tests/test-check-config.t Sat Jul 01 20:34:27 2017 -0700
@@ -14,6 +14,13 @@
> # 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 @@
$ 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 @@
$ 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')