Skip to content

Commit

Permalink
[pre-commit.ci] auto fixes from pre-commit.com hooks
Browse files Browse the repository at this point in the history
for more information, see https://pre-commit.ci
  • Loading branch information
pre-commit-ci[bot] committed Mar 26, 2024
1 parent ad4b2b1 commit 17efd6f
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 44 deletions.
38 changes: 22 additions & 16 deletions pre_commit_hooks/check_illegal_windows_names.py
@@ -1,12 +1,18 @@
from __future__ import annotations

import argparse
import os.path
from pathlib import Path
from typing import Iterable, Iterator, Optional, Sequence, Set
from typing import Iterable
from typing import Iterator
from typing import Optional
from typing import Sequence
from typing import Set

from pre_commit_hooks.util import added_files


def lower_set(iterable: Iterable[str]) -> Set[str]:
def lower_set(iterable: Iterable[str]) -> set[str]:
return {x.lower() for x in iterable}


Expand All @@ -17,18 +23,18 @@ def parents(file: str) -> Iterator[str]:
file = os.path.dirname(file)


def directories_for(files: Set[str]) -> Set[str]:
def directories_for(files: set[str]) -> set[str]:
return {parent for file in files for parent in parents(file)}


# https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
ILLEGAL_NAMES = {
"CON",
"PRN",
"AUX",
"NUL",
*(f"COM{i}" for i in range(1, 10)),
*(f"LPT{i}" for i in range(1, 10)),
'CON',
'PRN',
'AUX',
'NUL',
*(f'COM{i}' for i in range(1, 10)),
*(f'LPT{i}' for i in range(1, 10)),
}


Expand All @@ -40,25 +46,25 @@ def find_illegal_windows_names(filenames: Sequence[str]) -> int:
for filename in relevant_files:
root = Path(filename)
while root.suffix:
root = root.with_suffix("")
root = root.with_suffix('')
if root.name.lower() in lower_set(ILLEGAL_NAMES):
print(f"Illegal name {filename}")
print(f'Illegal name {filename}')
retv = 1

return retv


def main(argv: Optional[Sequence[str]] = None) -> int:
def main(argv: Sequence[str] | None = None) -> int:
parser = argparse.ArgumentParser()
parser.add_argument(
"filenames",
nargs="*",
help="Filenames pre-commit believes are changed.",
'filenames',
nargs='*',
help='Filenames pre-commit believes are changed.',
)

args = parser.parse_args(argv)
return find_illegal_windows_names(args.filenames)


if __name__ == "__main__":
if __name__ == '__main__':
exit(main())
56 changes: 28 additions & 28 deletions tests/check_illegal_windows_names_test.py
@@ -1,63 +1,63 @@
from __future__ import annotations

import sys

import pytest

from pre_commit_hooks.check_illegal_windows_names import (
find_illegal_windows_names,
main,
parents,
)
from pre_commit_hooks.check_illegal_windows_names import find_illegal_windows_names
from pre_commit_hooks.check_illegal_windows_names import main
from pre_commit_hooks.check_illegal_windows_names import parents
from pre_commit_hooks.util import cmd_output

skip_win32 = pytest.mark.skipif(
sys.platform == "win32",
reason="case conflicts between directories and files",
sys.platform == 'win32',
reason='case conflicts between directories and files',
)


def test_parents():
assert set(parents("a")) == set()
assert set(parents("a/b")) == {"a"}
assert set(parents("a/b/c")) == {"a/b", "a"}
assert set(parents("a/b/c/d")) == {"a/b/c", "a/b", "a"}
assert set(parents('a')) == set()
assert set(parents('a/b')) == {'a'}
assert set(parents('a/b/c')) == {'a/b', 'a'}
assert set(parents('a/b/c/d')) == {'a/b/c', 'a/b', 'a'}


def test_nothing_added(temp_git_dir):
with temp_git_dir.as_cwd():
assert find_illegal_windows_names(["f.py"]) == 0
assert find_illegal_windows_names(['f.py']) == 0


def test_adding_something(temp_git_dir):
with temp_git_dir.as_cwd():
temp_git_dir.join("f.py").write("print('hello world')")
cmd_output("git", "add", "f.py")
temp_git_dir.join('f.py').write("print('hello world')")
cmd_output('git', 'add', 'f.py')

assert find_illegal_windows_names(["f.py"]) == 0
assert find_illegal_windows_names(['f.py']) == 0


@skip_win32 # pragma: win32 no cover
def test_adding_something_with_illegal_filename(temp_git_dir):
with temp_git_dir.as_cwd():
temp_git_dir.join("CoM3.py").write("print('hello world')")
cmd_output("git", "add", "CoM3.py")
temp_git_dir.join('CoM3.py').write("print('hello world')")
cmd_output('git', 'add', 'CoM3.py')

assert find_illegal_windows_names(["CoM3.py"]) == 1
assert find_illegal_windows_names(['CoM3.py']) == 1


@skip_win32 # pragma: win32 no cover
def test_adding_files_with_illegal_directory(temp_git_dir):
with temp_git_dir.as_cwd():
temp_git_dir.mkdir("lpt2").join("x").write("foo")
cmd_output("git", "add", "-A")
temp_git_dir.mkdir('lpt2').join('x').write('foo')
cmd_output('git', 'add', '-A')

assert find_illegal_windows_names([]) == 1


@skip_win32 # pragma: win32 no cover
def test_adding_files_with_illegal_deep_directories(temp_git_dir):
with temp_git_dir.as_cwd():
temp_git_dir.mkdir("x").mkdir("y").join("pRn").write("foo")
cmd_output("git", "add", "-A")
temp_git_dir.mkdir('x').mkdir('y').join('pRn').write('foo')
cmd_output('git', 'add', '-A')

assert find_illegal_windows_names([]) == 1

Expand All @@ -67,12 +67,12 @@ def test_integration(temp_git_dir):
with temp_git_dir.as_cwd():
assert main(argv=[]) == 0

temp_git_dir.join("f.py").write("print('hello world')")
cmd_output("git", "add", "f.py")
temp_git_dir.join('f.py').write("print('hello world')")
cmd_output('git', 'add', 'f.py')

assert main(argv=["f.py"]) == 0
assert main(argv=['f.py']) == 0

temp_git_dir.join("CON.py").write("print('hello world')")
cmd_output("git", "add", "CON.py")
temp_git_dir.join('CON.py').write("print('hello world')")
cmd_output('git', 'add', 'CON.py')

assert main(argv=["CON.py"]) == 1
assert main(argv=['CON.py']) == 1

0 comments on commit 17efd6f

Please sign in to comment.