バージョン番号の 4 桁目に SVN リビジョン番号を使用したいと考えています。Visual Build では、私のバージョン番号は次のように定義されています
%MAJOR%.%MINOR%.%BUILD%.%REVISION%
SVN から %REVISION% 変数を設定したいと思います。
Visual Buildでそれを達成するにはどうすればよいですか?
バージョン番号の 4 桁目に SVN リビジョン番号を使用したいと考えています。Visual Build では、私のバージョン番号は次のように定義されています
%MAJOR%.%MINOR%.%BUILD%.%REVISION%
SVN から %REVISION% 変数を設定したいと思います。
Visual Buildでそれを達成するにはどうすればよいですか?
まさにこれのための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 を呼び出すだけで、出力を処理するか、ファイルに入れてこのファイルを読み取ることができます。
これを再利用可能なサブルーチン ステップとして実装することができます。
必要に応じてリポジトリを更新します。
次の設定で「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
サブルーチンは次のようになります。
ビルド スクリプトから使用するには、「サブルーチン呼び出し」アクションを使用し、値 REVISION で OUTPUTMACRO を追加します。次のようになります。
リポジトリに関する情報を取得する
次の設定で「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%