サブバージョン コミットメールの配信方法


* /var/subversion/svn/hooks/post-commit スクリプトを作成し、(コミット直後にSubversionにより実行される)
* post-commit スクリプトから/usr/lib/subversion/hook-scripts/commit-email.rb を呼ぶ
* スクリプトには実行権限を付けておく


post-commitを書き換える

#!/bin/sh

REPOS="$1"
REV="$2"

export LANG=japanese

/usr/lib/subversion/hook-scripts/commit-email.rb "$REPOS" "$REV"

cd /var/www/htdocs
umask 002
svn update `svnlook dirs-changed $REPOS | sed -e 's,htdocs/,,'` &


commit-email.rbは下記のように記述する

#!/usr/bin/ruby -Ke

require 'net/smtp'
require 'kconv'

REPOS=ARGV[0]
REV=ARGV[1].to_i

svnauthor=%x{svnlook author #{REPOS} -r #{REV}}.chomp
svndate=%x{svnlook date #{REPOS} -r #{REV}}.chomp
svnchanged=%x{svnlook changed #{REPOS} -r #{REV}}.chomp
svnlog=%x{svnlook log #{REPOS} -r #{REV}}.chomp
svndiff=%x{svnlook diff #{REPOS} -r #{REV}}.chomp

toaddr  =['info1@hoge.co.jp', 'info2@hoge.co.jp', 'info3@hoge.co.jp', 'info4@hoge.co.jp']
fromaddr=['Subversion@localhost.localdomain']


svnlog=svnlog.kconv(Kconv::EUC,  Kconv::ASCII)

body = <
                                                                                                              • -
#{svnlog} Changed: [U:修正,A:追加,D:削除]
                                                                                                              • -
#{svnchanged} Diff:
                                                                                                              • -
#{svndiff} END_OF_BODY message = < To: Subversion committers:; Subject: [コミットメール svn-#{REV}] commit MIME-Version: 1.0 Content-Type: text/plain; charset = ISO-2022-JP X-Mailer: Subversion email-send.rb #{body.tojis} END_OF_MESSAGE Net::SMTP.start('localhost', 25) { |smtp| smtp.send_mail(message, fromaddr, *toaddr) }


実行権限とか

# chmod 755 commit-email.rb
# chown www-data.www-data commit-email.rb


※ /usr/lib/subversion/hook-scripts/commit-email.pl を用いる方法で日本語文字化けが解決できなかったのでrubyスクリプトを用いた方法で代替しました。キッーーー!!
※ 参照:http://f29.aaa.livedoor.jp/~yamakan/index.php?SVN(Subversion)%20%A5%B3%A5%DF%A5%C3%A5%C8%A5%E1%A1%BC%A5%EB%C0%DF%C4%EA


ちなみに、rubydebian環境なので

# apt-get install ruby

で簡単にインストできました。