From 858e89865ed476b2d8550f7ffb8e73bcd34a9d31 Mon Sep 17 00:00:00 2001 From: Mike Mabey Date: Thu, 12 Sep 2019 09:52:56 -0600 Subject: [PATCH] New option to allow modified files --- pre_commit/commands/run.py | 9 +++++++-- pre_commit/main.py | 7 +++++++ testing/util.py | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 0b1f7b7e..6a72149e 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -129,15 +129,20 @@ def _run_single_hook(classifier, hook, args, skips, cols, use_color): diff_after = cmd_output_b('git', 'diff', '--no-ext-diff', retcode=None) file_modifications = diff_before != diff_after + modified_ok = args.modified_files_ok # If the hook makes changes, fail the commit - if file_modifications: + if not modified_ok and file_modifications: retcode = 1 - if retcode: + if retcode and not modified_ok: retcode = 1 print_color = color.RED pass_fail = 'Failed' + elif file_modifications and modified_ok: + retcode = 0 + print_color = color.YELLOW + pass_fail = 'Edited' else: retcode = 0 print_color = color.GREEN diff --git a/pre_commit/main.py b/pre_commit/main.py index 59de5f24..ade17a51 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -101,6 +101,13 @@ def _add_run_options(parser): '--show-diff-on-failure', action='store_true', help='When hooks fail, run `git diff` directly afterward.', ) + parser.add_argument( + '--modified-files-ok', '-m', action='store_true', + default='PRE_COMMIT_MODIFIED_FILES_OK' in os.environ, + help="File modification by hooks won't be equated with failure. " + 'Equivalent to setting the environment variable ' + 'PRE_COMMIT_MODIFIED_FILES_OK=true.', + ) mutex_group = parser.add_mutually_exclusive_group(required=False) mutex_group.add_argument( '--all-files', '-a', action='store_true', default=False, diff --git a/testing/util.py b/testing/util.py index d82612fa..fa706b2f 100644 --- a/testing/util.py +++ b/testing/util.py @@ -107,6 +107,7 @@ def run_opts( hook_stage='commit', show_diff_on_failure=False, commit_msg_filename='', + modified_files_ok=False, ): # These are mutually exclusive assert not (all_files and files) @@ -121,6 +122,7 @@ def run_opts( hook_stage=hook_stage, show_diff_on_failure=show_diff_on_failure, commit_msg_filename=commit_msg_filename, + modified_files_ok=modified_files_ok, )