mailer.py でのコミットメール送信 (日本語対応)

本文来自: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 をインストールする必要があります。

参照

  • subversion/bindings/swig/INSTALL
  • Python binding をコンパイルする方法 (VC6)

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
幸いにも、mailer.py ではファイルの差分を表示させるときのコマンドを設定ファイルで変更できるようになっています。メールで送信する前に nkf に食わせて 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)s
diff.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/hoo​k-scripts/mailer/mai​ler.py", line 958. Error: class DifflibDiffContent(): Error: ^ Error: SyntaxError: invalid syntax

这个错误的时候把DifflibDiffContent():改为DifflibDiffContent:即可。

你可能感兴趣的:(python,cmd,command,search,subversion,binding)