Merge pull request #172 from pre-commit/fix_trailing_whitespace
Only return nonzero when rewriting whitespace
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f261e54..a3bb7a4 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,5 +1,5 @@
- repo: https://github.com/pre-commit/pre-commit-hooks
- sha: 9ba5af45ce2d29b64c9a348a6fcff5553eea1f2c
+ sha: v0.7.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
@@ -13,12 +13,12 @@
- id: requirements-txt-fixer
- id: flake8
- repo: https://github.com/pre-commit/pre-commit
- sha: 8dba3281d5051060755459dcf88e28fc26c27526
+ sha: v0.12.2
hooks:
- id: validate_config
- id: validate_manifest
- repo: https://github.com/asottile/reorder_python_imports
- sha: 3d86483455ab5bd06cc1069fdd5ac57be5463f10
+ sha: v0.3.1
hooks:
- id: reorder-python-imports
language_version: python2.7
diff --git a/pre_commit_hooks/trailing_whitespace_fixer.py b/pre_commit_hooks/trailing_whitespace_fixer.py
index fa9b7dd..d23d58d 100644
--- a/pre_commit_hooks/trailing_whitespace_fixer.py
+++ b/pre_commit_hooks/trailing_whitespace_fixer.py
@@ -10,10 +10,14 @@
def _fix_file(filename, is_markdown):
with open(filename, mode='rb') as file_processed:
lines = file_processed.readlines()
- lines = [_process_line(line, is_markdown) for line in lines]
- with open(filename, mode='wb') as file_processed:
- for line in lines:
- file_processed.write(line)
+ newlines = [_process_line(line, is_markdown) for line in lines]
+ if newlines != lines:
+ with open(filename, mode='wb') as file_processed:
+ for line in newlines:
+ file_processed.write(line)
+ return True
+ else:
+ return False
def _process_line(line, is_markdown):
@@ -55,8 +59,9 @@
parser.error('--markdown-linebreak-ext requires a non-empty argument')
all_markdown = '*' in md_args
# normalize all extensions; split at ',', lowercase, and force 1 leading '.'
- md_exts = ['.' + x.lower().lstrip('.')
- for x in ','.join(md_args).split(',')]
+ md_exts = [
+ '.' + x.lower().lstrip('.') for x in ','.join(md_args).split(',')
+ ]
# reject probable "eaten" filename as extension (skip leading '.' with [1:])
for ext in md_exts:
@@ -69,10 +74,11 @@
return_code = 0
for bad_whitespace_file in bad_whitespace_files:
- print('Fixing {0}'.format(bad_whitespace_file))
_, extension = os.path.splitext(bad_whitespace_file.lower())
- _fix_file(bad_whitespace_file, all_markdown or extension in md_exts)
- return_code = 1
+ md = all_markdown or extension in md_exts
+ if _fix_file(bad_whitespace_file, md):
+ print('Fixing {}'.format(bad_whitespace_file))
+ return_code = 1
return return_code
diff --git a/tests/trailing_whitespace_fixer_test.py b/tests/trailing_whitespace_fixer_test.py
index 3a72ccb..eb2a1d0 100644
--- a/tests/trailing_whitespace_fixer_test.py
+++ b/tests/trailing_whitespace_fixer_test.py
@@ -20,6 +20,22 @@
assert path.read() == expected
+def test_ok_with_dos_line_endings(tmpdir):
+ filename = tmpdir.join('f')
+ filename.write_binary(b'foo\r\nbar\r\nbaz\r\n')
+ ret = fix_trailing_whitespace((filename.strpath,))
+ assert filename.read_binary() == b'foo\r\nbar\r\nbaz\r\n'
+ assert ret == 0
+
+
+def test_markdown_ok(tmpdir):
+ filename = tmpdir.join('foo.md')
+ filename.write_binary(b'foo \n')
+ ret = fix_trailing_whitespace((filename.strpath,))
+ assert filename.read_binary() == b'foo \n'
+ assert ret == 0
+
+
# filename, expected input, expected output
MD_TESTS_1 = (
('foo.md', 'foo \nbar \n ', 'foo \nbar\n\n'),