Subversion+svkでらくらく分散リポジトリ

第2回  SubversionとBTSの連携

この記事を読むのに必要な時間:およそ 6 分

Tracチケットの自動クローズ

開発サイクルの中では,バグを修正するとSubversionに適切なコメントと一緒にソースコードをコミットします。あわせて,対応するチケット(バグ)にも同じようなコメントを追加してチケットを閉じることが多いです。同じような作業を2回行なうことはプログラマの美徳に反します。同じことを2回繰り返さないために,TracにはSubversionのコミットと同時にチケットを自動的にクローズする機能があります。この処理は,Subversionのpost-commitで行ないます。

まず,Ubuntu Linuxでは,Tracのチケットの状態を変更するスクリプトが/usr/share/doc/trac/contrib/trac-post-commit-hook.gzにあります。これを展開します。

$ sudo gunzip /usr/share/doc/trac/contrib/trac-post-commit-hook.gz

次にSubversionのリポジトリのpost-commitを編集します。/var/lib/svn/MyProject/hooks/post-commitは次のようになります。

#!/bin/sh

REPOS="$1"
REV="$2"

export LANG=ja_JP.UTF-8
LOG=`/usr/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
TRAC_ENV='/var/lib/trac/MyProject'
TRAC_URL='http://localhost/trac'

/usr/bin/python /usr/share/doc/trac/contrib/trac-post-commit-hook \
  -p "$TRAC_ENV"  \
  -r "$REV"       \
  -u "$AUTHOR"    \
  -m "$LOG"       \
  -s "$TRAC_URL"

ファイルを編集後,ファイルのオーナーを変更して実行権限を与えます。

$ sudo chown www-data /var/lib/svn/MyProject/hooks/post-commit
$ sudo chmod u+x /var/lib/svn/MyProject/hooks/post-commit

これで準備ができました。Subversionへのコミット時のログを所定の書式で記述すれば,チケットの状態を変更できます。書式は単純で次のようになっています。

  • command #チケット番号
  • command #チケット番号, #チケット番号
  • command #チケット番号 & #チケット番号
  • command #チケット番号 and #チケット番号

コマンドは次の2種類あります。

  • チケットを閉じる : fixes, closes
  • チケットにコメントを追加 : references, refs, addresses, re

チケットを閉じる場合は,次のようにコミットログを記述します。

typoでした。 fixes #10

チケットにコメントを追加する場合は,次のようにコミットログを記述します。

この修正を試してみてください。 refs #10

また,複数のチケットを同時に閉じて,別の関連バグにコメントを追加できます。

typoでした。 refs #5 はこのバグに関連しているかも知れません。 Fixes #10, #20

これで,チケット番号10と20のチケットは自動的に閉じて,チケット番号5のチケットにはコメントが追加されます。

他のBTSからTracへの移行

/usr/share/doc/trac/contribのディレクトリの下には,trac-post-commit-hook以外に複数のスクリプトがあります。bugzilla2trac.pyはbugzillaからTracへの移行ツールです。sourceforge2trac.pyはSourceForgeのBTSをTracに移行できます。http://trac.edgewall.org/wiki/TracImportには,他のBTSからTracへ移行する方法がまとめられています。ただし,バージョンの違いによりスクリプトがそのままでは動作しないことがあります。また,独自のフィールドの追加などカスタマイズを行なっている場合,すべてのデータがインポートできないケースがあります。移行スクリプトはTracと同様にPythonで書かれており,比較的読み易いコードになっているため手を入れるのはそれほど難しくありません。もし,データのインポートがうまくいかない場合は,これを機会にPythonに挑戦してみてはどうでしょうか?

他のBTSとSubversion

Tracの登場以降,他のバグトラッキングシステムでもバージョン管理システムとの連携が活発に行なわれるようになりました。オープンソースのBTSの代表的存在だったBugzillaも周辺環境と組み合わせることで連携することができますhttp://sean-janus.optionpc.com/me/software/bugtraq/http://oss.segetech.com/bugzilla-svn-wiki.html)⁠

筆者の勤務先では以前,Mantisを使っていました。当初はバージョン管理システムとの連携はプラグインとして提供されていましたが,Version1.1(まもなくリリースされます)からは標準機能として提供されるようです。また,バージョン管理システムとの統合以外にもレポート機能など非常に機能が豊富です。プラグインの仕組みにより,さらに機能も拡張できます。

著者プロフィール

大谷弘喜(おおたにひろき)

アリエルネットワーク株式会社所属。P2PアプリケーションやWebアプリケーションの設計,開発。Python大好き。

コメント

コメントの記入