我们在 SVN 中有多个分支,并使用 Hudson CI 作业来维护我们的构建。我们使用 SVN 修订号作为我们应用程序版本号的一部分。问题是当 Hudson 作业检查分支的 HEAD 时,它获取的 SVN 的 HEAD 编号不是该分支的最后提交修订版。我知道,SVN 在全球范围内维护修订号,但我们希望在我们的版本中反映特定分支的最后提交数量。
有没有办法使用 python 脚本获取分支的最后提交的修订号,以便我可以使用该修订号签出该分支?或者如果有办法在哈德逊本身做到这一点更好?
谢谢。
使用 python 获取路径的最后提交修订:
from subprocess import check_output as run # >=2.7
path = './'
cmd = ['svn', '--username', XXXX, '--password', XXXX, '--non-interactive', 'info', path]
out = run(cmd).splitlines()
out = (i.split(':', 1) for i in out if i)
info = {k:v.strip() for k,v in out}
# you can access the other svn info fields in a similar manner
rev = info['Last Changed Rev']
with open('.last-svn-commit', 'w') as fh:
fh.write(rev)
我不认为 subversion scm 插件可以给你你需要的信息(它只导出SVN_URL
)SVN_REVISION
。请记住,检查“Last changed Rev”和 HEAD 版本之间没有区别——它们都引用了您分支中的相同内容。
您可能需要考虑为您拥有的每个分支使用新工作。这样,触发构建的提交将是“Last changed Rev”(除非您自己触发)。您可以通过克隆主干作业并更改存储库 url 来手动执行此操作,也可以使用jenkins-autojobs 之类的工具自动执行此操作。
除了svn info
你也可以使用svn log -q -l 1 URL
或svn ls -v --depth empty URL