豚吐露@wiki
CheckIn時のコメントを必須にしたい
最終更新:
ohden
-
view
環境
Ubuntu 8.10
SubVersion 1.6.6
Ubuntu 8.10
SubVersion 1.6.6
CheckIn時のコメント内容に対する処理は『フックスクリプト』を用いて実行する。
作成したリポジトリへ移動し、中を見てみると...
e.g.)
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。
この中のhooksってのがフックスクリプト格納dir。
このdirの中を見てみると...
e.g.)
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以外なら処理を中断してくれる。
で、実行結果が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のことを思い出してあげてください。(ノД`)
『終了コード: 255』を見たらpermissionのことを思い出してあげてください。(ノД`)
今回はコミット時のコメントを必須にしたいので『pre-commit』を利用する。
このfileはscriptであればなんでも良いのでシェルスクリプト、perl、pythonなどが利用できる。
豚はperlもpythonもrubyも書けないので...orz
つたないシェルスクリプトで作成してみる。
この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』だったらダメよ。って判定しとる。
簡単に言えば、CheckIn時のコメント文字列取得してその文字数が『0』だったらダメよ。って判定しとる。
もしコメントの書式を統一したかったら、ここのcheckをちょっと厳しくしてやればOK。
『CheckIn時のコメントフォーマットを強制する』を参考にして下さい。
『CheckIn時のコメントフォーマットを強制する』を参考にして下さい。
更新日: 2019年08月08日 (木) 08時32分03秒