D6975: fix: add :enabled sub-config for fixer tools

hooper (Danny Hooper) phabricator at mercurial-scm.org
Sat Oct 5 14:42:40 UTC 2019


hooper created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  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.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6975

AFFECTED FILES
  hgext/fix.py
  tests/test-fix.t

CHANGE DETAILS

diff --git a/tests/test-fix.t b/tests/test-fix.t
--- a/tests/test-fix.t
+++ b/tests/test-fix.t
@@ -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.
 
diff --git a/hgext/fix.py b/hgext/fix.py
--- a/hgext/fix.py
+++ b/hgext/fix.py
@@ -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))



To: hooper, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list