我想编写一个 Haskell 程序来查询有关 darcs 存储库的信息。我宁愿直接使用 darcs 库,而不是调用 darcs 可执行文件并解析结果。据说它“正在进行大量工作”并且“缺乏稳定的 API”,但似乎可用。
我想我可以通过研究 darcsden 源代码来回答我的问题,例如,从这个模块开始,但我认为如果有知识的人提供评论介绍来补充这样的研究,这不仅对我有帮助。
所以,这里有一个具体的例子。
如何为给定文件计算影响它的最新补丁以及补丁的日期、作者和名称?如果您解释解决方案中使用的关键库函数,这将非常有用。
编辑:
这里有一些对不熟悉 darcs 源代码的人可能不明显的评论。我是从Jason Dagit 的硕士论文中学到的,希望它们有助于理解 Ganesh 给出的答案。
在 Darcs 中,补丁有一个前后上下文,表示应用补丁之前和之后存储库的状态。在源代码中,这些上下文是在补丁类型上使用幻像类型建模的。这些幻影类型被称为见证seal2
者,用于摆脱它们。
在补丁列表中,只有第一个前上下文和最后一个后上下文在类型中表示。所有其他上下文都使用存在类型隐藏。Darcs 定义了前向列表(称为 FL)和反向列表(称为 RL)。反向列表以反向(按时间顺序)顺序存储补丁(由 darcs 完成的模补丁重新排序)。反向列表可用于访问头部位置的最新补丁。所有名称中带有 RL 的函数都会创建或操作此类反向列表。