なか日記

一度きりの人生、楽しく生きよう。

コミット時にチケットに関するコメントが書かれていることをチェックする

前のエントリで書いた以下の内容について試してみました。

TracLightningで「チケットに関するコメントを必須にする - タイトルは未定」の設定を行ってた場合、git commitする時にチケット番号入れ忘れると面倒なことになりそうですね。dcommitする時に怒られると思うので、後からまとめてコミットログを修正しないといけなくなる…

この辺はローカルの「commit-msg」フックを使ってチェックするようにしたらいいんだろうなぁ。ということで、これは今度考えてみよう。

git svnを使ってTracLightningのSVNリポジトリへclone,docomitしてみる - タイトルは未定

commit-msg の編集

.git\hooks に commit-msg を作成して、以下の様に編集します。
シェルスクリプトはちんぷんかんぷんなので、書き方おかしいかも。遠慮無く突っ込んで下さいw

#!/bin/sh

#チケットに関するログが記載されているかのチェック
exp="(?:close|closed|closes|fix|fixed|fixes|addresses|references|refs|re|see)"
exp=$exp".?(#[0-9]+(?:(?:[, &]+| *and *)#[0-9]+)*)"
grep -E "$exp" $1 > /dev/null

if [ $? -ne 0 ]; then
#    echo 'At least one open ticket must be mentioned in the log message.'
    echo 'ログメッセージにチケット情報入れておくんなまし' | nkf -s
    exit 1
fi

正規表現は TracLightning が実際に行っているチェック*1からパクってます。
メッセージについては、git bashだとSJISにしておく必要があるので、nkfSJIS に変換してます*2

*1:$TRAC_LIGHT_HOME/python-lib/trac/contrib/trac-pre-commit-hook

*2:commit-msg を SJIS で作成していれば nkf かまさなくても良いのですが、心配なので…