X Tutup
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pre_commit/meta_hooks/check_hooks_apply.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def check_all_hooks_match_files(config_file):

for repo in repositories(load_config(config_file), Store()):
for hook_id, hook in repo.hooks:
if hook['always_run']:
if hook['always_run'] or hook['language'] == 'fail':
continue
include, exclude = hook['files'], hook['exclude']
filtered = _filter_by_include_exclude(files, include, exclude)
Expand Down
160 changes: 97 additions & 63 deletions tests/meta_hooks/check_hooks_apply_test.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
from collections import OrderedDict

from pre_commit.meta_hooks import check_hooks_apply
from testing.fixtures import add_config_to_repo
from testing.fixtures import git_dir
from testing.util import cwd


def test_hook_excludes_everything(capsys, tempdir_factory, mock_store_dir):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude', '.pre-commit-config.yaml'),
)),
),
),
))
config = {
'repos': [
{
'repo': 'meta',
'hooks': [
{
'id': 'check-useless-excludes',
'exclude': '.pre-commit-config.yaml',
},
],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand All @@ -30,17 +30,19 @@ def test_hook_excludes_everything(capsys, tempdir_factory, mock_store_dir):


def test_hook_includes_nothing(capsys, tempdir_factory, mock_store_dir):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('files', 'foo'),
)),
),
),
))
config = {
'repos': [
{
'repo': 'meta',
'hooks': [
{
'id': 'check-useless-excludes',
'files': 'foo',
},
],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand All @@ -53,17 +55,19 @@ def test_hook_includes_nothing(capsys, tempdir_factory, mock_store_dir):


def test_hook_types_not_matched(capsys, tempdir_factory, mock_store_dir):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('types', ['python']),
)),
),
),
))
config = {
'repos': [
{
'repo': 'meta',
'hooks': [
{
'id': 'check-useless-excludes',
'types': ['python'],
},
],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand All @@ -78,17 +82,19 @@ def test_hook_types_not_matched(capsys, tempdir_factory, mock_store_dir):
def test_hook_types_excludes_everything(
capsys, tempdir_factory, mock_store_dir,
):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude_types', ['yaml']),
)),
),
),
))
config = {
'repos': [
{
'repo': 'meta',
'hooks': [
{
'id': 'check-useless-excludes',
'exclude_types': ['yaml'],
},
],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand All @@ -100,23 +106,51 @@ def test_hook_types_excludes_everything(
assert 'check-useless-excludes does not apply to this repository' in out


def test_valid_includes(capsys, tempdir_factory, mock_store_dir):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
)),
# Should not be reported as an error due to always_run
OrderedDict((
('id', 'check-useless-excludes'),
('files', '^$'),
('always_run', True),
)),
),
),
))
def test_valid_always_run(capsys, tempdir_factory, mock_store_dir):
config = {
'repos': [
{
'repo': 'meta',
'hooks': [
# Should not be reported as an error due to always_run
{
'id': 'check-useless-excludes',
'files': '^$',
'always_run': True,
},
],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)

with cwd(repo):
assert check_hooks_apply.main(()) == 0

out, _ = capsys.readouterr()
assert out == ''


def test_valid_language_fail(capsys, tempdir_factory, mock_store_dir):
config = {
'repos': [
{
'repo': 'local',
'hooks': [
# Should not be reported as an error due to language: fail
{
'id': 'changelogs-rst',
'name': 'changelogs must be rst',
'entry': 'changelog filenames must end in .rst',
'language': 'fail',
'files': r'changelog/.*(?<!\.rst)$',
},
],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,19 @@
from collections import OrderedDict

from pre_commit.meta_hooks import check_useless_excludes
from testing.fixtures import add_config_to_repo
from testing.fixtures import git_dir
from testing.util import cwd


def test_useless_exclude_global(capsys, tempdir_factory):
config = OrderedDict((
('exclude', 'foo'),
(
'repos', [
OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
)),
),
),
)),
],
),
))
config = {
'exclude': 'foo',
'repos': [
{
'repo': 'meta',
'hooks': [{'id': 'check-useless-excludes'}],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand All @@ -32,21 +22,19 @@ def test_useless_exclude_global(capsys, tempdir_factory):
assert check_useless_excludes.main(()) == 1

out, _ = capsys.readouterr()
assert "The global exclude pattern 'foo' does not match any files" in out
out = out.strip()
assert "The global exclude pattern 'foo' does not match any files" == out


def test_useless_exclude_for_hook(capsys, tempdir_factory):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude', 'foo'),
)),
),
),
))
config = {
'repos': [
{
'repo': 'meta',
'hooks': [{'id': 'check-useless-excludes', 'exclude': 'foo'}],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand All @@ -55,24 +43,23 @@ def test_useless_exclude_for_hook(capsys, tempdir_factory):
assert check_useless_excludes.main(()) == 1

out, _ = capsys.readouterr()
out = out.strip()
expected = (
"The exclude pattern 'foo' for check-useless-excludes "
"does not match any files"
)
assert expected in out
assert expected == out


def test_no_excludes(capsys, tempdir_factory):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
)),
),
),
))
config = {
'repos': [
{
'repo': 'meta',
'hooks': [{'id': 'check-useless-excludes'}],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand All @@ -85,17 +72,19 @@ def test_no_excludes(capsys, tempdir_factory):


def test_valid_exclude(capsys, tempdir_factory):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude', '.pre-commit-config.yaml'),
)),
),
),
))
config = {
'repos': [
{
'repo': 'meta',
'hooks': [
{
'id': 'check-useless-excludes',
'exclude': '.pre-commit-config.yaml',
},
],
},
],
}

repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
Expand Down
X Tutup