我想将SVN修订号用作我的版本号中的第4位数。在Visual Build中,我的版本号定义为
%MAJOR%.%MINOR%.%BUILD%.%REVISION%
我想从SVN填充%REVISION%变量。
如何在Visual Build中实现这一目标?
答案 0 :(得分:1)
可以将其作为可重用的子例程步骤实现:
如果需要,请更新存储库。
使用具有以下设置的“Subversion”操作:
Path = %PROJDIR%
Subcommand = update
将SVN信息存储到XML文件
使用“运行程序”操作并执行以下设置:
Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
提取修订
对VBScript使用“运行脚本”操作并应用以下代码:
dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
dim filename
filename = Application.ExpandMacros("%PROJDIR%\svninfo.xml")
dim file
set file = fso.OpenTextFile(filename, 1)
dim filecontent
filecontent = ""
Do While Not file.AtEndOfStream
filecontent = filecontent + file.readline + vbNewLine
loop
file.Close()
set file = nothing
set fso = nothing
Builder.LogMessage(filecontent)
' Load as XML document
set xmlDoc=CreateObject("Microsoft.XMLDOM")
call xmlDoc.loadxml(filecontent)
' Extract information
dim revision
set revision = xmlDoc.SelectSingleNode("/info/entry/@revision")
' Set output variable
dim out
out = Application.ExpandMacros("%OUTPUTMACRO%")
call Application.Macros(vbldMacroTemporary).Add(out, revision.Value)
删除临时XML文件
使用设置
的“删除文件”操作Folder = %PROJDIR%
Include = svninfo.xml
子程序现在应如下所示:
要从构建脚本中使用它,请使用“子例程调用”操作并添加值为REVISION的OUTPUTMACRO。它应该是这样的:
获取有关存储库的信息
使用具有以下设置的“Subversion”操作:
Subcommand = info
在该步骤的脚本编辑器中,添加以下代码:
Sub vbld_StepDone()
If Step.BuildStatus = vbldStepStatSucceeded Then
' parse output for Revision number
out = vbld_AllMacros()("LASTSTEP_OUTPUT").Value
pos = InStr(out, "Revision: ")+10
pos2 = InStr(pos, out, vbCrLf)
bld_TempMacros.Add "GLOBAL_REV", Mid(out, pos, pos2-pos)
End If
End Sub
保存临时宏
使用具有以下设置的“设置宏”操作:
Name = REVISION
Value = %GLOBAL_REV%
答案 1 :(得分:1)
svn命令行工具中有一个命令就是这样:
svnversion [path_to_workingcopy]
返回工作副本的当前修订号(或当前目录,如果省略arg)。如果修改了工作副本,混合或稀疏检出,它也会输出。摘自可通过--help cmd-switch:
获得的文档 4123:4168 mixed revision working copy
4168M modified working copy
4123S switched working copy
4123P partial working copy, from a sparse checkout
4123:4168MS mixed revision, modified, switched working copy
因此,您只需在您的buildscript中调用svnversion,然后处理输出或将其放入文件并读取此文件。