Как я могу использовать номер редакции SVN в Visual Build?
Я хочу использовать номер редакции SVN в качестве 4-й цифры в моем номере версии. В Visual Build мой номер версии определяется как
%MAJOR%.%MINOR%.%BUILD%.%REVISION%
и я хотел бы заполнить переменную%REVISION% из SVN.
Как я могу добиться этого в Visual Build?
2 ответа
Вариант 1: разобрать XML
Это можно реализовать как шаг подпрограммы многократного использования:
Обновите хранилище, если это необходимо.
Используйте действие "Subversion" со следующими настройками:
Path = %PROJDIR% Subcommand = update
Сохраните информацию SVN в файл XML
Используйте действие "Запустить программу" со следующими настройками:
Command = %DOSCMD% svn info --xml > "%PROJDIR%\svninfo.xml"
Извлечь ревизию
Используйте действие "Выполнить скрипт" для 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)
Удалить временный файл XML
Используйте действие "Удалить файлы" с настройкой
Folder = %PROJDIR% Include = svninfo.xml
Подпрограмма теперь должна выглядеть так:
Чтобы использовать его из скрипта сборки, используйте действие "Вызов подпрограммы" и добавьте OUTPUTMACRO со значением REVISION. Это должно выглядеть так:
Вариант 2: разобрать вывод командной строки
Получить информацию о хранилище
Используйте действие "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
Сохранить временный макрос
Используйте действие "Установить макрос" со следующими настройками:
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 и либо обработать вывод, либо поместить его в файл и прочитать этот файл.