1

我们在 SVN 中有多个分支,并使用 Hudson CI 作业来维护我们的构建。我们使用 SVN 修订号作为我们应用程序版本号的一部分。问题是当 Hudson 作业检查分支的 HEAD 时,它获取的 SVN 的 HEAD 编号不是该分支的最后提交修订版。我知道,SVN 在全球范围内维护修订号,但我们希望在我们的版本中反映特定分支的最后提交数量。

有没有办法使用 python 脚本获取分支的最后提交的修订号,以便我可以使用该修订号签出该分支?或者如果有办法在哈德逊本身做到这一点更好?

谢谢。

4

2 回答 2

1

使用 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_URLSVN_REVISION。请记住,检查“Last changed Rev”和 HEAD 版本之间没有区别——它们都引用了您分支中的相同内容。

您可能需要考虑为您拥有的每个分支使用新工作。这样,触发构建的提交将是“Last changed Rev”(除非您自己触发)。您可以通过克隆主干作业并更改存储库 url 来手动执行此操作,也可以使用jenkins-autojobs 之类的工具自动执行此操作。

于 2013-04-26T21:23:44.430 回答
0

除了svn info你也可以使用svn log -q -l 1 URLsvn ls -v --depth empty URL

于 2013-04-27T16:56:57.023 回答