豚吐露@wiki

CheckIn時のコメントを必須にしたい

最終更新:

ohden

- view
管理者のみ編集可

環境
Ubuntu 8.10
SubVersion 1.6.6

CheckIn時のコメント内容に対する処理は『フックスクリプト』を用いて実行する。

作成したリポジトリへ移動し、中を見てみると...
e.g.)
> cd /var/svn/test_repos/
> ll
合計 24
-rw-r--r-- 1 root root  229 2010-10-07 09:52 README.txt
drwxr-xr-x 2 root root 4096 2010-10-07 10:25 conf/
drwxr-sr-x 6 root root 4096 2010-10-07 09:58 db/
-r--r--r-- 1 root root    2 2010-10-07 09:52 format
drwxr-xr-x 2 root root 4096 2010-10-07 09:52 hooks/
drwxr-xr-x 2 root root 4096 2010-10-07 09:52 locks/
となってます。
この中のhooksってのがフックスクリプト格納dir。

このdirの中を見てみると...
e.g.)
> cd hooks
> ll
合計 36
-rw-r--r-- 1 root root 2000 2010-10-07 09:52 post-commit.tmpl
-rw-r--r-- 1 root root 1663 2010-10-07 09:52 post-lock.tmpl
-rw-r--r-- 1 root root 2322 2010-10-07 09:52 post-revprop-change.tmpl
-rw-r--r-- 1 root root 1592 2010-10-07 09:52 post-unlock.tmpl
-rw-r--r-- 1 root root 3488 2010-10-07 09:52 pre-commit.tmpl
-rw-r--r-- 1 root root 2410 2010-10-07 09:52 pre-lock.tmpl
-rw-r--r-- 1 root root 2796 2010-10-07 09:52 pre-revprop-change.tmpl
-rw-r--r-- 1 root root 2100 2010-10-07 09:52 pre-unlock.tmpl
-rw-r--r-- 1 root root 2830 2010-10-07 09:52 start-commit.tmpl

こいつらはトリガ毎のテンプレートfile。
コピーして、拡張子とっぱらって、実行権限を付けて使う。

一応、各fileとその実行トリガを表にしとく。
CheckIn時実行される
ファイル名 実行トリガ
start-commit
pre-commit
post-commit
トランザクション作成前に実行
CheckIn直前に実行
CheckIn直後に実行
属性変更時時実行される
ファイル名 実行トリガ
pre-revprop-change
post-revprop-change
属性変更直前に実行
属性変更直後に実行
ロック取得時実行される
ファイル名 実行トリガ
pre-lock
post-lock
ロック取得直前に実行
ロック取得直後に実行
ロック解放時実行される
ファイル名 実行トリガ
pre-unlock
post-unlock
ロック解放直前に実行
ロック解放直後に実行

で、こんな名前のfileを『/var/svn/test_repos/hooks/』に格納すれば、それぞれの状況をトリガにスクリプトを実行してくれる。
で、実行結果が0なら処理を続行、0以外なら処理を中断してくれる。

で、この時...作成したスクリプトに実行権限を与えるのを忘れないように...
わしゃぁ忘れとって、ハマリました。(ノД`)

e.g.)実行権限を付与し忘れるとこうなる。
/var/svn/test_repos/hooks$ ll
-rw-r--r-- 1 root root    0 2010-10-09 00:01 start-commit
の時、CheckInしようとすると...
> sudo svn ci -m 'a new test source.'
svn: コミットに失敗しました (詳しい理由は以下のとおりです):
svn: コミットが start-commit フックによって妨げられました (終了コード: 255) 。出力はありません。
と、怒られます。
『終了コード: 255』を見たらpermissionのことを思い出してあげてください。(ノД`)

今回はコミット時のコメントを必須にしたいので『pre-commit』を利用する。
このfileはscriptであればなんでも良いのでシェルスクリプト、perl、pythonなどが利用できる。
豚はperlもpythonもrubyも書けないので...orz
つたないシェルスクリプトで作成してみる。

e.g.)pre-commit
#!/bin/sh

#repositoryのpath
REPOS="$1"
#transaction名
TXN="$2"

#svnlookを使ってCheckIn時のcommentを取得
SVNLOOK=/usr/bin/svnlook
COMMENT=`${SVNLOOK} log -t "${TXN}" "${REPOS}"`

#comment文字数取得
WC=${#COMMENT}

#commentの入力が無い場合
if [ ${WC} -eq 0 ]; then
  echo "[Comment NG] Comment is required." >& 2
  exit 1
fi

#CheckInを許可
exit 0

こんな感じでok。
簡単に言えば、CheckIn時のコメント文字列取得してその文字数が『0』だったらダメよ。って判定しとる。

もしコメントの書式を統一したかったら、ここのcheckをちょっと厳しくしてやればOK。
CheckIn時のコメントフォーマットを強制する』を参考にして下さい。



更新日: 2019年08月08日 (木) 08時32分03秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
ウィキ募集バナー