mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-14 21:10:27 -06:00
Preserve line ending when running autoupdate
This commit is contained in:
committed by
Anthony Sottile
parent
2960549682
commit
13d528c569
@@ -93,7 +93,7 @@ def _original_lines(
|
||||
retry: bool = False,
|
||||
) -> Tuple[List[str], List[int]]:
|
||||
"""detect `rev:` lines or reformat the file"""
|
||||
with open(path) as f:
|
||||
with open(path, newline='') as f:
|
||||
original = f.read()
|
||||
|
||||
lines = original.splitlines(True)
|
||||
@@ -126,7 +126,7 @@ def _write_new_config(path: str, rev_infos: List[Optional[RevInfo]]) -> None:
|
||||
comment = match[4]
|
||||
lines[idx] = f'{match[1]}rev:{match[2]}{new_rev}{comment}{match[5]}'
|
||||
|
||||
with open(path, 'w') as f:
|
||||
with open(path, 'w', newline='') as f:
|
||||
f.write(''.join(lines))
|
||||
|
||||
|
||||
|
||||
@@ -263,6 +263,45 @@ def test_does_not_reformat(tmpdir, out_of_date, store):
|
||||
assert cfg.read() == expected
|
||||
|
||||
|
||||
def test_does_not_change_mixed_endlines_read(up_to_date, tmpdir, store):
|
||||
fmt = (
|
||||
'repos:\n'
|
||||
'- repo: {}\n'
|
||||
' rev: {} # definitely the version I want!\r\n'
|
||||
' hooks:\r\n'
|
||||
' - id: foo\n'
|
||||
' # These args are because reasons!\r\n'
|
||||
' args: [foo, bar, baz]\r\n'
|
||||
)
|
||||
cfg = tmpdir.join(C.CONFIG_FILE)
|
||||
|
||||
expected = fmt.format(up_to_date, git.head_rev(up_to_date)).encode()
|
||||
cfg.write_binary(expected)
|
||||
|
||||
assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
|
||||
assert cfg.read_binary() == expected
|
||||
|
||||
|
||||
def test_does_not_change_mixed_endlines_write(tmpdir, out_of_date, store):
|
||||
fmt = (
|
||||
'repos:\n'
|
||||
'- repo: {}\n'
|
||||
' rev: {} # definitely the version I want!\r\n'
|
||||
' hooks:\r\n'
|
||||
' - id: foo\n'
|
||||
' # These args are because reasons!\r\n'
|
||||
' args: [foo, bar, baz]\r\n'
|
||||
)
|
||||
cfg = tmpdir.join(C.CONFIG_FILE)
|
||||
cfg.write_binary(
|
||||
fmt.format(out_of_date.path, out_of_date.original_rev).encode(),
|
||||
)
|
||||
|
||||
assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
|
||||
expected = fmt.format(out_of_date.path, out_of_date.head_rev).encode()
|
||||
assert cfg.read_binary() == expected
|
||||
|
||||
|
||||
def test_loses_formatting_when_not_detectable(out_of_date, store, tmpdir):
|
||||
"""A best-effort attempt is made at updating rev without rewriting
|
||||
formatting. When the original formatting cannot be detected, this
|
||||
|
||||
Reference in New Issue
Block a user