連絡先 トップに戻る 最初に戻る 前に戻る 次へ進む
$Date: 2017-05-06 22:21:48 +0900 (2017/05/06 (土)) $
$Revision: 1117 $

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

概要

Subversion を使っているとコミットメールを送信すると便利です。 post-commit フックスクリプトでリポジトリに直接アクセスして 差分をメール送信することが可能です。このページでは svnmailer を日本語を扱えるように拡張したものを使ってコミットメールを送信する方法を説明します。

セットアップ手順

拡張バージョンの svnmailer を入手する

svnmailer で日本語を扱えるように独自に拡張したものです。
拡張バージョンの svnmailer は github に登録しています。

$ git clone https://github.com/m-tmatma/svnmailer

または

$ svn co https://github.com/m-tmatma/svnmailer/trunk

または

https://github.com/m-tmatma/svnmailer にアクセスして Download ZIP をクリックします。

オリジナルのバージョンの svnmailer は以下から入手可能です。
http://opensource.perlig.de/en/svnmailer/

Subversion Python bindings のインストール

svnmailer は Subversion Python bindings を使っているので Python bindings をインストールする必要があります。 Fedora 19 などでは yum でインストールできます。
[root ~]# yum install subversion-python.x86_64

参照

svnmailer のインストール

setup.py を実行して svnmailer をインストールします。
python setup.py install
--root を指定することによってインストール先を変更できます。
python setup.py install --root /home/svnuser/root

基本的な svnmailer.conf の設定

設定ファイル(svnmailer.conf) を編集する必要があります。

default_charsets の設定で適用したい文字コードを指定する。

https://github.com/m-tmatma/svnmailer/blob/master/test/default_charsets.conf

svnmailer.conf

[general]
#sendmail_command = /usr/sbin/sendmail
smtp_host = localhost

[defaults]
default_charsets = utf-8 shift-jis euc-jp
show_applied_charset = yes
mail_transfer_encoding = 8bit
from_addr = %(author)s@example.org
to_addr = commit@example.org
generate_diffs = add copy modify propchange

for_repos = .*/(?P.*)
commit_subject_prefix     = [%(project)s commit]
propchange_subject_prefix = [%(project)s propchange]
lock_subject_prefix       = [%(project)s lock]
unlock_subject_prefix     = [%(project)s unlock]

from_addr, to_addr, smtp_host を適切なものに変更する

svn-mailer の使い方

$ svn-mailer --help
Usage: svn-mailer <options>

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit

  COMMON PARAMETERS:
    --debug             Run in debug mode (means basically that all messages are sent to STDOUT)
    -d REPOSITORY, --repository=REPOSITORY
                        The repository directory
    -f CONFIG, --config=CONFIG
                        The configuration file
    -e PATH_ENCODING, --path-encoding=PATH_ENCODING
                        Specifies the character encoding to be used for filenames. By default the encoding is tried to be
                        determined automatically depending on the locale.

  BEHAVIOUR OPTIONS:
    The behaviour options are mutually exclusive, i.e. the last one wins.

    -c, --commit        This is a regular commit of versioned data (post-commit hook). This is default.
    -p, --propchange    This is a modification of unversioned properties (post-revprop-change hook)
    -l, --lock          (svn 1.2 and later) This is a locking call (post-lock hook)
    -u, --unlock        (svn 1.2 and later) This is a unlocking call (post-unlock hook)

  SUPPLEMENTAL PARAMETERS:
    -r REVISION, --revision=REVISION
                        The modified/committed revision number
    -a AUTHOR, --author=AUTHOR
                        The author of the modification
    -n PROPNAME, --propname=PROPNAME
                        The name of the modified property
    -o ACTION, --action=ACTION
                        (svn 1.2 and later) The property change action

Alternatively you can use the old style compatibility command lines (options described above don't apply then):

svn-mailer commit <repos> <revision> [<config>]
svn-mailer propchange <repos> <revision> <author> <propname> [<config>]

svn 1.2 and later:
svn-mailer propchange2 <repos> <revision> <author> <propname> <action> [<config>]
svn-mailer lock <repos> <author> [<config>]
svn-mailer unlock <repos> <author> [<config>]
svn-mailer は mailer.py 互換の引数に対応しているのと拡張のパラメータに対応しています。
svn-mailer --commit --repository svnrepos --revision 869 --config simple.conf --debug

post-commit を作成する

標準のインストール先とは違うディレクトリにインストールした場合は
PYTHONPATH を指定して svnmailer 用のモジュールディレクトリを指定します。
python のバージョンが異なる場合は適宜変えてください。
#!/bin/sh
REPOS="$1"
REV="$2"

export PYTHONPATH=/home/svnuser/root/usr/lib/python2.7/site-packages

/home/svnuser/root/usr/bin/svn-mailer --commit --repository "$REPOS" --revision "$REV" --config "$REPOS/svnmailer.conf" &