diff -r 749ef8c31187 -r ed0da6e0d6ee hgext/fix.py --- a/hgext/fix.py Wed Jul 10 09:57:28 2019 +0200 +++ b/hgext/fix.py Mon Aug 12 16:39:39 2019 -0700 @@ -36,6 +36,15 @@ {first} The 1-based line number of the first line in the modified range {last} The 1-based line number of the last line in the modified range +Deleted sections of a file will be ignored by :linerange, because there is no +corresponding line range in the version being fixed. + +By default, tools that set :linerange will only be executed if there is at least +one changed line range. This is meant to prevent accidents like running a code +formatter in such a way that it unexpectedly reformats the whole file. If such a +tool needs to operate on unchanged files, it should set the :skipclean suboption +to false. + The :pattern suboption determines which files will be passed through each configured tool. See :hg:`help patterns` for possible values. If there are file arguments to :hg:`fix`, the intersection of these patterns is used. @@ -126,6 +135,7 @@ from mercurial.utils import ( procutil, + stringutil, ) from mercurial import ( @@ -162,6 +172,7 @@ 'pattern': None, 'priority': 0, 'metadata': False, + 'skipclean': 'true', } for key, default in FIXER_ATTRS.items(): @@ -713,6 +724,7 @@ setattr(fixers[name], pycompat.sysstr('_' + key), attrs.get(key, default)) fixers[name]._priority = int(fixers[name]._priority) + fixers[name]._skipclean = stringutil.parsebool(fixers[name]._skipclean) # 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 @@ -756,7 +768,7 @@ {'rootpath': path, 'basename': os.path.basename(path)})] if self._linerange: ranges = rangesfn() - if not ranges: + if self._skipclean and not ranges: # No line ranges to fix, so don't run the fixer. return None for first, last in ranges: