fix: add :enabled sub-config for fixer tools
authorDanny Hooper <hooper@google.com>
Sat, 05 Oct 2019 07:10:34 -0700
changeset 43058 808a57a08470
parent 43057 c5c502bd1f70
child 43059 4bbc9569e722
fix: add :enabled sub-config for fixer tools This allows distributing opt-in fixer tool configurations in .hgrc files. This may be useful for adding default configs in core, or for orgranizations that want to provide configs to their users. Tools are still enabled by default because it would be confusing to add a config and find that it has no effect until you add enabled=true. Differential Revision: https://phab.mercurial-scm.org/D6975
hgext/fix.py
tests/test-fix.t
--- a/hgext/fix.py	Sat Oct 05 11:21:39 2019 -0400
+++ b/hgext/fix.py	Sat Oct 05 07:10:34 2019 -0700
@@ -173,6 +173,7 @@
     'priority': 0,
     'metadata': 'false',
     'skipclean': 'true',
+    'enabled': 'true',
 }
 
 for key, default in FIXER_ATTRS.items():
@@ -726,6 +727,7 @@
         fixers[name]._priority = int(fixers[name]._priority)
         fixers[name]._metadata = stringutil.parsebool(fixers[name]._metadata)
         fixers[name]._skipclean = stringutil.parsebool(fixers[name]._skipclean)
+        fixers[name]._enabled = stringutil.parsebool(fixers[name]._enabled)
         # Don't use a fixer if it has no pattern configured. It would be
         # dangerous to let it affect all files. It would be pointless to let it
         # affect no files. There is no reasonable subset of files to use as the
@@ -734,6 +736,9 @@
             ui.warn(
                 _('fixer tool has no pattern configuration: %s\n') % (name,))
             del fixers[name]
+        elif not fixers[name]._enabled:
+            ui.debug('ignoring disabled fixer tool: %s\n' % (name,))
+            del fixers[name]
     return collections.OrderedDict(
         sorted(fixers.items(), key=lambda item: item[1]._priority,
                reverse=True))
--- a/tests/test-fix.t	Sat Oct 05 11:21:39 2019 -0400
+++ b/tests/test-fix.t	Sat Oct 05 07:10:34 2019 -0700
@@ -1341,6 +1341,22 @@
 
   $ cd ..
 
+Tools can be disabled. Disabled tools do nothing but print a debug message.
+
+  $ hg init disabled
+  $ cd disabled
+
+  $ printf "foo\n" > foo
+  $ hg add -q
+  $ hg fix --debug --working-dir --config "fix.disabled:command=echo fixed" \
+  >                              --config "fix.disabled:pattern=foo" \
+  >                              --config "fix.disabled:enabled=false"
+  ignoring disabled fixer tool: disabled
+  $ cat foo
+  foo
+
+  $ cd ..
+
 Test that we can configure a fixer to affect all files regardless of the cwd.
 The way we invoke matching must not prohibit this.