Subversion でコミットメールを飛ばしてみよう
こんにちは、nakamura です。寒いと思ったら今年もあと 2 ヶ月ちょいか~。早くまた夏にならないかな。
おいまたかよ!という声はスルーして今回も Subversion ネタをお送り致します。Subversion でコミット時にメール通知する方法です。わざわざログを辿るほどではないけど何がコミットされたのか調べたい時などに、メールで通知されていると便利ですよ。
コミット時にメール通知する方法はいつくかあるようですが、今回は Subversion のソースコードにも付属している公式(?)のメール送信スクリプトである mailer.py を使用する方法をご紹介します。※サーバ上に Python がインストールされている必要があります。
リポジトリの用意
/var/www/svn/repos/my_project にリポジトリを作成する例です。
mkdir -p /var/www/svn/repos/my_project
svnadmin create /var/www/svn/repos/my_project
ダウンロード
まずは apache.org のリポジトリから mailer.py 本体と設定ファイルのサンプルをダウンロードします。以下からどうぞ。
http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/mailer/
コマンドラインで直接リポジトリに設置する場合はこんな感じでしょうか。
wget http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/mailer/mailer.py -O /var/www/svn/repos/my_project/hooks/mailer.py
wget http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/mailer/mailer.conf.example /var/www/svn/repos/my_project/conf/mailer.conf
設定ファイル編集
mailer.conf を編集します。以下は設定の一例です。mailer.conf.example には設定内容のコメントも多く書かれているので参考にしながら設定してみてください。
[general]
# SMTP サーバ名
smtp_hostname = localhost
[defaults]
# 件名に付与されるプレフィックス
commit_subject_prefix = [commit] my_project
propchange_subject_prefix = [propchange] my_project
lock_subject_prefix = [lock] my_project
unlock_subject_prefix = [unlock] my_project
# メールの差出人、宛先
from_addr = admin@svn.example.com
to_addr = project@example.com
reply_to = project@example.com
# リポジトリの URL
commit_url = http://svn.example.com/my_project
# diff を生成しない
generate_diffs = none
# 件名の文字数を制限
truncate_subject = 200
スクリプト設置
hooks ディレクトリの下に post-commit スクリプトを設置します。デフォルトで設置されている post-commit.tmpl をコピーしてコミットメールの記述を追記しましょう。
cp /var/www/svn/repos/my_project/hooks/post-commit.tpl /var/www/svn/repos/my_project/hooks/post-commit
デフォルトで mailer.py を使用する記述例が書かれているので以下のように修正。
REPOS="$1"
REV="$2"
mailer.py commit "$REPOS" "$REV"
実行権限を付与。
chmod +x /var/www/svn/repos/my_project/hooks/post-commit
chmod +x /var/www/svn/repos/my_project/hooks/mailer.py
Apache 経由で動かしている場合はリポジトリ全体のオーナーを apache ユーザに変更しておきましょう。
chown apache:apache -R /var/www/svn/repos/my_project
以上で設定は終了です。実際にコミットしてみてメール通知されるかどうか確認してみましょう。ちなみに送信されるメールの文字コードは全て UTF-8 になります。今ではたいがいのメーラが対応していますが、古いメーラをお使いの場合は文字化けする可能性があるのでご注意ください。