如何在Visual Build中使用SVN修订号?
我想使用SVN版本号作为版本号中的第四位数字。在Visual Build中,我的版本号定义为如何在Visual Build中使用SVN修订号?,svn,visual-build-professional,Svn,Visual Build Professional,我想使用SVN版本号作为版本号中的第四位数字。在Visual Build中,我的版本号定义为 %MAJOR%.%MINOR%.%BUILD%.%REVISION% 我想从SVN中填充%REVISION%变量 如何在可视化构建中实现这一点?选项1:解析XML 可以将其实现为可重用的子例程步骤: 如果需要,请更新存储库 使用具有以下设置的“Subversion”操作: Path = %PROJDIR% Subcommand = update Command = %DOSCMD% svn info
%MAJOR%.%MINOR%.%BUILD%.%REVISION%
我想从SVN中填充%REVISION%变量
如何在可视化构建中实现这一点?选项1:解析XML
可以将其实现为可重用的子例程步骤:
Path = %PROJDIR%
Subcommand = update
Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
Subcommand = info
Name = REVISION
Value = %GLOBAL_REV%
Path = %PROJDIR%
Subcommand = update
Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
Subcommand = info
Name = REVISION
Value = %GLOBAL_REV%
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)
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
Folder = %PROJDIR%
Include = svninfo.xml
Path = %PROJDIR%
Subcommand = update
Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
Subcommand = info
Name = REVISION
Value = %GLOBAL_REV%
在步骤的脚本编辑器中,添加以下代码:
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)
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
Path = %PROJDIR%
Subcommand = update
Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
Subcommand = info
Name = REVISION
Value = %GLOBAL_REV%
svn命令行工具中有一个命令正好用于此目的:
svnversion [path_to_workingcopy]
它返回工作副本的当前版本号(如果省略了arg,则返回当前目录)。如果工作副本被修改、混合或稀疏签出,它也将输出该副本。摘自通过--help cmd开关提供的文档:
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,然后处理输出或将其放入文件并读取此文件