自动将SVN修订号编入程序

Sma*_*ery 19 python svn revision

我在SVN下有一个python项目,我想在运行时显示版本号.有没有办法这样做(比如在提交时自动运行一个可以更新版本文件的短脚本,或者在Python中查询SVN存储库?)

Cia*_*lty 28

我不确定Python的细节,但是如果把字符串$ Revision $放到你的文件中,你的SVN配置中有enable-auto-props = true,那么它将被重写为$ Revision:144 $ .然后,您可以在脚本中解析它.

一个数字,你可以以这种方式使用属性的关键词.

这不会有任何开销,例如查询SVN repo,因为字符串在提交或更新时被硬编码到您的文件中.

我不确定你是如何在Python中解析它的,但在PHP中我会这样做:

$revString = '$Revision: 144$';
if(preg_match('/: ([0-9]+)\$/', $revString, $matches) {
    echo 'Revision is ' . $matches[1];
}
Run Code Online (Sandbox Code Playgroud)

  • +1太棒了!在我的情况下,是否有办法让SVN编辑修订版号,如果它是在此修订版中更改的另一个文件?例如,如果我在version.py中有版本号关键字,但我没有更改版本nnn中的version.py,它将不会更新它,是吗?如果没有,有没有办法以这种方式使用这种方法? (3认同)

小智 15

类似于,但比PHP答案更加pythonic; 把它放在你的模块中__init__.py:

__version__ = filter(str.isdigit, "$Revision: 13 $")
Run Code Online (Sandbox Code Playgroud)

并确保添加Revision属性:

svn propset svn:keywords Revision __init__.py
Run Code Online (Sandbox Code Playgroud)


小智 7

或者你可以这样做:

import re,subprocess

svn_info = subprocess.check_output("svn info")

print (re.search(ur"Revision:\s\d+", svn_info)).group()
Run Code Online (Sandbox Code Playgroud)

它打印"Revision: 2874"在我的项目中

或者像这样:

print (subprocess.check_output("svnversion")).split(":")[0]
Run Code Online (Sandbox Code Playgroud)

它打印"2874"在我的项目中