読者です 読者をやめる 読者になる 読者になる

post-commitを利用して自動的にレビューリクエストを作成する

ReviewBoard Subversion

Subversionのpost-commitフックを利用してReview Boardのレビューリクエストを自動的に作成する。

#!/bin/sh
#  /var/lib/svn/myrepository/hooks/post-commit

export LANG="en_US.UTF-8"

REPOS="$1"
REV="$2"
REVPREV=`expr $REV - 1`

svnauthor=`svnlook author $REPOS rev $REV`
svnlog=`svnlook log $REPOS rev $REV`
svnlogfirst=`echo $svnlog | head -n1`

/usr/bin/svn diff -r $REVPREV:$REV file:///var/lib/svn/myrepository | /usr/bin/post-review \
  --publish \
  --username=reviewboard \
  --password=pass \
  --submit-as=$svnauthor \
  --target-groups=default \
  --diff-filename=- \
  --server=http://reviewboard.example.com \
  --repository-url=file:///var/lib/svn/myrepository \
  --description=$svnlog \
  --summary="(project_name:$REV) $svnlogfirst"
  • reviewboardというユーザーをReview Board側に作成済み
    • (--username=reviewboard)
  • Subversionのコミットユーザーに対応するユーザーをReview Board側に作成済み
    • (--submit-as=$svnauthor)
  • Subversionレポジトリは /var/lib/svn/myrepository
    • (--repository-url=file:///var/lib/svn/myrepository)
  • Reveiew Boardは http://reviewboard.example.com
  • レビューリクエストは投稿と同時に公開
    • (--publish)
  • 投稿と同時にdefaultというグループをレビューワーに指定
    • (--target-groups=default)

post-reviewはそんなに賢くないからもう少し丁寧にエラー処理をしなくてはいけないかもしれないが*1、基本は上記の通りで大丈夫だと思う。

最初レポジトリにアクセスする公開鍵をSubversionのpost-commitフックにどうやって渡そうか悩んでいて、post-commitフックがあるサーバーとレポジトリがあるサーバーは同一なんだからfileスキームでアクセスすればよいということに気が付くまで数時間かかった。

*1:例えばdiffのサイズが0の場合など