2007/12/17

Subversionのコミットフック -Linuxにて

以前の書いたエントリSubversionのコミットフックにたどりつく人がいるみたいなのに、
期待はずれな感じで申し訳ないので、ちょっとだけちゃんと書いておきます。
ここではLinuxに特化して書きます。

コミットログを編集する
1. リポジトリ配下には以下のようなディレクトリがあります。
$ cd /var/www/svn/demo
$ ls -l
合計 56
-rw-r--r-- 1 apache apache 229 5月 19 2007 README.txt
drwxr-xr-x 2 apache apache 4096 5月 19 2007 conf
drwxr-xr-x 2 apache apache 4096 5月 20 2007 dav
drwxr-sr-x 5 apache apache 4096 5月 20 2007 db
-r--r--r-- 1 apache apache 2 5月 19 2007 format
drwxr-xr-x 2 apache apache 4096 5月 19 2007 hooks
drwxr-xr-x 2 apache apache 4096 5月 19 2007 locks
$
hooks ディレクトリの中に、hookスクリプトがありますが、これらのスクリプトはリポジトリ作成時点では実行できないように名前を変更&実行権がない状態になっています。
2. hooksディレクトリ内の構成は以下のとおりです
$ cd hooks
$ ls -l
合計 72
-rw-r--r-- 1 apache apache 2015 5月 19 2007 post-commit.tmpl
-rw-r--r-- 1 apache apache 1638 5月 19 2007 post-lock.tmpl
-rw-r--r-- 1 apache apache 2255 5月 19 2007 post-revprop-change.tmpl
-rw-r--r-- 1 apache apache 1567 5月 19 2007 post-unlock.tmpl
-rw-r--r-- 1 apache apache 2934 5月 19 2007 pre-commit.tmpl
-rw-r--r-- 1 apache apache 2038 5月 19 2007 pre-lock.tmpl
-rw-r--r-- 1 apache apache 2764 5月 19 2007 pre-revprop-change.tmpl
-rw-r--r-- 1 apache apache 1979 5月 19 2007 pre-unlock.tmpl
-rw-r--r-- 1 apache apache 2137 5月 19 2007 start-commit.tmpl
$

コミットログを変更するために必要なフックスクリプトは、
pre-revprop-change
です。

3. pre-revprop-change.tmplをcpして、pre-revprop-changeというファイルを作成します。その後、chmodでpre-revprop-changeファイルに実行権を追加します。
$ ls -l pre-revprop-change
-rwxr-xr-x 1 apache apache 2764 5月 19 2007 pre-revprop-change
$

4. pre-revprop-changeスクリプトの中身は単なるシェルなので自由に書けます。たとえば、どこかにrevpropを変更したというログを残すこともできます。デフォルトのシェルだと、svn:log(コミットログ)属性のみ変更できるようになっています。
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi

echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1

このコード部分を削除して、
exit 0
のみをコーディングすれば、svn:log属性のほかに、svn:author(=コミッタ)も変更できます。

コミットログの変更をtracに反映する。
5. 上記3の要領で、post-revprop-change.tmplからpost-revprop-changeを作成します。
6. post-revprop-changeをひらいて、tracに反映するためのコマンドを書きます。
/usr/bin/trac-admin /path/to/trac/envname resync


以上の手順で、コミットログの変更&tracにコミットログの変更を反映することができます。

0 件のコメント: