Как я могу использовать номер редакции SVN в Visual Build?

Я хочу использовать номер редакции SVN в качестве 4-й цифры в моем номере версии. В Visual Build мой номер версии определяется как

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

и я хотел бы заполнить переменную%REVISION% из SVN.

Как я могу добиться этого в Visual Build?

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 подпрограммы

Чтобы использовать его из скрипта сборки, используйте действие "Вызов подпрограммы" и добавьте OUTPUTMACRO со значением REVISION. Это должно выглядеть так:

Использование подпрограммы 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%
    

В инструментах командной строки svn есть команда именно для этого:

svnversion [path_to_workingcopy]

Возвращает текущий номер редакции рабочей копии (или текущий каталог, если аргумент опущен). Если рабочая копия изменена, смешана или разрежена, она также выведет это. Выдержка из документации, доступной через --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 в вашем buildscript и либо обработать вывод, либо поместить его в файл и прочитать этот файл.

Другие вопросы по тегам