如何从Mercurial插件访问与对象关联的信息?

时间:2011-08-29 13:10:03

标签: mercurial mercurial-extension

我正在尝试编写一个小的Mercurial扩展,在给定存储库中存储的对象的路径的情况下,它将告诉您它的修订版本。到目前为止,我正在研究WritingExtensions article的代码,我有类似的东西:

cmdtable = {
    # cmd name        function call
    "whichrev": (whichrev,[],"hg whichrev FILE")
}

并且whichrev函数几乎没有代码:

def whichrev(ui, repo, node, **opts):
    # node will be the file chosen at the command line
    pass

所以,例如:

hg whichrev text_file.txt

将调用具有节点的whichrev函数设置为text_file.txt。通过使用调试器,我发现我可以使用以下命令访问filelog对象:

repo.file("text_file.txt")

但是我不知道应该访问什么才能到达文件的sha1。我有一种感觉我可能没有使用正确的功能。

给定跟踪文​​件的路径(该文件可能会或可能不会在hg status下显示为已修改),如何从我的扩展程序中获取它的sha1?

1 个答案:

答案 0 :(得分:1)

文件日志对象的级别很低,您可能需要filectx:

  

filecontext对象可以方便地访问与特定filerevision相关的数据。

你可以通过changectx获得一个:

ctx = repo['.']
fooctx = ctx['foo']
print fooctx.filenode()

或直接通过回购:

fooctx = repo.filectx('foo', '.')

通过None而不是.来获取正常工作副本。