Guidedog マニュアル 0.2.0
言語
このページの内容
Guidedog / ドキュメント 0.2.0

完全な世代を公開する

読者に更新途中のサイトを見せてはならない。これは公開の性質であり、解析や描画とは別の問題だ。

不変条件

公開済みの出力木を \(P\) とする。準備中は \(P\) を変えず、次の木 \(Q\) を完成させてからコミットを決定する。ジャーナルは出力と対応する記録を指定する。

準備は失敗し得る。 ホストは未完成の世代を破棄する。確定したコミットも中断し得る。 次のビルドはジャーナルに基づいて完了または復元する。ステージング名から推測しない。

準備と永続化、ジャーナル保存、出力切り替え、記録置換、ジャーナル削除の順。
図 6 永続化したジャーナルは、準備段階と確定したコミットを分ける。

キャッシュを出力先の外に置く理由

ディレクトリー交換は中の全てを動かす。ジャーナルを中に置くと、記録している操作自身で移動し、復旧時に位置が安定しない。Guidedog は公開木の外の安定した場所に記録を置く。そのため独自の出力には同階層のキャッシュを使う。

永続性と可視性

ファイル内容の永続化とディレクトリー名の永続化は別だ。ジャーナルを削除する前に両方を扱う。交換方法はプラットフォームで異なり、復旧プロトコルはそれを考慮する。実装は lib/project/commit.odin と lib/project/publish.odin。

これはプロジェクトの公開を保護する。外部ホスティングとの分散トランザクションではない。成功したビルドをサーバーへコピーするのは、デプロイツールが担う別の操作だ。