diff --git a/pre_commit_hooks/end_of_file_fixer.py b/pre_commit_hooks/end_of_file_fixer.py index 4fe82b7..9b94ab3 100644 --- a/pre_commit_hooks/end_of_file_fixer.py +++ b/pre_commit_hooks/end_of_file_fixer.py @@ -21,7 +21,7 @@ def fix_file(file_obj): file_obj.write(b'\n') return 1 - while last_character == b'\n': + while last_character == b'\n' or last_character == b'\r': # Deal with the beginning of the file if file_obj.tell() == 1: # If we've reached the beginning of the file and it is all @@ -39,8 +39,9 @@ def fix_file(file_obj): # there are extraneous newlines at the ned of the file. Then backtrack and # trim the end off. if len(file_obj.read(2)) == 2: - file_obj.seek(-1, os.SEEK_CUR) + file_obj.seek(-2, os.SEEK_CUR) file_obj.truncate() + file_obj.write(b'\n') return 1 return 0 diff --git a/tests/end_of_file_fixer_test.py b/tests/end_of_file_fixer_test.py index ae899d2..0766636 100644 --- a/tests/end_of_file_fixer_test.py +++ b/tests/end_of_file_fixer_test.py @@ -15,6 +15,8 @@ TESTS = ( (b'foo', 1, b'foo\n'), (b'foo\n\n\n', 1, b'foo\n'), (b'\xe2\x98\x83', 1, b'\xe2\x98\x83\n'), + (b'foo\r\n', 1, b'foo\n'), + (b'foo\r\n\r\n', 1, b'foo\n'), )