2011-08-29 56 views
1

我正在嘗試編寫一個小的Mercurial擴展,它給出了存儲在存儲庫中的對象的路徑,它會告訴你它的修訂版本。到目前爲止,我正在從WritingExtensions article的代碼,我有這樣的事情:如何從Mercurial插件訪問與對象相關的信息?

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") 

但我不知道我應該爲了獲得去的file.I的SHA1有一種感覺,我可能沒有正確的功能。

給定一個跟蹤文件的路徑(該文件可能會或可能不會顯示爲在hg status下修改),如何從我的擴展中獲取它的sha1?

回答

1

一個filelog對象是相當低的水平,你可能需要一個filectx:

一個filecontext對象進行訪問與特定filerevision方便的數據。通過回購

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

或者直接:

你可以得到一個通過changectx

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

通行證None代替.得到工作副本的。

+0

你是什麼意思,通過None而不是。拿到工作拷貝的。「?不是foo文件的路徑嗎? – Geo

+0

地理:我指的是'changeid'。當你傳遞'None'時,你會找回反映工作副本的對象。 「。」是你工作副本的第一位父母。 –

+0

我將如何參考特定修訂? N-1點? – Geo

相關問題