Afsluiten na git-opslag telt als geslaagd, ook als opslaan faalde of werd geannuleerd #1948
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1948
Loading…
Reference in a new issue
No description provided.
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?
Het probleem
Wie een deck uit git open heeft en de app sluit, krijgt de vraag om op te slaan. Kiest hij Opslaan, dan gaat OciDeck altijd verder alsof dat gelukt is: de herstelbestanden worden gewist en de app sluit.
Dat gebeurt ook als:
_saveToGiteen snackbar toont met "opslaan mislukt".De wijzigingen staan dan niet in de repo, de herstelkopie is weg, en de app is dicht. Dat is dataverlies plus een stille leugen: de afsluitlus dacht dat alles bewaard was.
WebDAV en S3 geven bij een fout wél
falseterug en blokkeren het sluiten. Git is de uitzondering.Hoe het nu werkt
Afsluiten in
lib/widgets/app_shell.dart:_destroywist de herstelbestanden (discardEach) en roeptquitAppaan._saveAllDirtyTabsvraagtsaveTabWithDestination, die bij een git-herkomst_saveToOriginaanroept:_saveToGit(lib/widgets/shell/shell_actions_git.dart) isFuture<void>. Het vangt uitzonderingen zelf, toont een snackbar, en geeft geen succes/falen terug. Annuleren van de commitdialoog is ook een stillereturn. Daarna istrueal onderweg naar de afsluitlus.Waarom dat zo gebouwd is
Git-opslaan vraagt om een commitboodschap en kan in een wachtrij of conflict eindigen. Die rijkere uitkomst (
GitSaveStatus) is nooit aangesloten op debooldie de rest van de app als "is het bewaard?" gebruikt. WebDAV/S3 zijn later wél op dieboolgezet.Denkrichting (niet uitgewerkt)
Laat
_saveToGiteenbool(ofGitSaveStatus) teruggeven. Alleencommitted,mergedenqueuedzijn "bewaard genoeg om herstel te wissen".failed,conflict,pushFaileden annuleren zijnfalse: venster blijft open, herstel blijft liggen.pushFailedis een grijze zone: lokaal is er een commit. Dan mag sluiten, maar wis herstel pas als die commit er écht is, en zeg dat publiceren nog moet.Raakvlakken
lib/widgets/shell/shell_actions_connections.dart(_saveToOrigin)lib/widgets/shell/shell_actions_git.dart(_saveToGit)lib/widgets/app_shell.dart(_handleClose,_saveAllDirtyTabs,_destroy)lib/state/tabs_provider_git.dart(GitSaveStatus)Geen bestandsformaatwijziging. Regressietest: afsluiten met een vuil git-tabblad waarvan opslaan faalt of wordt geannuleerd — de app mag niet sluiten en mag de herstelkopie niet wissen.