From 53cc2a64c99e68cbe1d89655d8f7f7589193faf5 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Mon, 15 Jun 2015 11:25:58 -0700 Subject: [PATCH] Allow unstaged config when running against files or all-files. Resolves #242 --- pre_commit/commands/run.py | 6 +++--- tests/commands/run_test.py | 35 ++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 66bc43b7..0e0e16e9 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -139,6 +139,7 @@ def _has_unstaged_config(runner): def run(runner, args, write=sys_stdout_write_wrapper, environ=os.environ): + no_stash = args.no_stash or args.all_files or bool(args.files) # Set up our logging handler logger.addHandler(LoggingHandler(args.color, write=write)) logger.setLevel(logging.INFO) @@ -150,7 +151,7 @@ def run(runner, args, write=sys_stdout_write_wrapper, environ=os.environ): if bool(args.source) != bool(args.origin): logger.error('Specify both --origin and --source.') return 1 - if _has_unstaged_config(runner) and not args.no_stash: + if _has_unstaged_config(runner) and not no_stash: if args.allow_unstaged_config: logger.warn( 'You have an unstaged config file and have specified the ' @@ -166,8 +167,7 @@ def run(runner, args, write=sys_stdout_write_wrapper, environ=os.environ): ) return 1 - # Don't stash if specified or files are specified - if args.no_stash or args.all_files or args.files: + if no_stash: ctx = noop_context() else: ctx = staged_files_only(runner.cmd_runner) diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index c687e832..747493dc 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -433,14 +433,17 @@ def test_allow_unstaged_config_option( assert ret == 0 -def test_no_allow_unstaged_config_option( - repo_with_passing_hook, mock_out_store_directory, -): - with cwd(repo_with_passing_hook): +def modify_config(path): + with cwd(path): with io.open('.pre-commit-config.yaml', 'a+') as config_file: # writing a newline should be relatively harmless to get a change config_file.write('\n') + +def test_no_allow_unstaged_config_option( + repo_with_passing_hook, mock_out_store_directory, +): + modify_config(repo_with_passing_hook) args = _get_opts(allow_unstaged_config=False) ret, printed = _do_run(repo_with_passing_hook, args) assert 'Your .pre-commit-config.yaml is unstaged.' in printed @@ -450,11 +453,25 @@ def test_no_allow_unstaged_config_option( def test_no_stash_suppresses_allow_unstaged_config_option( repo_with_passing_hook, mock_out_store_directory, ): - with cwd(repo_with_passing_hook): - with io.open('.pre-commit-config.yaml', 'a+') as config_file: - # writing a newline should be relatively harmless to get a change - config_file.write('\n') - + modify_config(repo_with_passing_hook) args = _get_opts(allow_unstaged_config=False, no_stash=True) ret, printed = _do_run(repo_with_passing_hook, args) assert 'Your .pre-commit-config.yaml is unstaged.' not in printed + + +def test_all_files_suppresses_allow_unstaged_config_option( + repo_with_passing_hook, mock_out_store_directory, +): + modify_config(repo_with_passing_hook) + args = _get_opts(all_files=True) + ret, printed = _do_run(repo_with_passing_hook, args) + assert 'Your .pre-commit-config.yaml is unstaged.' not in printed + + +def test_files_suppresses_allow_unstaged_config_option( + repo_with_passing_hook, mock_out_store_directory, +): + modify_config(repo_with_passing_hook) + args = _get_opts(files=['.pre-commit-config.yaml']) + ret, printed = _do_run(repo_with_passing_hook, args) + assert 'Your .pre-commit-config.yaml is unstaged.' not in printed