Eine vollständige Generation veröffentlichen¶
Leser dürfen keine halb aktualisierte Website sehen. Das ist eine Eigenschaft der Veröffentlichung, getrennt von Parsing und Rendering.
Die Invariante¶
\(P\) sei der veröffentlichte Ausgabebaum. Während der Vorbereitung bleibt er unverändert. Der nächste Baum \(Q\) ist vor dem Commit-Beschluss vollständig. Das Journal nennt Ausgabe und zugehörige Aufzeichnungen.
Die Vorbereitung kann fehlschlagen. Der Host verwirft die unvollständige Generation. Ein beschlossener Commit kann unterbrochen werden. Der nächste Build beendet oder stellt ihn anhand des Journals wieder her. Er rät nicht anhand eines Staging-Verzeichnisnamens.
Warum der Cache außerhalb der Ausgabe liegt¶
Ein Verzeichnistausch verschiebt seinen gesamten Inhalt. Ein darin liegendes Journal würde während der beschriebenen Operation mitwandern und gerade bei der Wiederherstellung keinen stabilen Ort haben. Guidedog hält Aufzeichnungen außerhalb des Ausgabebaums. Eigene Ziele nutzen deshalb einen benachbarten Cache.
Dauerhaftigkeit und Sichtbarkeit¶
Dateiinhalte zu flushen ist nicht dasselbe wie Verzeichnisnamen zu flushen. Der Algorithmus berücksichtigt beides vor dem Löschen des Journals. Der Verzeichnistausch unterscheidet sich je Plattform; das Wiederherstellungsprotokoll berücksichtigt dies. Siehe lib/project/commit.odin und lib/project/publish.odin.
Dies schützt die Projektveröffentlichung, ist aber keine verteilte Transaktion mit einem Hostinganbieter. Einen erfolgreichen Build auf einen Server zu kopieren ist eine eigene Aufgabe des Deploymentwerkzeugs.