Using first line to determine EOL

This commit is contained in:
Edoardo Bezzeccheri 2025-05-07 16:05:09 +00:00
parent 647959c4b4
commit 04de4f8042
2 changed files with 9 additions and 3 deletions

View file

@ -20,10 +20,15 @@ def fix_file(file_obj: IO[bytes]) -> int:
last_character = file_obj.read(1)
# last_character will be '' for an empty file
if last_character not in {LF, CR} and last_character != b'':
# Check if file uses CRLF endings
# Look at first line to determine line ending
file_obj.seek(0, os.SEEK_SET)
content = file_obj.read()
ending = CRLF if CRLF in content else LF
first_line = file_obj.readline()
if CRLF in first_line:
ending = CRLF
elif CR in first_line:
ending = CR
else:
ending = LF
# Needs this seek for windows, otherwise IOError
file_obj.seek(0, os.SEEK_END)
file_obj.write(ending)

View file

@ -19,6 +19,7 @@ TESTS = (
(b'\xe2\x98\x83', 1, b'\xe2\x98\x83\n'),
(b'foo\r\n', 0, b'foo\r\n'),
(b'foo\r\nbar', 1, b'foo\r\nbar\r\n'),
(b'foo\rbar', 1, b'foo\rbar\r'),
(b'foo\r\n\r\n\r\n', 1, b'foo\r\n'),
(b'foo\r', 0, b'foo\r'),
(b'foo\r\r\r\r', 1, b'foo\r'),