Guidedog 手册 0.2.0
语言
本页内容
Guidedog / 文档 0.2.0

发布完整的一代输出

读者不应看到半更新的网站。这是发布保证,与解析和渲染是不同问题。

不变式

设 \(P\) 为已发布输出树。准备阶段保持 \(P\) 不变;在决定提交前,下一棵树 \(Q\) 已完整。提交日志记录输出及其配套记录。

准备可能失败。 宿主放弃未完成版本。已决定的提交可能中断。 下次构建根据日志完成或恢复,而不根据暂存目录名称猜测。

准备并刷写,保存日志,切换输出,替换记录,最后删除日志。
图 6 持久化日志将准备阶段与已决定的提交分开。

为什么缓存放在输出之外

交换目录会移动发布目录内的全部内容。若日志也在其中,就会在描述的操作中被移动,在最需恢复时失去稳定位置。Guidedog 将记录保存在发布树之外的稳定目录,因此自定义输出使用同级缓存。

持久性与可见性

刷写文件内容不等于刷写目录名称。删除日志前,算法处理这两者。各平台的目录交换方式不同;恢复协议据此设计。实现见 lib/project/commit.odin 和 lib/project/publish.odin。

这保护项目发布,不构成与外部托管服务之间的分布式事务。将成功构建复制到服务器,是部署工具负责的另一项操作。