Merge pull request #1095 from nemacysts/file-contents-sorter-mutex

Disallow --unique alongside --ignore-cases in file-contents-sorter
This commit is contained in:
Anthony Sottile 2024-10-26 15:07:36 -04:00 committed by GitHub
commit 0beaecb1f7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 26 additions and 14 deletions

View file

@ -54,18 +54,21 @@ def sort_file_contents(
def main(argv: Sequence[str] | None = None) -> int: def main(argv: Sequence[str] | None = None) -> int:
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('filenames', nargs='+', help='Files to sort') parser.add_argument('filenames', nargs='+', help='Files to sort')
parser.add_argument(
mutex = parser.add_mutually_exclusive_group(required=False)
mutex.add_argument(
'--ignore-case', '--ignore-case',
action='store_const', action='store_const',
const=bytes.lower, const=bytes.lower,
default=None, default=None,
help='fold lower case to upper case characters', help='fold lower case to upper case characters',
) )
parser.add_argument( mutex.add_argument(
'--unique', '--unique',
action='store_true', action='store_true',
help='ensure each line is unique', help='ensure each line is unique',
) )
args = parser.parse_args(argv) args = parser.parse_args(argv)
retv = PASS retv = PASS

View file

@ -67,18 +67,6 @@ from pre_commit_hooks.file_contents_sorter import PASS
FAIL, FAIL,
b'Fie\nFoe\nfee\nfum\n', b'Fie\nFoe\nfee\nfum\n',
), ),
(
b'fee\nFie\nFoe\nfum\n',
['--unique', '--ignore-case'],
PASS,
b'fee\nFie\nFoe\nfum\n',
),
(
b'fee\nfee\nFie\nFoe\nfum\n',
['--unique', '--ignore-case'],
FAIL,
b'fee\nFie\nFoe\nfum\n',
),
), ),
) )
def test_integration(input_s, argv, expected_retval, output, tmpdir): def test_integration(input_s, argv, expected_retval, output, tmpdir):
@ -89,3 +77,24 @@ def test_integration(input_s, argv, expected_retval, output, tmpdir):
assert path.read_binary() == output assert path.read_binary() == output
assert output_retval == expected_retval assert output_retval == expected_retval
@pytest.mark.parametrize(
('input_s', 'argv'),
(
(
b'fee\nFie\nFoe\nfum\n',
['--unique', '--ignore-case'],
),
(
b'fee\nfee\nFie\nFoe\nfum\n',
['--unique', '--ignore-case'],
),
),
)
def test_integration_invalid_args(input_s, argv, tmpdir):
path = tmpdir.join('file.txt')
path.write_binary(input_s)
with pytest.raises(SystemExit):
main([str(path)] + argv)