fix(dream): limit newline normalization to CRLF
This commit is contained in:
@@ -365,7 +365,7 @@ class GitStore:
|
||||
wt_path = self._workspace / path
|
||||
try:
|
||||
wt_text = (
|
||||
wt_path.read_text(encoding="utf-8")
|
||||
wt_path.read_bytes().decode("utf-8")
|
||||
if wt_path.exists()
|
||||
else ""
|
||||
)
|
||||
@@ -377,12 +377,12 @@ class GitStore:
|
||||
changed += 1
|
||||
summary_lines.append(f"{path}: binary or non-UTF-8 file changed")
|
||||
continue
|
||||
# Git blobs preserve line endings while read_text() normalizes
|
||||
# them. Compare the same logical lines used by the diff.
|
||||
# Treat CRLF and LF as equivalent without hiding other
|
||||
# newline changes, such as a missing final newline.
|
||||
if head_text.replace("\r\n", "\n") == wt_text.replace("\r\n", "\n"):
|
||||
continue
|
||||
head_lines = head_text.splitlines()
|
||||
wt_lines = wt_text.splitlines()
|
||||
if head_lines == wt_lines:
|
||||
continue
|
||||
changed += 1
|
||||
hunks = list(difflib.unified_diff(
|
||||
head_lines,
|
||||
|
||||
@@ -697,6 +697,22 @@ class TestDreamContentDiff:
|
||||
assert status == ""
|
||||
assert store.dream_content_diff() == ""
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("before", "after", "changed"),
|
||||
[
|
||||
(b"# Memory\r\n", b"# Memory\n", False),
|
||||
(b"# Memory\n", b"# Memory", True),
|
||||
(b"# Memory\r", b"# Memory\n", True),
|
||||
],
|
||||
)
|
||||
def test_only_ignores_crlf_lf_changes(self, store, before, after, changed):
|
||||
store.memory_file.write_bytes(before)
|
||||
store.git.init()
|
||||
|
||||
store.memory_file.write_bytes(after)
|
||||
|
||||
assert bool(store.dream_content_diff()) is changed
|
||||
|
||||
def test_reflects_real_content_edits(self, store):
|
||||
store.git.init()
|
||||
store.git.auto_commit("initial")
|
||||
|
||||
Reference in New Issue
Block a user