2010-09-02 20 views
1

我有一個django(Python)項目,需要知道它的代碼在Bazaar上用於部署目的的版本。這是一個Web應用程序,所以我不想這樣做,因爲它引發了一個新的子過程,並且不會擴展。從Python中確定Bazaar版本號而不調用bzr

import subprocess 
subprocess.Popen(["bzr", "revno"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 

有沒有辦法解析Bazaar存儲庫來計算版本號? Bazaar本身是用Python編寫的,包含了用於計算revno的代碼,這讓我認爲它不是微不足道的。

rh = self.revision_history() 
revno = len(rh) 

編輯:最終修復

from bzrlib.branch import BzrBranch 
branch = BzrBranch.open_containing('.')[0] 
revno = len(branch.revision_history()) 

編輯:最後的修復,但這次是真的

from bzrlib.branch import BzrBranch 
branch = BzrBranch.open_containing('.')[0] 
revno = branch.last_revision_info()[0] 
+0

爲什麼不使用bazaar自己的代碼? – nmichaels 2010-09-02 20:20:01

+1

* never * * ever * *使用*'len(branch.revision_history())',只有'branch.last_revision()' – bialix 2010-09-03 08:51:46

+0

Bialix,爲什麼? last_revision中也沒有修訂版本號。 [email protected] – 2010-09-03 14:22:05

回答

4

您可以使用Bazaar的bzrlib API來獲取有關任何給定Bazaar存儲庫的信息。

>>> from bzrlib.branch import BzrBranch 
>>> branch = BzrBranch.open('.') 
>>> branch.last_revision_info() 

更多示例可用here

+0

'branch.last_revision_info()'返回元組''(revno,revision_id)'。如果你只需要revno,那麼'revno = branch.last_revision_info()[0]' – bialix 2010-09-07 20:09:48

2

做一次,緩存結果(在DB /文件,如果需要的話)?我懷疑這個版本會改變那麼多。