SVNにはフック機能があり、コミット前後等で別の処理を実行することができます。
その機能を使用し、コミット前にコメントが入力されているかチェックし、入力されていなければエラーを返しコミットさせない処理をさせる方法を紹介します。
SVNのリポジトリを作成した時にhooksというディレクトリが出来上がります。
その中にtmplというファイルがたくさんあり、それがそれぞれのフックのテンプレートになっています。
それを編集することでフック機能を追加できます。
今回はコミット前に処理をさせたいので「pre-commit」を編集します。
実際にフックを有効にするにはテンプレートファイルの拡張子「.tmpl」を削除します。
pre-commit
#!/bin/sh # LANG設定 export LANG=ja_JP.utf8 # コミット前の引数 REPOS="$1" TXN="$2" # svnlookのパス SVNLOOK=/usr/bin/svnlook # 空白を除いてコメント取得 COMMENT=`${SVNLOOK} log -t "${TXN}" "${REPOS}" | sed -e "s/\s//g"` # 指定文字数未満のとき、コミットしない if [ ${#COMMENT} -le 5 ]; then echo "コメントを入力して下さい。" >&2 exit 1 fi exit 0
このシェルスクリプトはコミット時にコメントが5文字未満ならエラーを返します。
簡単にコメント未入力を防ぐだけのスクリプトなので、キッチリやりたい方はゴリゴリ処理を書いて下さい。
今回、スクリプトを書いてみましたが、1点かなりハマった部分がありました。
それはsvnlookで全角のコメントを取得すると「あ」の場合「?\227?\129?\130」というふうに文字化けして、文字数が取得できず大変困ったことです。
OSのエンコード設定がおかしいのかと疑ったのですが、そうではなくスクリプト実行時に文字コードがちゃんと設定されていないために文字化けが起こっていたことがわかりました。
文字化けは環境変数LANGに文字コードを設定することで解決しました。