2013-01-25 22 views
0

我想使用德威從Python腳本執行以下命令:使用Python dulwich檢查哪些分支包含特定的git commit sha?

$ git branch --contains <myCommitSha> | wc -l

我打算是檢查如果一個特定的提交(SHA)被放置在一個以上的分支機構。

當然,我認爲我可以從Python執行上述命令並解析輸出(解析分支數量),但這是最後的解決方案。

任何其他意見/建議?提前致謝。

+0

執行命令是要走的路 - 這就是你如何使用git。 – Chronial

+0

感謝@ddotsenko,@Chronial,只是想確保dulwich在Python代碼中提供'git branch --contains'輸出(我真的想避免執行外部進程)嗎? – Blaise

回答

1

沒有內置函數這一點,但你當然可以自己實現這一點。

你也可以這樣做(未經測試):

branches = [ref for ref in repo.refs.keys("refs/heads/") if 
      any((True for commit in repo.get_walker(include=[repo.refs[ref]]) 
       if commit.id == YOURSHA))] 

這會給你包含給定提交的所有分支負責人的名單,但將有Ø運行時(N * m),n beeing您的回購承諾金額,m beeing金額分行。 git實現的運行時間可能是O(n)

+0

感謝您的提示,您的回答給了我我正在尋找的東西。 – Blaise

2

由於分支只是指向隨機提交的指針,並且它們不以任何方式「描述」樹,所以沒有任何鏈接某個隨機提交分支。

如果一個給定的提交是一個提交的祖先,那麼一些分支點將從分支頂部提交下來遍歷所有祖先鏈,這是唯一明智的方法。

換句話說,在德威我會遍歷分支和向後遍歷,看看是否在鏈上。

我確定這正是git branch --contains <myCommitSha>所做的,因爲我不知道有任何其他捷徑​​。

因爲你的選擇(一)使Python這樣的迭代或(b)使C做相同的迭代,我只是去與C :)

相關問題