support IGNORE envoronment variable to ignore failure

This commit is contained in:
SimonHeimberg 2018-11-28 08:40:30 +01:00
parent 51659ee606
commit e6950bdfa9

View file

@ -25,8 +25,8 @@ logger = logging.getLogger('pre_commit')
tags_from_path = memoize_by_cwd(tags_from_path) tags_from_path = memoize_by_cwd(tags_from_path)
def _get_skips(environ): def _get_skips(environ, varname='SKIP'):
skips = environ.get('SKIP', '') skips = environ.get(varname, '')
return {skip.strip() for skip in skips.split(',') if skip.strip()} return {skip.strip() for skip in skips.split(',') if skip.strip()}
@ -62,7 +62,7 @@ SKIPPED = 'Skipped'
NO_FILES = '(no files to check)' NO_FILES = '(no files to check)'
def _run_single_hook(filenames, hook, repo, args, skips, cols): def _run_single_hook(filenames, hook, repo, args, skips, cols, ignores):
include, exclude = hook['files'], hook['exclude'] include, exclude = hook['files'], hook['exclude']
filenames = _filter_by_include_exclude(filenames, include, exclude) filenames = _filter_by_include_exclude(filenames, include, exclude)
types, exclude_types = hook['types'], hook['exclude_types'] types, exclude_types = hook['types'], hook['exclude_types']
@ -119,7 +119,12 @@ def _run_single_hook(filenames, hook, repo, args, skips, cols):
if file_modifications: if file_modifications:
retcode = 1 retcode = 1
if retcode: ignored = retcode and not file_modifications and hook['id'] in ignores
if ignored:
retcode = 0
print_color = color.YELLOW
pass_fail = 'Ignore'
elif retcode:
retcode = 1 retcode = 1
print_color = color.RED print_color = color.RED
pass_fail = 'Failed' pass_fail = 'Failed'
@ -132,7 +137,7 @@ def _run_single_hook(filenames, hook, repo, args, skips, cols):
if ( if (
(stdout or stderr or file_modifications) and (stdout or stderr or file_modifications) and
(retcode or args.verbose or hook['verbose']) (retcode or ignored or args.verbose or hook['verbose'])
): ):
output.write_line('hookid: {}\n'.format(hook['id'])) output.write_line('hookid: {}\n'.format(hook['id']))
@ -191,12 +196,15 @@ def _all_filenames(args):
def _run_hooks(config, repo_hooks, args, environ): def _run_hooks(config, repo_hooks, args, environ):
"""Actually run the hooks.""" """Actually run the hooks."""
skips = _get_skips(environ) skips = _get_skips(environ)
ignores = _get_skips(environ, 'IGNORE')
cols = _compute_cols([hook for _, hook in repo_hooks], args.verbose) cols = _compute_cols([hook for _, hook in repo_hooks], args.verbose)
filenames = _all_filenames(args) filenames = _all_filenames(args)
filenames = _filter_by_include_exclude(filenames, '', config['exclude']) filenames = _filter_by_include_exclude(filenames, '', config['exclude'])
retval = 0 retval = 0
for repo, hook in repo_hooks: for repo, hook in repo_hooks:
retval |= _run_single_hook(filenames, hook, repo, args, skips, cols) retval |= _run_single_hook(
filenames, hook, repo, args, skips, cols, ignores,
)
if retval and config['fail_fast']: if retval and config['fail_fast']:
break break
if ( if (