【发布时间】:2012-10-17 19:21:43
【问题描述】:
我想编写一个 Haskell 程序来查询有关 darcs 存储库的信息。我宁愿直接使用 darcs 库,而不是调用 darcs 可执行文件并解析结果。 said to be“正在进行大量工作”和“缺乏稳定的 API”,但似乎可用。
我想我可以通过研究 darcsden 源代码来回答我的问题,例如,从 this module 开始,但我认为如果有知识的人提供评论介绍来补充这样的研究,这不仅对我有帮助.
所以,这是一个具体的例子。
如何计算给定文件的最新补丁以及补丁的日期、作者和名称?如果您解释解决方案中使用的关键库函数,这将非常有用。
编辑:
这里有一些对不熟悉 darcs 源代码的人可能不明显的评论。我是从Jason Dagit's master thesis 学来的,希望对理解 Ganesh 给出的答案有所帮助。
在 Darcs 中,补丁有一个前后上下文,表示应用补丁之前和之后存储库的状态。在源代码中,这些上下文是在补丁类型上使用幻像类型建模的。这些幻像类型被称为见证者,seal2 用于摆脱它们。
在补丁列表中,只有第一个前置上下文和最后一个后置上下文在类型中表示。所有其他上下文都使用存在类型隐藏。 Darcs 定义了前向列表(称为 FL)和反向列表(称为 RL)。反向列表以反向(按时间顺序)顺序存储补丁(由 darcs 完成的模补丁重新排序)。反向列表可用于访问头部位置的最新补丁。所有名称中带有 RL 的函数都会创建或操作此类反向列表。
【问题讨论】:
-
您要使用最新版本(2.8.2)还是最新的不稳定版本?至少在模块结构方面,2.10 正在进行一些重大的重组。
-
我要使用的版本取决于 2.10 的发布时间。如果它会在未来一两个月内发布,我更喜欢 2.10。如果只是模块结构不同,我认为将任一版本的解决方案转移到另一个版本应该很容易。因此,请随意给出 2.10 的未来证明答案,并暗示 2.8 中的不同之处。
-
2.10 不太可能在未来一两个月内推出,但有望在年底左右推出。