Guidedog / 文档
0.2.0
发布完整的一代输出¶
读者不应看到半更新的网站。这是发布保证,与解析和渲染是不同问题。
不变式¶
设 \(P\) 为已发布输出树。准备阶段保持 \(P\) 不变;在决定提交前,下一棵树 \(Q\) 已完整。提交日志记录输出及其配套记录。
准备可能失败。 宿主放弃未完成版本。已决定的提交可能中断。 下次构建根据日志完成或恢复,而不根据暂存目录名称猜测。
为什么缓存放在输出之外¶
交换目录会移动发布目录内的全部内容。若日志也在其中,就会在描述的操作中被移动,在最需恢复时失去稳定位置。Guidedog 将记录保存在发布树之外的稳定目录,因此自定义输出使用同级缓存。
持久性与可见性¶
刷写文件内容不等于刷写目录名称。删除日志前,算法处理这两者。各平台的目录交换方式不同;恢复协议据此设计。实现见 lib/project/commit.odin 和 lib/project/publish.odin。
这保护项目发布,不构成与外部托管服务之间的分布式事务。将成功构建复制到服务器,是部署工具负责的另一项操作。