本文来自:http://www.asahi-net.or.jp/~iu9m-tcym/svndoc/svn_mailer_py.html
概要
Subversion を使っているとコミットメールを送信すると便利です。post-commit フックスクリプトでリポジトリに直接アクセスして差分をメール送信することが可能です。このページでは mailer.py というコミットメール送信ツールを紹介します。セットアップ手順
- mailer.py を入手する
- Subversion Python bindings をインストールする
- mailer.conf でメール送信先等の設定を行う
- 日本語文字化け対策
- diff.pl を作成する
- mailer.conf の diff を編集する
- post-commit を作成する
入手先
mailer.py は以下から入手可能です。http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/mailer
Subversion のソースコード配布ファイルの中にも含まれています。Subversion Python bindings のインストール
mailer.py は Subversion Python bindings を使っているのでPython bindings をインストールする必要があります。参照
Python bindings をインストールしたら、mailer.conf という設定ファイルを編集する必要があります。mailer.conf.example という設定ファイルのサンプルがあるのでこれを元に編集すれば OK です。
メール送信先等の設定
mailer.conf.example をベースに mailer.conf を作成し、mailer.conf を編集して、送信先メールアドレス等を設定します。- mail_command をコメントアウトする または smtp_hostname を設定する
- from_addr に有効なメールアドレスを設定する
- to_addr に有効なメールアドレスを設定する
日本語のファイルの文字化け対策
リポジトリの中身のファイルが、Shift JIS や EUC 等 UTF8 以外の文字コードを使っているとコミットメールが文字化けしてしまいます。なので文字化けしないようにする必要があります。mailer.py はメールを送信するとき、ファイルの中身が UTF8 である前提で動作するようになっています。
ファイルの中身が Shift-JIS や EUC であれば以下のようになり文字化けしてしまいます。- ログメッセージ: UTF8
- ファイルの中身(差分): Shift-JIS or EUC
- Content-Type: UTF8
ただしメールソフトが UTF8 のメールに対応していないと、コミットメールは文字化けして読めません
mailer.conf の diff プログラムの指定
mailer.conf.example には general というセクションがあり、そこにdiff という変数があります。これを編集して nkf の処理を追加します。diff に直接 nkf を指定することができればいいのですが、パイプでつないで起動するということができないようなので、nkf を呼び出すためのperl スクリプトを作成することにします。変更前
diff = /usr/bin/diff -u -L %(label_from)s -L %(label_to)s %(from)s %(to)s変更後
diff = /var/svn/diff.pl -u -L %(label_from)s -L %(label_to)s %(from)s %(to)sdiff.pl (渡された引数を /usr/bin/diff にそのまま渡して、nkf をパイプでつないで呼び出すスクリプト)
#!/usr/bin/perl $diff = "/usr/bin/diff"; $nkf = "/usr/bin/nkf"; $cmd = "$diff "; foreach $arg ( @ARGV ) { $cmd = "$cmd \"$arg\""; } $cmd = "$cmd | $nkf --utf8"; system $cmd;
mailer.py の使い方
$ ./mailer.py --help USAGE: mailer.py commit REPOS REVISION [CONFIG-FILE] mailer.py propchange REPOS REVISION AUTHOR REVPROPNAME [CONFIG-FILE] mailer.py propchange2 REPOS REVISION AUTHOR REVPROPNAME ACTION [CONFIG-FILE] mailer.py lock REPOS AUTHOR [CONFIG-FILE] mailer.py unlock REPOS AUTHOR [CONFIG-FILE] If no CONFIG-FILE is provided, the script will first search for a mailer.conf file in REPOS/conf/. Failing that, it will search the directory in which the script itself resides. ACTION was added as a fifth argument to the post-revprop-change hook in Subversion 1.2.0. Its value is one of 'A', 'M' or 'D' to indicate if the property was added, modified or deleted, respectively.コミットメールを送るには、設定ファイルを編集して
mailer.py commit REPOS REVISION [CONFIG-FILE]の構文に従って mailer.py を実行すれば OK なのですが、
post-commit の設定
- post-commit を mailer.py と mailer.conf をリポジトリの hooks ディレクトリに置く場合以下の内容で作る。
REPOS="$1" REV="$2" /usr/bin/python $REPOS/hooks/mailer.py commit "$REPOS" "$REV" &
- post-commit に実行属性をつける。
备注:tools/hook-scripts/mailer/mailer.py", line 958. Error
这个错误的时候把DifflibDiffContent():改为DifflibDiffContent:即可。