我想编写一个Haskell程序来查询有关darcs存储库的信息.我宁愿直接使用darcs库,而不是调用darcs可执行文件并解析结果.它说成是 "正在进行很多工作",并以"缺乏一个稳定的API",但似乎可用.
我想我可以通过研究darcsden源代码来回答我的问题,例如,从这个模块开始,但我认为,如果知识渊博的人提供评论性的介绍来补充这样的研究,它不仅对我有用.
所以,这是一个具体的例子.
如何为给定文件计算影响它的最新补丁以及补丁的日期,作者和名称?如果您解释解决方案中使用的密钥库函数,那将非常有用.
编辑:
以下是对不熟悉darc源代码的人可能不太明显的一些评论.我从Jason Dagit的硕士论文中学到了它们,并希望它们有助于理解Ganesh给出的答案.
在Darcs中,补丁具有前置和后置上下文,表示应用补丁之前和之后的存储库状态.在源代码中,这些上下文使用关于补丁类型的幻像类型进行建模.这些幻像类型被称为见证,seal2用于摆脱它们.
在补丁列表中,只有第一个前上下文和最后一个上下文在类型中表示.使用存在类型隐藏所有其他上下文.Darcs定义了前向列表(称为FL)和反向列表(称为RL).反向列表以反向(按时间顺序)顺序存储补丁(由darcs完成的模补丁重新排序).反向列表可用于访问头部位置的最新补丁.名称中包含RL的所有函数都在此类反向列表上创建或操作.
由于链接器问题,似乎不可能将Yesod与Darcs库一起使用.我追踪了这个问题,并需要熟悉Darcs内部人员的提示来解决这个问题.
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
sha256_init
whilst processing object file
/home/sebfisch/.cabal/lib/darcs-2.9.5/ghc-7.4.2/libHSdarcs-2.9.5.a
This could be caused by:
* Loading two different object files which export the same symbol
* Specifying the same object file twice on the GHCi command line
* An incorrect `package.conf' entry, causing some object to be
loaded twice.
GHCi cannot safely continue in this situation. Exiting now. Sorry.
Run Code Online (Sandbox Code Playgroud)
它似乎是由darcs和cryptohash库暴露相同的符号引起的,因为搜索相应的目标文件会显示:
# for file …Run Code Online (Sandbox Code Playgroud)