Subversionでコミット時にメール送信する

Pocket
このエントリーをはてなブックマークに追加

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の環境があるなら、それが一番スマートだけど。

では。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です