From 01b557c497c7ff6727b9a6659fdf65f4fc00cfff Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 6 Jun 2014 07:38:25 -0700 Subject: [PATCH] Various cleanup. --- .pre-commit-config.yaml | 10 ----- pre_commit/commands.py | 4 +- pre_commit/git.py | 4 +- pre_commit/languages/all.py | 7 +++- pre_commit/output.py | 4 +- pre_commit/prefixed_command_runner.py | 7 +++- pre_commit/run.py | 8 +++- setup.py | 5 ++- tests/clientlib/validate_base_test.py | 4 +- tests/commands_test.py | 58 ++++++++++++++++++++++----- tests/prefixed_command_runner_test.py | 8 +++- tox.ini | 3 -- 12 files changed, 85 insertions(+), 37 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4163fac9..5887105a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,23 +2,13 @@ sha: 7c003425b35fff516c0ee88f4040c8c208d474bd hooks: - id: trailing-whitespace - files: \.(js|rb|md|py|sh|txt|yaml|yml)$ - id: end-of-file-fixer - files: \.(js|rb|md|py|sh|txt|yaml|yml)$ - id: check-yaml - files: \.(yaml|yml)$ - id: debug-statements - files: \.py$ - id: name-tests-test - files: tests/.+\.py$ - id: flake8 - files: \.py$ - args: - - --max-line-length=131 - repo: git@github.com:pre-commit/pre-commit sha: 96174deac671b451ee2a3fbdc647ad9606415e15 hooks: - id: validate_config - files: ^\.pre-commit-config.yaml$ - id: validate_manifest - files: ^hooks.yaml$ diff --git a/pre_commit/commands.py b/pre_commit/commands.py index 4ff8d01e..a25e7830 100644 --- a/pre_commit/commands.py +++ b/pre_commit/commands.py @@ -29,7 +29,9 @@ logger = logging.getLogger('pre_commit') def install(runner): """Install the pre-commit hooks.""" - pre_commit_file = pkg_resources.resource_filename('pre_commit', 'resources/pre-commit.sh') + pre_commit_file = pkg_resources.resource_filename( + 'pre_commit', 'resources/pre-commit.sh', + ) with open(runner.pre_commit_path, 'w') as pre_commit_file_obj: pre_commit_file_obj.write(open(pre_commit_file).read()) diff --git a/pre_commit/git.py b/pre_commit/git.py index 847aedf4..08db8440 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -29,7 +29,9 @@ def is_in_merge_conflict(): def parse_merge_msg_for_conflicts(merge_msg): # Conflicted files start with tabs return [ - line.strip() for line in merge_msg.splitlines() if line.startswith('\t') + line.strip() + for line in merge_msg.splitlines() + if line.startswith('\t') ] diff --git a/pre_commit/languages/all.py b/pre_commit/languages/all.py index 27565e42..50d83af6 100644 --- a/pre_commit/languages/all.py +++ b/pre_commit/languages/all.py @@ -9,16 +9,19 @@ from pre_commit.languages import system # # Use None for no environment # ENVIRONMENT_DIR = 'foo_env' # -# def install_environment(repo_cmd_runner): +# def install_environment(repo_cmd_runner, version='default'): # """Installs a repository in the given repository. Note that the current # working directory will already be inside the repository. # # Args: # repo_cmd_runner - `PrefixedCommandRunner` bound to the repository. +# version - A version specified in the hook configuration or +# 'default'. # """ # # def run_hook(repo_cmd_runner, hook, file_args): -# """Runs a hook and returns the returncode and output of running that hook. +# """Runs a hook and returns the returncode and output of running that +# hook. # # Args: # repo_cmd_runner - `PrefixedCommandRunner` bound to the repository. diff --git a/pre_commit/output.py b/pre_commit/output.py index a4d99dd3..e3078391 100644 --- a/pre_commit/output.py +++ b/pre_commit/output.py @@ -26,8 +26,8 @@ def get_hook_message( >>> print_hook_message('start', end_len=6) start............................................................... - # Print `start` followed by dots with the end message colored if coloring is - # specified and a newline afterwards + # Print `start` followed by dots with the end message colored if coloring + # is specified and a newline afterwards >>> print_hook_message( 'start', end_msg='end', diff --git a/pre_commit/prefixed_command_runner.py b/pre_commit/prefixed_command_runner.py index 9c3c6b39..90678ddb 100644 --- a/pre_commit/prefixed_command_runner.py +++ b/pre_commit/prefixed_command_runner.py @@ -42,7 +42,12 @@ class PrefixedCommandRunner(object): will run ['/tmp/foo/foo.sh', 'bar', 'baz'] """ - def __init__(self, prefix_dir, popen=subprocess.Popen, makedirs=os.makedirs): + def __init__( + self, + prefix_dir, + popen=subprocess.Popen, + makedirs=os.makedirs + ): self.prefix_dir = prefix_dir.rstrip(os.sep) + os.sep self.__popen = popen self.__makedirs = makedirs diff --git a/pre_commit/run.py b/pre_commit/run.py index 706d68dd..a297ecc9 100644 --- a/pre_commit/run.py +++ b/pre_commit/run.py @@ -35,9 +35,13 @@ def run(argv): '--no-stash', default=False, action='store_true', help='Use this option to prevent auto stashing of unstaged files.', ) - run_parser.add_argument('--verbose', '-v', action='store_true', default=False) + run_parser.add_argument( + '--verbose', '-v', action='store_true', default=False, + ) - help = subparsers.add_parser('help', help='Show help for a specific command.') + help = subparsers.add_parser( + 'help', help='Show help for a specific command.' + ) help.add_argument('help_cmd', nargs='?', help='Command to show help for.') # Argparse doesn't really provide a way to use a `default` subparser diff --git a/setup.py b/setup.py index 3475922c..0bb0362b 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,10 @@ from setuptools import setup setup( name='pre_commit', - description='A framework for managing and maintaining multi-language pre-commit hooks.', + description=( + 'A framework for managing and maintaining multi-language pre-commit ' + 'hooks.' + ), url='https://github.com/pre-commit/pre-commit', version='0.0.0', diff --git a/tests/clientlib/validate_base_test.py b/tests/clientlib/validate_base_test.py index 67cda358..5e85b0ee 100644 --- a/tests/clientlib/validate_base_test.py +++ b/tests/clientlib/validate_base_test.py @@ -44,7 +44,9 @@ def test_raises_for_invalid_yaml_file(noop_validator): def test_raises_for_failing_schema(array_validator): with pytest.raises(ValueError): - array_validator(get_resource_path('valid_yaml_but_invalid_manifest.yaml')) + array_validator( + get_resource_path('valid_yaml_but_invalid_manifest.yaml') + ) def test_passes_array_schema(array_validator): diff --git a/tests/commands_test.py b/tests/commands_test.py index af1f1b08..3d8f32e2 100644 --- a/tests/commands_test.py +++ b/tests/commands_test.py @@ -31,7 +31,9 @@ def test_install_pre_commit(empty_git_dir): assert ret == 0 assert os.path.exists(runner.pre_commit_path) pre_commit_contents = open(runner.pre_commit_path).read() - pre_commit_sh = pkg_resources.resource_filename('pre_commit', 'resources/pre-commit.sh') + pre_commit_sh = pkg_resources.resource_filename( + 'pre_commit', 'resources/pre-commit.sh', + ) expected_contents = open(pre_commit_sh).read() assert pre_commit_contents == expected_contents stat_result = os.stat(runner.pre_commit_path) @@ -132,7 +134,9 @@ def test_removes_defaults(out_of_date_repo, runner_with_mocked_store): assert 'expected_return_value' not in ret['hooks'][0] -def test_autoupdate_out_of_date_repo(out_of_date_repo, mock_out_store_directory): +def test_autoupdate_out_of_date_repo( + out_of_date_repo, mock_out_store_directory +): before = open(C.CONFIG_FILE).read() runner = Runner(out_of_date_repo.python_hooks_repo) ret = commands.autoupdate(runner) @@ -152,7 +156,10 @@ def hook_disappearing_repo(python_hooks_repo): config_wrapped = apply_defaults([config], CONFIG_JSON_SCHEMA) validate_config_extra(config_wrapped) config = config_wrapped[0] - shutil.copy(get_resource_path('manifest_without_foo.yaml'), C.MANIFEST_FILE) + shutil.copy( + get_resource_path('manifest_without_foo.yaml'), + C.MANIFEST_FILE, + ) local['git']['add', '.']() local['git']['commit', '-m', 'Remove foo']() @@ -167,14 +174,18 @@ def hook_disappearing_repo(python_hooks_repo): ) -def test_hook_disppearing_repo_raises(hook_disappearing_repo, runner_with_mocked_store): +def test_hook_disppearing_repo_raises( + hook_disappearing_repo, runner_with_mocked_store +): with pytest.raises(commands.RepositoryCannotBeUpdatedError): commands._update_repository( hook_disappearing_repo.repo_config, runner_with_mocked_store, ) -def test_autoupdate_hook_disappearing_repo(hook_disappearing_repo, mock_out_store_directory): +def test_autoupdate_hook_disappearing_repo( + hook_disappearing_repo, mock_out_store_directory +): before = open(C.CONFIG_FILE).read() runner = Runner(hook_disappearing_repo.python_hooks_repo) ret = commands.autoupdate(runner) @@ -206,7 +217,13 @@ def get_write_mock_output(write_mock): return ''.join(call[0][0] for call in write_mock.call_args_list) -def _get_opts(all_files=False, color=False, verbose=False, hook=None, no_stash=False): +def _get_opts( + all_files=False, + color=False, + verbose=False, + hook=None, + no_stash=False, +): return auto_namedtuple( all_files=all_files, color=color, @@ -234,7 +251,9 @@ def _test_run(repo, options, expected_outputs, expected_ret, stage): assert expected_output_part in printed -def test_run_all_hooks_failing(repo_with_failing_hook, mock_out_store_directory): +def test_run_all_hooks_failing( + repo_with_failing_hook, mock_out_store_directory +): _test_run( repo_with_failing_hook, {}, @@ -262,7 +281,14 @@ def test_run_all_hooks_failing(repo_with_failing_hook, mock_out_store_directory) ({}, ('Bash hook', '(no files to check)', 'Skipped'), 0, False), ) ) -def test_run(repo_with_passing_hook, options, outputs, expected_ret, stage, mock_out_store_directory): +def test_run( + repo_with_passing_hook, + options, + outputs, + expected_ret, + stage, + mock_out_store_directory, +): _test_run(repo_with_passing_hook, options, outputs, expected_ret, stage) @@ -275,7 +301,13 @@ def test_run(repo_with_passing_hook, options, outputs, expected_ret, stage, mock (False, False, True), ), ) -def test_no_stash(repo_with_passing_hook, no_stash, all_files, expect_stash, mock_out_store_directory): +def test_no_stash( + repo_with_passing_hook, + no_stash, + all_files, + expect_stash, + mock_out_store_directory, +): stage_a_file() # Make unstaged changes with open('foo.py', 'w') as foo_file: @@ -347,11 +379,15 @@ def test_skip_hook(repo_with_passing_hook, mock_out_store_directory): assert msg in printed -def test_hook_id_not_in_non_verbose_output(repo_with_passing_hook, mock_out_store_directory): +def test_hook_id_not_in_non_verbose_output( + repo_with_passing_hook, mock_out_store_directory +): ret, printed = _do_run(repo_with_passing_hook, _get_opts(verbose=False)) assert '[bash_hook]' not in printed -def test_hook_id_in_verbose_output(repo_with_passing_hook, mock_out_store_directory): +def test_hook_id_in_verbose_output( + repo_with_passing_hook, mock_out_store_directory +): ret, printed = _do_run(repo_with_passing_hook, _get_opts(verbose=True)) assert '[bash_hook] Bash hook' in printed diff --git a/tests/prefixed_command_runner_test.py b/tests/prefixed_command_runner_test.py index d7ee2ab5..2e4a586f 100644 --- a/tests/prefixed_command_runner_test.py +++ b/tests/prefixed_command_runner_test.py @@ -56,7 +56,9 @@ def test_init_normalizes_path_endings(input, expected_prefix): def test_run_substitutes_prefix(popen_mock, makedirs_mock): - instance = PrefixedCommandRunner('prefix', popen=popen_mock, makedirs=makedirs_mock) + instance = PrefixedCommandRunner( + 'prefix', popen=popen_mock, makedirs=makedirs_mock, + ) ret = instance.run(['{prefix}bar', 'baz'], retcode=None) popen_mock.assert_called_once_with( ['prefix/bar', 'baz'], @@ -104,7 +106,9 @@ def test_from_command_runner(prefix, path_end, expected_output): def test_from_command_runner_preserves_popen(popen_mock, makedirs_mock): - first = PrefixedCommandRunner('foo', popen=popen_mock, makedirs=makedirs_mock) + first = PrefixedCommandRunner( + 'foo', popen=popen_mock, makedirs=makedirs_mock, + ) second = PrefixedCommandRunner.from_command_runner(first, 'bar') second.run(['foo/bar/baz'], retcode=None) popen_mock.assert_called_once_with( diff --git a/tox.ini b/tox.ini index ca14ff82..87082d9e 100644 --- a/tox.ini +++ b/tox.ini @@ -23,6 +23,3 @@ deps = sphinx changedir = docs commands = sphinx-build -b html -d build/doctrees source build/html - -[flake8] -max-line-length=131