diff --git a/pre_commit/git.py b/pre_commit/git.py index 3802b5c0..986adb84 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -1,5 +1,6 @@ import functools import os +import os.path import pkg_resources import re from plumbum import local @@ -57,14 +58,13 @@ def get_files_matching(all_file_list_strategy): @memoize_by_cwd def wrapper(expr): regex = re.compile(expr) - return set( + return set(filter(os.path.exists, ( filename for filename in all_file_list_strategy() if regex.search(filename) - ) + ))) return wrapper - get_staged_files_matching = get_files_matching(get_staged_files) get_all_files_matching = get_files_matching(get_all_files) diff --git a/tests/git_test.py b/tests/git_test.py index fe17ab9b..3b701751 100644 --- a/tests/git_test.py +++ b/tests/git_test.py @@ -42,9 +42,9 @@ def test_remove_pre_commit(empty_git_dir): def get_files_matching_func(): def get_filenames(): return ( - 'foo.py', - 'bar/baz.py', - 'tests/baz_test.py', + 'pre_commit/run.py', + 'pre_commit/git.py', + 'im_a_file_that_doesnt_exist.py', 'manifest.yaml', ) @@ -54,9 +54,8 @@ def get_files_matching_func(): def test_get_files_matching_base(get_files_matching_func): ret = get_files_matching_func('') assert ret == set([ - 'foo.py', - 'bar/baz.py', - 'tests/baz_test.py', + 'pre_commit/run.py', + 'pre_commit/git.py', 'manifest.yaml', ]) @@ -64,12 +63,16 @@ def test_get_files_matching_base(get_files_matching_func): def test_get_files_matching_total_match(get_files_matching_func): ret = get_files_matching_func('^.*\.py$') assert ret == set([ - 'foo.py', - 'bar/baz.py', - 'tests/baz_test.py', + 'pre_commit/run.py', + 'pre_commit/git.py', ]) def test_does_search_instead_of_match(get_files_matching_func): ret = get_files_matching_func('\.yaml$') assert ret == set(['manifest.yaml']) + + +def test_does_not_include_deleted_fileS(get_files_matching_func): + ret = get_files_matching_func('exist.py') + assert ret == set()