フックスクリプト
フックスクリプトとは
Subversionには、フックスクリプトという機構が用意されています。
クライアントがリポジトリに対して、なんらかのアクションを起こした際に起動するスクリプトです。
リポジトリのhooksディレクトリにあるスクリプトファイルが実行されます。
種類
hooksディレクトリにはフックスクリプトのテンプレートが用意されています。
以下の名称でスクリプトを作成すると、それぞれのタイミングで実行されます。
各スクリプトは、独自の引数を渡されて実行されます。
具体的には次の動作テストにて。
・start-commit
コミットのトランザクションが開始後に実行されます。
コミット権限がないとエラーを返します。
$1:リポジトリのパス
$2:クライアントのユーザ名
・pre-commit
コミットのトランザクションが終了後に実行されます。
(コミット完了後ではありません。)
$1:リポジトリのパス
$2:トランザクション名
・post-commit
トランザクションのデータがコミットされた後に実行されます。
$1:リポジトリのパス
$2:トランザクション番号
※ 参考
hooksディレクトリのテンプレートは以下です。
[root@example hooks]# ls
post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmpl
post-lock.tmpl pre-commit.tmpl pre-unlock.tmpl
post-revprop-change.tmpl pre-lock.tmpl start-commit.tmpl
動作テスト
まず、テンプレートをコピーして各種フックスクリプトを作成します。
今回の目的は、どのような引数が渡されるか確かめることです。
なので、テンプレートに記述されている各種処理は省きます。
引数を単にechoするだけのスクリプトを作成します。
start-commit
#!/bin/bashpre-commit
REPOS="$1"
USER="$2"
LOG="test.log"# 引数を確かめます。
echo start-commit:${REPOS} >> $LOG
echo start-commit:${USER} >> $LOG
#!/bin/bash
REPOS="$1"
TXN="$2"
LOG="test.log"# 引数を確かめます。
echo pre-commit:${REPOS} >> $LOG
echo pre-commit:${TXN} >> $LOG
post-commit
#!/bin/bash
REPOS="$1"
REV="$2"
LOG="test.log"# 引数を確かめます。
echo post-commit:${REPOS} >> $LOG
echo post-commit:${REV} >> $LOG
以下の条件でクライアントからコミットします。
ユーザ名:testuser
リポジトリ:/home/svn/repos/sampleproject
リビジョン:3
コミットしたユーザのディレクトリに「test.log」が作成されているので、見てみましょう。
[testuser@example ~]$ cat test.log
start-commit:/home/svn/repos/sampleproject
start-commit:testuser
pre-commit:/home/svn/repos/sampleproject
pre-commit:2-3
post-commit:/home/svn/repos/sampleproject
post-commit:3