Skip to content

Commit

Permalink
fix check-useless-excludes for exclude of broken symlink
Browse files Browse the repository at this point in the history
  • Loading branch information
asottile committed Aug 30, 2021
1 parent 66c51a3 commit a2c7992
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
3 changes: 3 additions & 0 deletions pre_commit/meta_hooks/check_useless_excludes.py
Expand Up @@ -43,6 +43,9 @@ def check_useless_excludes(config_file: str) -> int:

for repo in config['repos']:
for hook in repo['hooks']:
# the default of manifest hooks is `types: [file]` but we may
# be configuring a symlink hook while there's a broken symlink
hook.setdefault('types', [])
# Not actually a manifest dict, but this more accurately reflects
# the defaults applied during runtime
hook = apply_defaults(hook, MANIFEST_HOOK_DICT)
Expand Down
22 changes: 22 additions & 0 deletions tests/meta_hooks/check_useless_excludes_test.py
@@ -1,5 +1,10 @@
from pre_commit import git
from pre_commit.meta_hooks import check_useless_excludes
from pre_commit.util import cmd_output
from testing.fixtures import add_config_to_repo
from testing.fixtures import make_config_from_repo
from testing.fixtures import make_repo
from testing.util import xfailif_windows


def test_useless_exclude_global(capsys, in_git_dir):
Expand Down Expand Up @@ -113,3 +118,20 @@ def test_valid_exclude(capsys, in_git_dir):

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


@xfailif_windows # pragma: win32 no cover
def test_useless_excludes_broken_symlink(capsys, in_git_dir, tempdir_factory):
path = make_repo(tempdir_factory, 'script_hooks_repo')
config = make_config_from_repo(path)
config['hooks'][0]['exclude'] = 'broken-symlink'
add_config_to_repo(in_git_dir.strpath, config)

in_git_dir.join('broken-symlink').mksymlinkto('DNE')
cmd_output('git', 'add', 'broken-symlink')
git.commit()

assert check_useless_excludes.main(('.pre-commit-config.yaml',)) == 0

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

0 comments on commit a2c7992

Please sign in to comment.