Subversion 初期設定(2)
半年ほど前に、当時のメインブログで
というのを書いていたんですが、その続きを書いてみます。今回は
- post-commit hook の設定
の部分。書いてから気づいたんですが、特に変わったことやってないです・・・。
メール送信スクリプトの準備(前準備)
まずメール送信用のスクリプトを準備します。スクリプトはいくつか種類がありますが、
なんかでいわれているように、最近だと mailer.py を使えばいいです。
今からごちゃごちゃ書きますが、以下の URL を見ていただければ十分かもしれません。
mailer.py は subversion ソースに含まれているはずなので、これを svn の hooks ディレクトリにコピーします。(別のバージョンの mailer.py を使うと動かなかったりすることもあるので注意してください。)
対象は mailer.py と mailer.conf.example(設定ファイルサンプル)の 2 ファイルです。設定ファイルは svn/conf に入れるのがベストな気がしますが、ここは手抜きしています。
cd /home/svn/hoge/hooks cp /usr/local/src/subversion-1.3.2/tools/hook-scripts/mailer/mailer.* .
この状態でいったん svn に格納しておきます。(svn でファイルを管理するときは、変更前のファイルを格納しておく癖をつけておいたほうが、マージ等で困りません。)
svn add mailer.* svn propset 'svn:executable' '*' mailer.py svn ci -m 'mailer.py および設定ファイルサンプルを格納。(/usr/local/src/subversion-1.3.2/tools/hook-scripts/mailer 配下からコピー。)'
なんだかパーミッションが足りないので設定した上で・・・
chmod o+r mailer* chmod o+x mailer.py
設定ファイルを編集します。
svn cp mailer.conf.example mailer.conf vi mailer.conf
設定内容ですが、以下の 4 箇所くらい設定しておけばとりあえず OK です。
smtp_hostname = smtp.example.com from_addr = hoge@example.com to_addr = hoge-ml@example.com reply_to = hoge-ml@example.com
mailer.py を実行して、実際にメールが飛ぶことを確認しておきます。以下のようにして呼び出せば、リビジョン 1 に対応したメールが飛ぶはずです。
/usr/bin/python /home/svn/hoge/hooks/mailer.py commit /home/svn/hoge 1
うまくいってるようであれば、コミットしておきます。
svn ci -m 'mailer.py の設定ファイルを作成。'
あとは好みで、今までのリビジョンについてもひととおりメールを飛ばしたりもします。たとえばリビジョン 2〜6 についてもメールを送りたいのであれば、以下のような感じで。
perl -e 'system qq{/usr/bin/python /home/svn/hoge/hooks/mailer.py commit /home/svn/hoge $_} for 2..6'
post-commit-hook で mailer.py を呼び出すよう設定
pre-commit-hook のときと同じように、post-commit hook を設定します。
svn cp post-commit.tmpl post-commit svn propset 'svn:executable' '*' post-commit vi post-commit
変更内容は、
commit-email.pl "$REPOS" "$REV" commit-watchers@example.org log-commit.py --repository "$REPOS" --revision "$REV"
この 2 行を削って、代わりに
/usr/bin/python $REPOS/hooks/mailer.py commit "$REPOS" "$REV" &
この 1 行を追加します。
で、コミット。ちゃんとメールが飛ぶことを確認します。
svn ci -m 'post-commit hook で mailer.py を呼び出すよう設定。'
post-commit-hook で trac-post-commit-hook を呼び出すよう設定
trac-post-commit-hook というのは、
これのことで・・・SVN のコミットメッセージに応じて Trac のチケットをに反映するスクリプトですね。たとえばコミットメッセージ中に「closes #<チケット番号>」という記述が含まれてたら、該当チケットのコメントに SVN のコミットメッセージを追加するとともに、チケットの close もやってくれる、という具合です。(詳しくはこのスクリプトの先頭部分を読んでください。)
まずはこのスクリプトを取得します。以下では edgewall.com から最新版を取得していますが、Trac のソースを取得している場合はそちらから入れて下さい。(0.10.4 のときに最新版を使おうとすると失敗しました。)
wget http://svn.edgewall.com/repos/trac/trunk/contrib/trac-post-commit-hook svn add trac-post-commit-hook
いつもの流れであれば svn:executable を設定するところですが、このファイルは python に引数として渡すので設定していません。
そして post-commit 時に呼ばれるようにしておきます。post-commmit に以下の 2 行を追加します。
TRAC_ENV="/home/trac/hoge" /usr/bin/python $REPOS/hooks/trac-post-commit-hook -p "$TRAC_ENV" -r "$REV" &
で、コミット。あらかじめ「post-commit hook 設定」みたいなチケットを作成しておいて、これがちゃんと close されることを確認しておきましょう。
svn ci -m 'post-commit hook で trac-post-commit-hook を呼び出すよう設定。 closes #1'
本当は mailer.py や trac-post-commit-hook に細かい改造を加えたりもしているのですが、長くなるのでいずれまた別項で・・・。
-
-
- -
-
ということで、post-commit-hook の設定は終わり。
残りは pot-revprop-change とpre-revprop-change くらいなので、あと一回で書ききれるかな・・・。