From b575cb510c9780f052a89acec5fafd5a74a76062 Mon Sep 17 00:00:00 2001 From: Lucas Cimon Date: Tue, 2 Jun 2015 21:43:30 +0200 Subject: [PATCH] Fix #238 : pre-commit autoupdate fails with local hooks --- pre_commit/commands/autoupdate.py | 3 +++ pre_commit/repository.py | 5 ++--- testing/fixtures.py | 13 +++++++++++++ tests/commands/autoupdate_test.py | 10 ++++++++++ tests/repository_test.py | 13 ++----------- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/pre_commit/commands/autoupdate.py b/pre_commit/commands/autoupdate.py index 1a24b09f..9e1e79f2 100644 --- a/pre_commit/commands/autoupdate.py +++ b/pre_commit/commands/autoupdate.py @@ -8,6 +8,7 @@ from aspy.yaml import ordered_load import pre_commit.constants as C from pre_commit.clientlib.validate_config import CONFIG_JSON_SCHEMA +from pre_commit.clientlib.validate_config import is_local_hooks from pre_commit.clientlib.validate_config import load_config from pre_commit.jsonschema_extensions import remove_defaults from pre_commit.ordereddict import OrderedDict @@ -67,6 +68,8 @@ def autoupdate(runner): ) for repo_config in input_configs: + if is_local_hooks(repo_config): + continue sys.stdout.write('Updating {0}...'.format(repo_config['repo'])) sys.stdout.flush() try: diff --git a/pre_commit/repository.py b/pre_commit/repository.py index 71cc3569..83a3c01e 100644 --- a/pre_commit/repository.py +++ b/pre_commit/repository.py @@ -125,9 +125,8 @@ class Repository(object): class LocalRepository(Repository): - def __init__(self, repo_config, repo_path_getter=None): - repo_path_getter = None - super(LocalRepository, self).__init__(repo_config, repo_path_getter) + def __init__(self, repo_config): + super(LocalRepository, self).__init__(repo_config, None) @cached_property def hooks(self): diff --git a/testing/fixtures.py b/testing/fixtures.py index 1c0184a0..820a72be 100644 --- a/testing/fixtures.py +++ b/testing/fixtures.py @@ -35,6 +35,19 @@ def make_repo(tmpdir_factory, repo_source): return path +def config_with_local_hooks(): + return OrderedDict(( + ('repo', 'local'), + ('hooks', [OrderedDict(( + ('id', 'do_not_commit'), + ('name', 'Block if "DO NOT COMMIT" is found'), + ('entry', 'DO NOT COMMIT'), + ('language', 'pcre'), + ('files', '^(.*)$'), + ))]) + )) + + def make_config_from_repo(repo_path, sha=None, hooks=None, check=True): manifest = load_manifest(os.path.join(repo_path, C.MANIFEST_FILE)) config = OrderedDict(( diff --git a/tests/commands/autoupdate_test.py b/tests/commands/autoupdate_test.py index 5dbc439c..771e67b1 100644 --- a/tests/commands/autoupdate_test.py +++ b/tests/commands/autoupdate_test.py @@ -13,6 +13,9 @@ from pre_commit.runner import Runner from pre_commit.util import cmd_output from pre_commit.util import cwd from testing.auto_namedtuple import auto_namedtuple +from testing.fixtures import add_config_to_repo +from testing.fixtures import config_with_local_hooks +from testing.fixtures import git_dir from testing.fixtures import make_config_from_repo from testing.fixtures import make_repo from testing.fixtures import write_config @@ -137,3 +140,10 @@ def test_autoupdate_hook_disappearing_repo( after = open(C.CONFIG_FILE).read() assert ret == 1 assert before == after + + +def test_autoupdate_local_hooks(tmpdir_factory): + git_path = git_dir(tmpdir_factory) + config = config_with_local_hooks() + path = add_config_to_repo(git_path, config) + assert autoupdate(Runner(path)) == 0 diff --git a/tests/repository_test.py b/tests/repository_test.py index f2e88507..e7ad2276 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -12,10 +12,10 @@ from pre_commit.clientlib.validate_config import CONFIG_JSON_SCHEMA from pre_commit.clientlib.validate_config import validate_config_extra from pre_commit.jsonschema_extensions import apply_defaults from pre_commit.languages.python import PythonEnv -from pre_commit.ordereddict import OrderedDict from pre_commit.repository import Repository from pre_commit.util import cmd_output from pre_commit.util import cwd +from testing.fixtures import config_with_local_hooks from testing.fixtures import git_dir from testing.fixtures import make_config_from_repo from testing.fixtures import make_repo @@ -404,16 +404,7 @@ def test_tags_on_repositories(in_tmpdir, tmpdir_factory, store): def test_local_repository(): - config = OrderedDict(( - ('repo', 'local'), - ('hooks', [OrderedDict(( - ('id', 'do_not_commit'), - ('name', 'Block if "DO NOT COMMIT" is found'), - ('entry', 'DO NOT COMMIT'), - ('language', 'pcre'), - ('files', '^(.*)$'), - ))]) - )) + config = config_with_local_hooks() local_repo = Repository.create(config, 'dummy') with pytest.raises(NotImplementedError): local_repo.sha