fix check-useless-excludes for exclude of broken symlink

This commit is contained in:
Anthony Sottile
2021-08-30 19:58:59 -04:00
parent a96bb23caf
commit 35d3ed40cd
2 changed files with 25 additions and 0 deletions

View File

@@ -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)

View File

@@ -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):
@@ -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 == ''