plan-kopie: welle_vergleich vergleicht gitignorierte Zieldateien byte-genau
Eine Zieldatei unter einem ignorierten Pfad (tests/.work/) stand nie in git status und galt als unverändert gegenüber HEAD, ohne Byte-Vergleich. Jetzt fragt das Werkzeug git check-ignore und vergleicht sie gegen die Kopie. Treiber mit acht neuen Fällen (sechs auf der alten Fassung rot), fünf Mutanten getötet; Paket R1 Welle 2: 12 Fehlalarme vorher, 0 Befunde danach. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
5cbe75c5e3
commit
7ba47d69ec
3 files changed
+102
-9
No files matched your search
@@ -151,6 +151,64 @@ def fall_relativ_nach_aussen(projekt, mat, task, wurzel):
|
||||
schreibe(task, text.replace("Keine andere Datei", "- `../anderswo/x.py` (neu)\n\nKeine andere Datei"))
|
||||
|
||||
|
||||
def _ignoriert(projekt, mat, task, erst="neu", letzt="neu"):
|
||||
"""Seit 2026-10-17: Zieldateien unter einem Pfad, den .gitignore ausblendet (Paket R1 im Edge-Stack: Prüfdateien
|
||||
unter tests/.work/). .gitignore kommt in den Basis-Commit; work/erst.py steht als erste, work/letzt.py als letzte
|
||||
Zieldatei in der Liste, beide in Baum und Kopie gleich. erst/letzt: "neu" oder "gelöscht" (dann in keinem Baum)."""
|
||||
schreibe(projekt / ".gitignore", "work/\n")
|
||||
git(projekt, "add", ".gitignore")
|
||||
git(projekt, "commit", "-q", "-m", "ignoriert")
|
||||
for name, art in (("erst.py", erst), ("letzt.py", letzt)):
|
||||
if art == "neu":
|
||||
schreibe(projekt / "work" / name, f"{name} eins\n{name} zwei\n")
|
||||
schreibe(mat / "work" / name, f"{name} eins\n{name} zwei\n")
|
||||
text = task.read_text(encoding="utf-8")
|
||||
text = text.replace("## Zieldateien\n\n", f"## Zieldateien\n\n- `work/erst.py` ({erst})\n", 1)
|
||||
text = text.replace("\n\nKeine andere Datei", f"\n- `work/letzt.py` ({letzt})\n\nKeine andere Datei", 1)
|
||||
schreibe(task, text)
|
||||
|
||||
|
||||
def fall_ignoriert_gleich(projekt, mat, task, wurzel):
|
||||
_ignoriert(projekt, mat, task)
|
||||
|
||||
|
||||
def fall_ignoriert_erste_weicht_ab(projekt, mat, task, wurzel):
|
||||
_ignoriert(projekt, mat, task)
|
||||
schreibe(projekt / "work" / "erst.py", "erst.py EINS\nerst.py zwei\n")
|
||||
|
||||
|
||||
def fall_ignoriert_letzte_weicht_ab(projekt, mat, task, wurzel):
|
||||
_ignoriert(projekt, mat, task)
|
||||
schreibe(projekt / "work" / "letzt.py", "letzt.py eins\nletzt.py ZWEI\n")
|
||||
|
||||
|
||||
def fall_ignoriert_fehlt_im_baum(projekt, mat, task, wurzel):
|
||||
_ignoriert(projekt, mat, task)
|
||||
(projekt / "work" / "letzt.py").unlink()
|
||||
|
||||
|
||||
def fall_ignoriert_fehlt_in_kopie(projekt, mat, task, wurzel):
|
||||
_ignoriert(projekt, mat, task)
|
||||
(mat / "work" / "erst.py").unlink()
|
||||
|
||||
|
||||
def fall_ignoriert_geloescht(projekt, mat, task, wurzel):
|
||||
_ignoriert(projekt, mat, task, letzt="gelöscht")
|
||||
|
||||
|
||||
def fall_ignoriert_nicht_geloescht(projekt, mat, task, wurzel):
|
||||
_ignoriert(projekt, mat, task, letzt="gelöscht")
|
||||
schreibe(projekt / "work" / "letzt.py", "bleibt\n")
|
||||
|
||||
|
||||
def fall_ignoriert_getrackt(projekt, mat, task, wurzel):
|
||||
"""Eine getrackte Datei unter einem ignorierten Muster (git add -f) ist kein ignoriertes Ziel: Unveraendert
|
||||
gegenueber HEAD bleibt ein Befund."""
|
||||
_ignoriert(projekt, mat, task)
|
||||
git(projekt, "add", "-f", "work/erst.py")
|
||||
git(projekt, "commit", "-q", "-m", "erzwungen")
|
||||
|
||||
|
||||
FAELLE = [
|
||||
("Grundlinie", fall_grundlinie, 0, "0 Befund(e)."),
|
||||
("fremde Datei im Baum", fall_fremde_datei, 2, "fremd.py: geaendert"),
|
||||
@@ -174,6 +232,15 @@ FAELLE = [
|
||||
# Seit 2026-09-18: Die Klammer hinter dem Pfad ist wahlfrei, Text dahinter erlaubt.
|
||||
("Zieldateien ohne Klammer", fall_ohne_klammer_grundlinie, 0, "0 Befund(e)."),
|
||||
("Zieldatei ohne Klammer weicht ab", fall_ohne_klammer_abweichung, 2, "a.py: weicht vom Plan ab -- Zeile 1"),
|
||||
# Seit 2026-10-17: Zieldateien, die git ignoriert, werden byte-genau verglichen statt als unveraendert gemeldet.
|
||||
("ignorierte Zieldateien gleich", fall_ignoriert_gleich, 0, "4 byte-gleich mit der Kopie, 1 nur als Menge geprueft, 2 von git ignoriert."),
|
||||
("ignorierte erste Zieldatei weicht ab", fall_ignoriert_erste_weicht_ab, 2, "work/erst.py: weicht vom Plan ab -- Zeile 1"),
|
||||
("ignorierte letzte Zieldatei weicht ab", fall_ignoriert_letzte_weicht_ab, 2, "work/letzt.py: weicht vom Plan ab -- Zeile 2"),
|
||||
("ignorierte Zieldatei fehlt im Baum", fall_ignoriert_fehlt_im_baum, 2, "work/letzt.py: Zieldatei fehlt im Baum"),
|
||||
("ignorierte Zieldatei fehlt in der Kopie", fall_ignoriert_fehlt_in_kopie, 2, "work/erst.py: fehlt in der Kopie"),
|
||||
("ignorierte Zieldatei geloescht", fall_ignoriert_geloescht, 0, "0 Befund(e)."),
|
||||
("ignorierte Loeschung nicht ausgefuehrt", fall_ignoriert_nicht_geloescht, 2, "work/letzt.py: soll geloescht sein, steht aber noch im Baum"),
|
||||
("getrackte Datei unter ignoriertem Muster unveraendert", fall_ignoriert_getrackt, 2, "work/erst.py: Zieldatei ist unveraendert"),
|
||||
]
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user