Externe Aenderungen: der Zeitstempel-Konflikt #20
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #16
Question
Was tut die App, wenn sich die Datei auf der Platte geändert hat, seit sie geladen wurde?
Der Fall ist real und wird durch eine frühere Entscheidung wahrscheinlicher: Ordner-auf-Platte wurde unter anderem gewählt, weil Sync über Dropbox, Syncthing oder Git dann gratis funktioniert — und genau dieser Sync ändert Dateien, während die App läuft. Es gibt bewusst keinen Filewatcher, die App merkt es also von sich aus nicht.
Zu entscheiden:
Diese Entscheidung entscheidet mit darüber, ob der ausgeschlossene Filewatcher später zur Pflicht wird: Wer den Konflikt nur beim Speichern prüft, lebt damit, dass der Nutzer bis dahin auf einem veralteten Stand arbeitet.
Zielgröße: die Erkennungsregel und eine Tabelle Fall → Verhalten.
Nachtrag aus der Recherche zu #22. Zwei belegte Punkte, die hier hineingehören:
Der Änderungszeitpunkt allein taugt nicht als Konflikterkennung. Ein Umbenennen setzt Metadaten der Zieldatei neu — bei einem nackten
renamegehen Erstellungszeit und weitere Attribute sogar verloren. Wer den Konflikt nur anmtimefestmacht, misst also teilweise die eigenen Schreibvorgänge mit. Zu prüfen ist deshalb, ob stattdessen der Inhalt verglichen wird (Prüfsumme des geladenen Standes), oder mtime plus Größe kombiniert.Nebeneffekt für die Schreibfunktion: Dieses Ticket verlangt ohnehin, dass vor dem Schreiben der Zustand der Zieldatei geprüft wird. Wer dort statt eines
statgleich den Inhalt liest, hat die Vorfassung ohne zusätzlichen Syscall in der Hand — kein Grund, es heute zu tun, aber der Beleg, dass eine spätere Historie auch an dieser Stelle nichts kostet.