Preserve CRLF if file already ends that way

This commit is contained in:
mtkennerly 2018-10-13 19:00:22 -04:00
parent abd3d0ec3f
commit 2ab5832ce1
2 changed files with 10 additions and 10 deletions

View file

@ -35,14 +35,14 @@ def fix_file(file_obj):
last_character = file_obj.read(1) last_character = file_obj.read(1)
# Our current position is at the end of the file just before any amount of # Our current position is at the end of the file just before any amount of
# newlines. If we read two characters and get two newlines back we know # newlines. If we find extraneous newlines, then backtrack and trim them.
# there are extraneous newlines at the ned of the file. Then backtrack and position = file_obj.tell()
# trim the end off. remaining = file_obj.read()
if len(file_obj.read(2)) == 2: for sequence in [b'\n', b'\r\n']:
file_obj.seek(-2, os.SEEK_CUR) if remaining.startswith(sequence) and len(remaining) > len(sequence):
file_obj.truncate() file_obj.seek(position + len(sequence))
file_obj.write(b'\n') file_obj.truncate()
return 1 return 1
return 0 return 0

View file

@ -15,8 +15,8 @@ TESTS = (
(b'foo', 1, b'foo\n'), (b'foo', 1, b'foo\n'),
(b'foo\n\n\n', 1, b'foo\n'), (b'foo\n\n\n', 1, b'foo\n'),
(b'\xe2\x98\x83', 1, b'\xe2\x98\x83\n'), (b'\xe2\x98\x83', 1, b'\xe2\x98\x83\n'),
(b'foo\r\n', 1, b'foo\n'), (b'foo\r\n', 0, b'foo\r\n'),
(b'foo\r\n\r\n', 1, b'foo\n'), (b'foo\r\n\r\n\r\n', 1, b'foo\r\n'),
) )