Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Visual Build中使用SVN修订号?_Svn_Visual Build Professional - Fatal编程技术网

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

如何在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

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

%MAJOR%.%MINOR%.%BUILD%.%REVISION%
我想从SVN中填充%REVISION%变量

如何在可视化构建中实现这一点?

选项1:解析XML 可以将其实现为可重用的子例程步骤:

  • 如果需要,请更新存储库

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

    Path = %PROJDIR%
    Subcommand = update
    
    Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
    
    Subcommand = info
    
    Name = REVISION
    Value = %GLOBAL_REV%
    
  • 将SVN信息存储到XML文件中

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

    Path = %PROJDIR%
    Subcommand = update
    
    Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
    
    Subcommand = info
    
    Name = REVISION
    Value = %GLOBAL_REV%
    
  • 摘录修订

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

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

    Folder = %PROJDIR%
    Include = svninfo.xml
    
  • 子例程现在应该如下所示:

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

    选项2:解析命令行输出
  • 获取有关存储库的信息

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

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