我想使用 SVN 版本号作为版本号的第 4 位。在 Visual Build 中,我的版本号定义为
%MAJOR%.%MINOR%.%BUILD%.%REVISION%
我想从 SVN 填充 %REVISION% 变量。
如何在 Visual Build 中实现这一点?
我想使用 SVN 版本号作为版本号的第 4 位。在 Visual Build 中,我的版本号定义为
%MAJOR%.%MINOR%.%BUILD%.%REVISION%
我想从 SVN 填充 %REVISION% 变量。
如何在 Visual Build 中实现这一点?
可以将其实现为可重用的子例程步骤:
如果需要,更新存储库。
使用具有以下设置的“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%
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
因此,您可以在构建脚本中调用 svnversion 并处理输出或将其放入文件中并读取此文件。