我正在尝试编写一个小的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?
答案 0 :(得分:1)
文件日志对象的级别很低,您可能需要filectx:
filecontext对象可以方便地访问与特定filerevision相关的数据。
你可以通过changectx获得一个:
ctx = repo['.']
fooctx = ctx['foo']
print fooctx.filenode()
或直接通过回购:
fooctx = repo.filectx('foo', '.')
通过None
而不是.
来获取正常工作副本。