fix(export): protect SQLite sources and preserve outputs on failure - #2
Merged
Merged
Conversation
|
Welcome! Thanks for your first pull request in this repository. A maintainer will review it soon. Please make sure:
Thanks for contributing! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Beim Export auf die gerade geöffnete Datenbank überschrieben CSV und JSON die SQLite-Datei trotz schreibgeschützter Verbindung und meldeten Erfolg. Beide Exportwege schützen jetzt Haupt- und eingebundene Datenbanken samt Standardbegleitdateien und Dateialiasen. Daten und Herkunft werden vor dem Dateidialog festgehalten; neu eingebundene Dateien werden vor Veröffentlichung erneut berücksichtigt.
Ausgaben entstehen vollständig in einer exklusiven eigenen temporären Datei im Zielverzeichnis und ersetzen das Ziel erst nach Synchronisierung, Schließen und erneuter Schutzprüfung. Fehler erhalten vorhandene Ausgaben. CSV- und JSON-Formate bleiben erhalten.
Lokal: 99 Tests bestanden, darunter 39 neue Exportregressionen; separater Source-Smoke 7 Tests bestanden. Ruff, actionlint und Diff-Prüfung erfolgreich. Am finalen Commit 5518f2e sind alle sechs CI-Matrixjobs unter Windows/Linux/macOS und Python 3.11/3.12 erfolgreich (Lauf 36886104571); jeder Job führt Source-Smoke/Metadaten und die vollständige Suite getrennt aus.
Unabhängige Abnahme am finalen Commit: 62 Prüfungen bestanden, zwei native Symlink-Skips wegen Windows-Berechtigung 1314, Controller Exit 0. Native Readonly-, Sharing-, Junction-, Hardlink-, ATTACH- und Fehlererhaltfälle bestanden. Vier zunächst rote Gegenproben für Windows-Namen mit abschließendem Punkt/Leerzeichen sind nach Korrektur grün; mehrdeutige Namen werden vor Staging abgewiesen, lexikalisch reservierte Sidecarnamen bleiben geschützt. Keine offenen P1/P2 im geprüften Umfang. Die simulierte Symlink-Auflösung ersetzt keine native Symlink-Abnahme.
Kein Schutzversprechen gegen gleichzeitige externe Dateisystemänderungen zwischen letzter Prüfung und Ersetzung oder Stromausfall. Der Schutz umfasst die Standard-Sidecars -wal/-shm/-journal; besondere VFS-/Superjournal-Dateien und App-Einstellungen bleiben außerhalb dieses Vertrags. Keine Versions-, EXE-, Installations- oder Store-Änderung.