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)) 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.