Subversionでコミットの際にメールを送信するようにした時の備忘録。
前提として、メール送信には「commit-email-jp-CentOS5.pl」を使う。
上記に関してはググると出てくるので、ダウンロードして
/usr/share/doc/subversion-1.6.11/tools/hook-scripts/
に設置。
Commitした際の処理をhookしてメール送信するので、対象リポジトリのhooksディレクトリの中の以下ファイルをリネーム。
post-commit.tmpl → post-commit
んで、中を見てみると mailer.py を使う用になっているので、以下のように修正
#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf export PATH=/usr/share/doc/subversion-1.6.11/tools/hook-scripts/:$PATH commit-email-jp-CentOS5.pl "$REPOS" "$REV" --from [メールのFROMアドレス] -s '[メールのSUBJECT]' [メールのTOアドレス]
このままでもいいんだけど、どうもメールのDateヘッダがおかしくなるので「commit-email-jp-CentOS5.pl」を修正。
以下をヘッダ部に追加。
use POSIX qw(setlocale LC_ALL);
560行目あたりでDateヘッダの処理をしているので、取りあえずそのあたりをコメント。
#$formatted_date = strftime('%a %b %e %X %Y', localtime()); #これでは日本語文字列が出てきて妙なことになる #chomp($formatted_date = `date`); #$formatted_date = strftime('%a, %d %b %Y %X %z' , localtime()); #push(@head, "From $mail_from $formatted_date\n");
#chomp($formatted_date = `date`); ## Dateヘッダはsendmail(sendmane)に任せるので一時コメントアウト。 ## ##push(@head, "Date: $formatted_date\n"); #my $ltime = ""; #my $wday = ""; #my $mon = ""; #my $day = ""; #my $time = ""; #my $year = ""; #$ltime = localtime; #($wday, $mon, $day, $time, $year) = split(/ /, $ltime); # #formatted_date = sprintf("%s, %2d %s %s %s +0900", $wday, $day, $mon, $year, $time);
んで、
push(@head, "Date: $formatted_date\n");
の直前で以下を追加。
setlocale( LC_ALL, "C" ); $formatted_date = strftime('%a, %d %b %Y %X %z' , localtime());
これでメールヘッダがちゃんと出力されるようになった。
ソース内の作者さんのコメントに
「これでは日本語文字列が出てきて妙なことになる」
って書いてあるけど、setlocale()やってあげれば大丈夫。
あとは$formatted_dateをRFC822に合うようにフォーマットを直してあげればOK。
DateTimeを使ってメールヘッダ用の日付を出力出来るけど、それまでに色々ライブラリ入れる必要があって、それがかなり面倒。
最初からDateTimeの環境があるなら、それが一番スマートだけど。
では。