subversionのhookを作ったときのメモ

◆hookとは

コミット、ロックといったユーザ操作にあわせて

構文チェック・メール送信など作ったスクリプトを実行できる機能

◆hookの種類(よく使うものだけ)

post-commit…コミット後実行する。

pre-commit…コミットトランザクションの直前に実行する。

参考URL

http://www.caldron.jp/~nabetaro/svn/svnbook-1.4-final/svn.ref.reposhooks.post-commit.html

http://www.caldron.jp/~nabetaro/svn/svnbook-1.4-final/svn.ref.reposhooks.pre-commit.html

※今回はpre-commitを作ったので以下はpre-commit用のメモ

◆パラメータで渡ってくる値

 #リポジトリ(ex:/repos/xxxxx/)
 REPOS=$1
 #トランザクション番号
 TXN=$2

※トランザクション番号はsvnlookコマンドで利用できる

※ex:svnlook changed -t $TXN $REPOS

◆チェックをしてエラーを返したいとき

 #error
 if [ 1 -eq "$error" ]; then
   echo "commit error!!">&2
   exit 1
 fi
 #success
 exit 0

※exit 1で1を返すとエラー

※エラーメッセージを出力したいときは>&2をつける(標準エラー出力)

◆コミットされたファイルを一つずつチェックしたいとき

 ret="$(svnlook changed -t "$TXN" "$REPOS")"
 for line in $ret
 do
   #ココが綺麗じゃないけど・・
   if [ 0 -ne `expr $i % 2` ]; then
      #php -lなどでソースチェック
   fi
   i=`expr $i + 1`
 done

※ファイル一個ずつなので大量にコミットするときは待ち時間が長くなりそう

◆その他

svnlook changedの結果

A xxxxx/index.php

D xxxxx/index2.php