运行时有程序报告市集修订号

时间:2011-11-23 18:12:49

标签: python bazaar

我在bazaar版本控制下有一个python程序。如何让程序在运行时显示当前分支修订号和日期/构建日期?程序将被导出,而不是从工作副本树执行。

Getting SVN revision number into a program automatically

有这个问题的svn版本

3 个答案:

答案 0 :(得分:3)

如果您没有分支机构(我从问题中理解的那些),我不知道是否有任何标准解决方案。我通常做的是使用在构建时填充值的模板(在我的情况下是debian包生成),以便像version.py.tmpl这样的文件变为version.py。该模块从应用程序中的其他模块导入,并且在安装软件后获得修订号的方式。

顺便说一句,要使用bzrlib获取修订号,您可以执行以下操作:

from bzrlib.branch import Branch
branch = Branch.open('/path/to/branch')
print branch.revno()

答案 1 :(得分:1)

一种简单的方法(假设你在bzr目录中):

import subprocess    
revno = int(subprocess.check_output(["bzr", "revno"]))

修改

正如您假设您将文件移动到其他位置,也许这​​是使用bzr提供的post commit钩子并调用搜索特殊字符串格式(如“REVNO = 123”)的脚本并将其替换为新修订号?

答案 2 :(得分:1)

好的,我得到它,在这种情况下添加一个构建步骤,或者更确切地说是导出过程的某些东西,标记一些修订信息是唯一的方法(因为我在上下文中been told before Mercurial。我想我很胖,而且学习速度慢: - )

因此,我在jcolladowal-o-mat's回答者的基础上学习了elsewhere的一些内容,以下是我将使用的方法:

在导出时生成当前的修订信息(在命令shell中,我可以让wal-o-mat的子进程处理我的计算机而不是另一个):

bzr version-info --python > bzr_version.py

在运行时从上面生成的文件中读取和报告:

import bzr_version
d = bzr_version.version_info
build = d.get('revno','<unknown revno>')
date  = d.get('build_date','<unknown build date>')