diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 600b7e2f..a62d0474 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -53,10 +53,12 @@ def _filter_by_types(filenames, exclude_types, get_tags=tags_from_path): types, exclude_types = frozenset(types), frozenset(exclude_types) + valid_types = types - exclude_types + ret = [] for filename in filenames: - tags = get_tags(filename) - if tags >= types and not tags & exclude_types: + tags = frozenset(get_tags(filename)) + if len(valid_types.intersection(tags)) > 0: ret.append(filename) return tuple(ret) diff --git a/tests/commands/run_test.py b/tests/commands/run_test.py index f458e10b..e9e66534 100644 --- a/tests/commands/run_test.py +++ b/tests/commands/run_test.py @@ -834,15 +834,16 @@ def test_include_exclude_exclude_removes_files(some_filenames): ret = _filter_by_include_exclude(some_filenames, '', r'\.py$') assert ret == {'.pre-commit-hooks.yaml'} + def get_tags_stub(interpreter): return lambda x: tags_from_interpreter(interpreter) -@pytest.mark.current + def test_filter_by_types_for_bash_by_interpreter(): ret = _filter_by_types(['bash_script'], ['shell', 'sh', 'bash'], [], get_tags=get_tags_stub('bash')) assert ret == ('bash_script',) -@pytest.mark.current + def test_filter_by_types_for_python_by_interpreter(): ret = _filter_by_types(['script.py'], ['python'], [], get_tags=get_tags_stub('python')) assert ret == ('script.py',)