【问题标题】:How can I use the SVN revision number in Visual Build?如何在 Visual Build 中使用 SVN 修订号?
【发布时间】:2016-09-13 08:04:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: svn visual-build-professional


    【解决方案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
      

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

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

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

    【讨论】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-10
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 2011-04-24
        • 1970-01-01
        相关资源
        最近更新 更多