[Subversion] pre-commitを用いたhookでコミット時メッセージを必須+日本語でのエラー表示を行うの巻

スポンサーリンク

svnを用いてコミットする時にメッセージを必須とするようにした。今回はコミット時にメッセージが全くない場合に、日本語でのエラーメッセージを表示するように設定してみた。

svnのルートディレクトリを /var/www/svn/ とし、その配下にプロジェクトのディレクトリがある。
プロジェクト名が「project01」の場合、「/var/www/svn/project01/」がプロジェクトのディレクトリになる。

project01のディレクトリ配下に「hooks」というディレクトリがあり、この中にある「pre-commit.tmpl」を参考に以下の手順を行う。

1. ファイルの作成

/var/www/svn/project01/hooks/配下に「pre-commit」という名前で以下の記述を書いたファイルを置く。

[bash]#!/bin/sh

REPOS=”$1″
TXN=”$2″

SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t “$TXN” “$REPOS” | wc -c > /tmp/text
if [ `$SVNLOOK log -t “$TXN” “$REPOS” | wc -c` -lt 2 ];then
echo ‘——————————————————————‘ 1>&2
echo ‘警告’ 1>&2
echo ‘——————————————————————‘ 1>&2
echo ‘メッセージが入力されていない場合はコミットできません。’ 1>&2
echo ‘コミット時のメッセージを入力した上でコミットをお願いします。’ 1>&2
echo ‘——————————————————————‘ 1>&2
exit 1
fi

exit 0[/bash]

2. 作成したファイルへの実行権限の付与

# chmod 755 /var/www/svn/project01/hooks/pre-commit

3. Apacheのデフォルトlocaleを変更する

これをやっておかないと「[Error output could not be translated from the native locale to UTF-8.]」のエラーで悩むことになる

# cp -p /etc/sysconfig/httpd /etc/sysconfig/httpd.back ←一応のバックアップの作成
# vi /etc/sysconfig/httpd ←設定ファイル編集
#HTTPD_LANG=C
↓コメントアウトを外して「ja_JP.utf8」に変更
HTTPD_LANG=ja_JP.utf8

4. Apacheの再起動を行う

# service httpd restart

コミットする時にメッセージがない場合にはエラー表示されるようになる。
ここでは、メッセージがからであるかどうかを以下の方法で確認している。

[bash]`$SVNLOOK log -t “$TXN” “$REPOS” | wc -c` -lt 2 [/bash]

メッセージが空の場合には改行文字が1文字含まれるので、「2よりも小さい」という「-lt 2」を用いている。

ちなみに、以下は TortoiseSVN Version 1.8 からメッセージ無しでコミットした場合のメッセージです。

svn_commit_error

 

svnコマンドからコミットした場合は・・・ おっと以下のエラーにぶつかってしまいました。

# svn commit
svn: E155021: This client is too old to work with the working copy at
'/hoge/hogehoge/hogehogefoo/foo/' (format 31).
You need to get a newer Subversion client. For more details, see
 http://subversion.apache.org/faq.html#working-copy-format-change

svnコマンドのバージョンが古くてダメなようなので、svnコマンドからのコミットに関してはsvnコマンドをアップデートしてから再挑戦します。

以上

参考になったページ:

Unable to write an error message when on a pre-commit hook(英語):
http://stackoverflow.com/questions/5330419/unable-to-write-an-error-message-when-on-a-pre-commit-hook

 

コメント

タイトルとURLをコピーしました