[PATCH] check-config: syntax to allow inconsistent config values

Gregory Szorc gregory.szorc at gmail.com
Sun Jul 2 03:35:17 UTC 2017


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1498966467 25200
#      Sat Jul 01 20:34:27 2017 -0700
# Node ID d44bbbaf266b9f6ce0c9e9820d0f72f4b2af34bd
# Parent  6d678ab1b10d0fddc73003d21aa3c7ec43194e2e
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(?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 @@ 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 = '<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]))
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')


More information about the Mercurial-devel mailing list