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コマンドからコミットした場合は・・・ おっと以下のエラーにぶつかってしまいました。
# 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
コメント