Trac の SCM に Subversion を使ってる人の多くは、Subversion のコミット・ログを Trac のチケット・コメントに自動反映させる hook を利用していることと思う。
これを、Git でも使えるようにしてみた。
Git Plugin
まず Trac で Git を使うようにするには、GitPlugin for Trac をインストールする必要がある。ここら辺のウェブ・ページを参考にしてインストールされたし。
git-post-receive-hook の入手
Git 用の hook スクリプトを github で公開している。まずは、そちらで最新版を入手されたし。
$ git clone git://github.com/ataka/trac-git-post-receive-hook.git
一応、(2009-03-11 現在の) ソース・コードのコピーも置いておく。
#!/bin/sh # The original script is available at # http://trac-hacks.org/browser/timingandestimationplugin/branches/trac0.11/scripts/git-post-receive # # # An example hook script for the post-receive event # # This script is run after receive-pack has accepted a pack and the # repository has been updated. It is passed arguments in through stdin # in the form # <oldrev> <newrev> <refname> # For example: # aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master # # see contrib/hooks/ for an sample, or uncomment the next line (on debian) # TRAC_ENV="/var/trac/YOURPROJECT" POST_COMMIT="/usr/local/src/Trac-0.11.1.ja1/contrib/trac-post-commit-hook" LOG="/dev/null" echo "in git post commit: $TRAC_ENV" | cat >>$LOG while read oval nval ref ; do if expr "$oval" : '0*$' >/dev/null then git-rev-list --reverse "$nval" else git-rev-list --reverse "$nval" "^$oval" fi | while read com ; do echo "posting a comment to trac" | cat >>$LOG echo " *** $com" AUTHOR="$(git-rev-list -n 1 $com --pretty=format:%an | sed '1d')" \ MSG="$(git-rev-list -n 1 $com --pretty=medium | sed '1,3d;s:^ ::')" echo "author ... $AUTHOR" echo "msg ... $MSG" sleep 0.1 sudo -u www-data $POST_COMMIT \ -p "$TRAC_ENV" \ -r "$com" \ -u "$AUTHOR" \ -m "$MSG" \ echo "DONE posting a comment to trac" | cat >>$LOG done done echo "Done with trac commit hook: $TRAC_ENV" | cat >>$LOG exit 0
設定
git-post-receive-hook を手に入れたら、それをリモートの git リポジトリーの hook ディレクトリーに入れてやる。ここでは、リモート・リポジトリーが /git/foo.git にあるとして話を進めませう。
$ chmod +x git-post-receive-hook $ cp -p git-post-receive-hook /git/foo.git/hooks
次に、git-post-receive-hook で Trac の設定を行なう。具体的には、TRAC_ENV に trac project への path を、POST_COMMIT に trac-post-commit-hook への path を指定する。例えば、Trac Project を /trac/foo に置いていて、Trac を Ubuntu のパッケージからインストールしている場合は、次のように編集する。
TRAC_ENV="/trac/foo" POST_COMMIT="/usr/local/src/Trac-0.11.1.ja1/contrib/trac-post-commit-hook"
最後に、/git/foo.git/hooks/post-receive.sample を post-receive に名前を変更して、git-post-receive-hook を呼び出すようにする。
$ cd /git/foo.git/hooks $ cat post-receive.sample #!/bin/sh /git/foo.git/hooks/git-post-receive-hook $ mv post-receive.sample post-receive
post-commit じゃなくて、post-receive を使うことに注意。
設定は以上で終了。あとは、Subversion と同じやうにログが書くだけ。ローカル・リポジトリーからリモート・リポジトリーに git-push したタイミングで、Trac のチケットにログが反映されるようになる。
No comments:
Post a Comment