【SVN】フックを利用する ~入門編~

  概要

 * Subversionは、hookと呼ばれる、コミット前後などのイベントをフックして
  処理を制御することができる。

 

  ログコメントを必須にするには...

 * ログコメントが書かれていない時に、コミットを行った場合、
  エラーとなり、コミットを行われない方法を記載する(ネットによく乗っているもの)

 

  環境

 * OS : WIndows7

 

  手順

 [1] pre-commit.bat(下記サンプル「pre-commit.bat」を参照のこと)を作成し、「【リポジトリ】\hooks」に格納する
 [2] 検証スクリプト(下記サンプル「validate.js」を参照のこと)を作成し、
   手順[1]で保存したフォルダ内「【リポジトリ】\hooks」に格納する

 

  サンプル

  pre-commit.bat

set repository=%1
set transaction=%2

REM コメントがあるかどうかをチェック
cscript //nologo %0\..\validate.js "%rrepository%" "%transaction%"

REM 検証結果をsubversionに返す(0ならコミット可能)
exit %ERRORLEVEL%

 

  validate.js

var svn_repos          = WScript.Arguments.Unnamed(0);
var svn_transaction_id = WScript.Arguments.Unnamed(1);

var ws = WScript.CreateObject("WScript.Shell");
var cmd_get_comment = "svnlook -t \""
	+ svn_transaction_id
	+ "\" log \""
	+ svn_repos
	+ "\"";

var proc = ws.Exec(cmd_get_comment);
while(proc.Status == 0) {
	WScript.Sleep(100);
}
var svn_comment = proc.StdOut.ReadAll();

svn_comment = svn_comment.replace(/(\r|\n|\t| | )/g, "");
if(svn_comment.length > 0) {
	// 正常終了コードを返して終了
	WScript.Quit(0);
} else {
	WScript.StdErr.Write("ログメッセージが記入して下さい");
	WScript.Quit(1);
}

  参考文献

http://d.hatena.ne.jp/language_and_engineering/20100819/p1

 

  コミット後にログを再編集できるようにするには...

  環境

 * OS          : WIndowsXP
 * TortoiseSVN : TortoiseSVN 1.7.10

  手順

  前準備

 * pre-revprop-change.bat(下記サンプル「pre-revprop-change.bat」を参照のこと)を作成し、
  「【リポジトリ】\hooks」に格納する

  コメント修正するには...

 [1] リポジトリブラウザで、対象のフォルダ・ファイルを右クリックし、[ログ表示]を選択
 [2] 対象のリビジョンを右クリックし、[ログメッセージを編集]を選択
 [3] メッセージを編集し、「OK」ボタン押下
  => 前準備を行っていないと、以下のエラーが表示され、編集できない

■エラー内容
 リポジトリが、リビジョン属性を変更できるようにはなっていません。
 管理者に pre-revprop-change フックを作成するよう頼んでください。

  サンプル

  pre-revprop-change.bat

if "%5"=="M" (
  if "%4"=="svn:log" (
    exit 0
  )
)
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1

  参考文献

http://www.bnote.net/windows/windows/svn_logedit.shtml