# HG changeset patch # User Danny Hooper # Date 2019-10-05 14:10:34 # Node ID 808a57a0847005e7db3dc554bfcd3cbedde5eb40 # Parent c5c502bd1f707d99a3f58df7c9216291bd5fc0f1 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 diff --git a/hgext/fix.py b/hgext/fix.py --- a/hgext/fix.py +++ b/hgext/fix.py @@ -173,6 +173,7 @@ FIXER_ATTRS = { 'priority': 0, 'metadata': 'false', 'skipclean': 'true', + 'enabled': 'true', } for key, default in FIXER_ATTRS.items(): @@ -726,6 +727,7 @@ def getfixers(ui): 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 @@ def getfixers(ui): 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)) 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 @@ pattern config is missing, and that we o $ 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.