如何在Visual Build中使用SVN修订版号?

时间:2016-09-13 08:04:16

标签: svn visual-build-professional

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

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

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

如何在Visual Build中实现这一目标?

2 个答案:

答案 0 :(得分:1)

选项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
    
  5. 子程序现在应如下所示:

    Visual Build subroutine steps

    要从构建脚本中使用它,请使用“子例程调用”操作并添加值为REVISION的OUTPUTMACRO。它应该是这样的:

    Visual Build subroutine usage

    选项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%
      

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