Subversionコミット時メール送信とTracチケットの自動クローズ
最近、なかなか自分の好きなことができないので、朝早起きして時間を作ることにしました。今日は4時起きです。さすがにこれが毎日続くとは思いませんけども、しばらく新しい生活を試してみようと思います。
職場では、Subversionのコミット時にその内容を開発メンバーにメールで配信しています。さらにコミット時のコメントに"(Fixes #21)"なんて書くと、Tracの21番のチケットを自動的にクローズするなんてこともしています。SubversionとTracの組み合わせは、私の職場では開発の必須ツールになりつつあります。でも、私がTracにバグを登録して、後で担当者に口頭で説明しようかなと思っていると、突然「バグがFixされました」というメールが来たりして焦りますが(^^; (まだ説明もしてないのに…)
設定方法ですが、まずSubversionリポジトリのhooksサブディレクトリにpost-commitというファイルを用意します。
/var/svn/sampleproject/hooks/post-commit
/var/svn/sampleproject/hooks/email-send.rb
職場では、Subversionのコミット時にその内容を開発メンバーにメールで配信しています。さらにコミット時のコメントに"(Fixes #21)"なんて書くと、Tracの21番のチケットを自動的にクローズするなんてこともしています。SubversionとTracの組み合わせは、私の職場では開発の必須ツールになりつつあります。でも、私がTracにバグを登録して、後で担当者に口頭で説明しようかなと思っていると、突然「バグがFixされました」というメールが来たりして焦りますが(^^; (まだ説明もしてないのに…)
設定方法ですが、まずSubversionリポジトリのhooksサブディレクトリにpost-commitというファイルを用意します。
/var/svn/sampleproject/hooks/post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
env LANG=ja_JP.eucJP ${REPOS}/hooks/email-send.rb "$REPOS" "$REV"
export LANG=ja_JP.UTF-8
LOG=`/usr/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
/usr/bin/python ${REPOS}/hooks/trac-post-commit-hook \
-p "/var/trac/sampleproject" \
-r "$REV" \
-u "$AUTHOR" \
-m "$LOG"
次にメール送信用のプログラムを同じディレクトリに用意します。ほぼサンプルそのままなんですが、本文が日本語で表示されるようにしているのと、Tracのチェンジセットへのリンクを追加しています。
/var/svn/sampleproject/hooks/email-send.rb
#!/usr/bin/ruby -Ke
require 'net/smtp'
require 'kconv'
REPOS=ARGV[0]
REV=ARGV[1].to_i
svnauthor=%x{svnlook author #{REPOS} rev #{REV}}.chomp!
svndate=%x{svnlook date #{REPOS} rev #{REV}}.chomp!
svnchanged=%x{svnlook changed #{REPOS} rev #{REV}}.chomp!
svnlog=%x{svnlook log #{REPOS} rev #{REV}}.chomp!
svndiff=%x{svnlook diff #{REPOS} rev #{REV}}.chomp!
toaddr=['member1@hoge.com', 'member2@hoge.com']
body = <<BODY
Subversion committed to #{REPOS} #{REV}
┌────────────────────────────┐
│更新者 : #{svnauthor.ljust(45)}│
│更新日時: #{svndate}│
└────────────────────────────┘
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
#{svnchanged}
Log:
--------------------------------------------------------
#{svnlog}
http://www.hoge.com/trac/sampleproject/changeset/#{REV}
BODY
Net::SMTP.start( 'mail.hoge.com', 25 ) {|smtp|
smtp.send_mail <<EndOfMail, 'svn-admin@hoge.com', *toaddr
From: Subversion Admin <svn-admin@hoge.com>
To: Subversion committers:;
Subject: [pj-#{REV}]=?ISO-2022-JP?B?GyRCPzckPyRKJTMlXyVDJUgkLCQiJGokXiQ3JD8bKEI=?=
MIME-Version: 1.0
Content-Type: text/plain; charset = ISO-2022-JP
#{body.tojis}
EndOfMail
}
最後に、Tracチケットの自動クローズをする trac-post-commit-hook を用意します。これは、/usr/share/doc/trac/contribにあるので、そのままコピーします。
# cp /usr/share/doc/trac/contrib /var/svn/sampleproject/hooks/
これで、コミット時に開発メンバにメールが送信され、コメントに (Fixes #29,#38) などと書くと該当するTracチケットが自動的にクローズされるはずです。
perm link: http://yamashita.dyndns.org/blog/247/









