-1

我想使用 SVN 版本号作为版本号的第 4 位。在 Visual Build 中,我的版本号定义为

%MAJOR%.%MINOR%.%BUILD%.%REVISION%

我想从 SVN 填充 %REVISION% 变量。

如何在 Visual Build 中实现这一点?

4

2 回答 2

2

选项 1:解析 XML

可以将其实现为可重用的子例程步骤:

  1. 如果需要,更新存储库。

    使用具有以下设置的“Subversion”操作:

    Path = %PROJDIR%
    Subcommand = update
    
  2. 将 SVN 信息存储到 XML 文件中

    使用具有以下设置的“运行程序”操作:

    Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
    
  3. 提取修订

    对 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)
    
  4. 删除临时 XML 文件

    对设置使用“删除文件”操作

    Folder = %PROJDIR%
    Include = svninfo.xml
    

子例程现在应该如下所示:

Visual Build 子程序步骤

为了从您的构建脚本中使用它,请使用“子例程调用”操作并添加值为 REVISION 的 OUTPUTMACRO。它应该如下所示:

Visual Build 子程序使用

选项2:解析命令行输出

  1. 获取有关存储库的信息

    使用具有以下设置的“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
    
  2. 保存临时宏

    使用具有以下设置的“设置宏”操作:

    Name = REVISION
    Value = %GLOBAL_REV%
    
于 2016-09-13T08:04:16.497 回答
2

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 并处理输出或将其放入文件中并读取此文件。

于 2016-09-14T11:11:38.517 回答