ビルド前イベントを活用する、その9

ビルド前イベントで Git のコマンドを使ってみましょう。下記の記事の発展形です。

ビルド前イベントを活用する、その8

ビルド前イベントはバッチコマンドですので、テキストファイルを出力することができます。 ビルド前に下記のような cs ファイルを上書き配置してやれば、アプリケーション…

Git のコマンドで、
・ハッシュ値
・短いハッシュ値
・アクティブブランチ
・コミットログ
を取得する場合は下記のコマンドを実行します。

git rev-parse HEAD

git rev-parse --short HEAD

git symbolic-ref --short HEAD

git log

ビルド前イベントに、これらのコマンドを実行してアプリケーションに Git のハッシュ値や、ブランチ名を埋め込みましょう。バージョン管理に役立ちます。

下記が動的に生成するC#のソースコードで GitInfo.cs です。このファイルはあらかじめ適当な文字列を入れてプロジェクトに追加しておいてください。ビルド前イベントが動いたらここに適正な文字列が仕込まれます。

namespace aaa
{
    public static class GitInfo
    {
        public const string HASH      = "f0caf986582fc2c7d457df9759bab99f298042b6";
        public const string HASH_N7   = "f0caf98";
        public const string BRANCH    = "master";
    }
}

下記がビルド前イベントの実行スクリプトです。Git のログは、exe が出来上がるディレクトリに git_hash_branch_log.txt というファイル名で出来上がります。exe が出来上がるディレクトリを示す文字列は VisualStudio のマクロ変数で $(TargetDir) を使って取得します。

echo プリビルドスクリプトを開始します.

@echo off
setlocal enabledelayedexpansion

REM git のハッシュ、短いハッシュ、アクティブブランチを取得する.
for /f %%A in ('git rev-parse HEAD') do set GIT_HASH=%%A
for /f %%B in ('git rev-parse --short HEAD') do set GIT_HASH_N7=%%B
for /f %%C in ('git symbolic-ref --short HEAD') do set GIT_BRANCH=%%C

(
    echo namespace $(RootNamespace)
    echo {
    echo     public static class GitInfo
    echo     {
    echo         public const string HASH      = "!GIT_HASH!";
    echo         public const string HASH_N7   = "!GIT_HASH_N7!";
    echo         public const string BRANCH    = "!GIT_BRANCH!";
    echo     }
    echo }
) > "$(ProjectDir)GitInfo.cs"

(
    echo !GIT_HASH!
    echo !GIT_BRANCH!
    echo.
) > "$(TargetDir)git_hash_branch_log.txt"

REM gitログを追記する.
git log >> "$(TargetDir)git_hash_branch_log.txt"

endlocal

echo プリビルドスクリプトが完了しました.

下記のコードは、Form1 の起動時に、Gitの情報をメッセージボックスに表示します。また、ウインドウが開いたらタイトルバーに短いハッシュと、アクティブブランチが表示されています。

using System;
using System.Text;
using System.Windows.Forms;

namespace aaa
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load( object sender, EventArgs e )
		{
			// タイトルバーにGit情報を表示する.
			String s0 = GitInfo.HASH;
			String s1 = GitInfo.HASH_N7;
			String s2 = GitInfo.BRANCH;
			this.Text = $"({s1}) ({s2})";

			// メッセージボックスでGit情報を表示する.
			StringBuilder sb = new StringBuilder();
			sb.AppendLine( s0 );
			sb.AppendLine( s1 );
			sb.AppendLine( s2 );
			MessageBox.Show( sb.ToString().Trim() );
		}
	}
}