Skip to content

Commit 7cfec24

Browse files
author
Daniel Gallagher
committed
Fix bug with the file-contents-sorter hook when processing file that does not end in a newline
1 parent 50871f8 commit 7cfec24

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

pre_commit_hooks/file_contents_sorter.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,18 @@
1818

1919

2020
def sort_file_contents(f):
21-
before = tuple(f)
21+
before = [line.strip(b'\n\r') for line in f if line.strip()]
2222
after = sorted(before)
2323

24-
before_string = b''.join(before)
25-
after_string = b''.join(after)
26-
27-
if before_string == after_string:
24+
if before == after:
2825
return PASS
29-
else:
30-
f.seek(0)
31-
f.write(after_string)
32-
f.truncate()
33-
return FAIL
26+
27+
after_string = b'\n'.join(after) + b'\n'
28+
29+
f.seek(0)
30+
f.write(after_string)
31+
f.truncate()
32+
return FAIL
3433

3534

3635
def main(argv=None):

tests/file_contents_sorter_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@
1111
(b'', PASS, b''),
1212
(b'lonesome\n', PASS, b'lonesome\n'),
1313
(b'missing_newline', PASS, b'missing_newline'),
14+
(b'newline\nmissing', FAIL, b'missing\nnewline\n'),
15+
(b'missing\nnewline', PASS, b'missing\nnewline'),
1416
(b'alpha\nbeta\n', PASS, b'alpha\nbeta\n'),
1517
(b'beta\nalpha\n', FAIL, b'alpha\nbeta\n'),
1618
(b'C\nc\n', PASS, b'C\nc\n'),
1719
(b'c\nC\n', FAIL, b'C\nc\n'),
1820
(b'mag ical \n tre vor\n', FAIL, b' tre vor\nmag ical \n'),
1921
(b'@\n-\n_\n#\n', FAIL, b'#\n-\n@\n_\n'),
22+
(b'extra\n\n\nwhitespace\n', PASS, b'extra\n\n\nwhitespace\n'),
23+
(b'whitespace\n\n\nextra\n', FAIL, b'extra\nwhitespace\n'),
2024
)
2125
)
2226
def test_integration(input_s, expected_retval, output, tmpdir):

0 commit comments

Comments
 (0)