chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
"""#1649 — a modified .docx/.xlsx must re-enter --update.
|
||||
|
||||
detect_incremental tracks the converted markdown SIDECAR, not the Office
|
||||
source. convert_office_file used to early-return whenever the sidecar existed,
|
||||
so a source edited after its first conversion never updated its sidecar and was
|
||||
reported "unchanged" forever. It now re-converts when the source is newer than
|
||||
the sidecar (and still skips an unchanged source so it never churns, #1226).
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from graphify import detect
|
||||
|
||||
docx = pytest.importorskip("docx")
|
||||
|
||||
|
||||
def _make_docx(path: Path, text: str) -> None:
|
||||
d = docx.Document()
|
||||
d.add_paragraph(text)
|
||||
d.save(str(path))
|
||||
|
||||
|
||||
def _bump_mtime(path: Path, offset: float) -> None:
|
||||
"""Set path's mtime relative to now so ordering is deterministic."""
|
||||
st = path.stat()
|
||||
os.utime(path, (st.st_atime, st.st_mtime + offset))
|
||||
|
||||
|
||||
def test_modified_docx_reconverts_sidecar(tmp_path: Path):
|
||||
src = tmp_path / "doc.docx"
|
||||
out = tmp_path / "converted"
|
||||
_make_docx(src, "original alpha content")
|
||||
|
||||
sidecar = detect.convert_office_file(src, out)
|
||||
assert sidecar is not None
|
||||
assert "original alpha content" in sidecar.read_text(encoding="utf-8")
|
||||
|
||||
# Edit the source and make it newer than the sidecar.
|
||||
_make_docx(src, "revised beta content")
|
||||
_bump_mtime(sidecar, -10) # sidecar older than the freshly-written source
|
||||
|
||||
sidecar2 = detect.convert_office_file(src, out)
|
||||
assert sidecar2 == sidecar # same deterministic name
|
||||
body = sidecar2.read_text(encoding="utf-8")
|
||||
assert "revised beta content" in body
|
||||
assert "original alpha content" not in body
|
||||
|
||||
|
||||
def test_unchanged_docx_sidecar_not_rewritten(tmp_path: Path):
|
||||
src = tmp_path / "doc.docx"
|
||||
out = tmp_path / "converted"
|
||||
_make_docx(src, "stable content")
|
||||
|
||||
sidecar = detect.convert_office_file(src, out)
|
||||
assert sidecar is not None
|
||||
# Make the sidecar clearly newer than the (unchanged) source.
|
||||
_bump_mtime(sidecar, 100)
|
||||
before = sidecar.stat().st_mtime
|
||||
|
||||
sidecar2 = detect.convert_office_file(src, out)
|
||||
assert sidecar2 == sidecar
|
||||
# Not rewritten: mtime unchanged, so detect_incremental won't see churn (#1226).
|
||||
assert sidecar2.stat().st_mtime == before
|
||||
Reference in New Issue
Block a user