Skip to content

Commit 8114733

Browse files
committed
Only return nonzero when rewriting whitespace
1 parent 46251c9 commit 8114733

3 files changed

Lines changed: 34 additions & 12 deletions

File tree

.pre-commit-config.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
- repo: https://github.com/pre-commit/pre-commit-hooks
2-
sha: 9ba5af45ce2d29b64c9a348a6fcff5553eea1f2c
2+
sha: v0.7.0
33
hooks:
44
- id: trailing-whitespace
55
- id: end-of-file-fixer
@@ -13,12 +13,12 @@
1313
- id: requirements-txt-fixer
1414
- id: flake8
1515
- repo: https://github.com/pre-commit/pre-commit
16-
sha: 8dba3281d5051060755459dcf88e28fc26c27526
16+
sha: v0.12.2
1717
hooks:
1818
- id: validate_config
1919
- id: validate_manifest
2020
- repo: https://github.com/asottile/reorder_python_imports
21-
sha: 3d86483455ab5bd06cc1069fdd5ac57be5463f10
21+
sha: v0.3.1
2222
hooks:
2323
- id: reorder-python-imports
2424
language_version: python2.7

pre_commit_hooks/trailing_whitespace_fixer.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010
def _fix_file(filename, is_markdown):
1111
with open(filename, mode='rb') as file_processed:
1212
lines = file_processed.readlines()
13-
lines = [_process_line(line, is_markdown) for line in lines]
14-
with open(filename, mode='wb') as file_processed:
15-
for line in lines:
16-
file_processed.write(line)
13+
newlines = [_process_line(line, is_markdown) for line in lines]
14+
if newlines != lines:
15+
with open(filename, mode='wb') as file_processed:
16+
for line in newlines:
17+
file_processed.write(line)
18+
return True
19+
else:
20+
return False
1721

1822

1923
def _process_line(line, is_markdown):
@@ -55,8 +59,9 @@ def fix_trailing_whitespace(argv=None):
5559
parser.error('--markdown-linebreak-ext requires a non-empty argument')
5660
all_markdown = '*' in md_args
5761
# normalize all extensions; split at ',', lowercase, and force 1 leading '.'
58-
md_exts = ['.' + x.lower().lstrip('.')
59-
for x in ','.join(md_args).split(',')]
62+
md_exts = [
63+
'.' + x.lower().lstrip('.') for x in ','.join(md_args).split(',')
64+
]
6065

6166
# reject probable "eaten" filename as extension (skip leading '.' with [1:])
6267
for ext in md_exts:
@@ -69,10 +74,11 @@ def fix_trailing_whitespace(argv=None):
6974

7075
return_code = 0
7176
for bad_whitespace_file in bad_whitespace_files:
72-
print('Fixing {0}'.format(bad_whitespace_file))
7377
_, extension = os.path.splitext(bad_whitespace_file.lower())
74-
_fix_file(bad_whitespace_file, all_markdown or extension in md_exts)
75-
return_code = 1
78+
md = all_markdown or extension in md_exts
79+
if _fix_file(bad_whitespace_file, md):
80+
print('Fixing {}'.format(bad_whitespace_file))
81+
return_code = 1
7682
return return_code
7783

7884

tests/trailing_whitespace_fixer_test.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,22 @@ def test_fixes_trailing_whitespace(input_s, expected, tmpdir):
2020
assert path.read() == expected
2121

2222

23+
def test_ok_with_dos_line_endings(tmpdir):
24+
filename = tmpdir.join('f')
25+
filename.write_binary(b'foo\r\nbar\r\nbaz\r\n')
26+
ret = fix_trailing_whitespace((filename.strpath,))
27+
assert filename.read_binary() == b'foo\r\nbar\r\nbaz\r\n'
28+
assert ret == 0
29+
30+
31+
def test_markdown_ok(tmpdir):
32+
filename = tmpdir.join('foo.md')
33+
filename.write_binary(b'foo \n')
34+
ret = fix_trailing_whitespace((filename.strpath,))
35+
assert filename.read_binary() == b'foo \n'
36+
assert ret == 0
37+
38+
2339
# filename, expected input, expected output
2440
MD_TESTS_1 = (
2541
('foo.md', 'foo \nbar \n ', 'foo \nbar\n\n'),

0 commit comments

Comments
 (0)