hir_kazの日記

2006-11-09

[]サブバージョン コミットメールの配信方法 17:19 サブバージョン コミットメールの配信方法を含むブックマーク


* /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 = <<END_OF_BODY
Subversion committed to #{REPOS} #{REV}
┌────────────────────────────┐
│更新者  : #{svnauthor.ljust(46)}│
│更新日時: #{svndate.ljust(46)}│
└────────────────────────────┘

Log:
--------------------------------------------------------
#{svnlog}

Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
#{svnchanged}

Diff:
--------------------------------------------------------
#{svndiff}

END_OF_BODY

message = <<END_OF_MESSAGE
From: Subversion Admin <#{fromaddr}>
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

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