« Trac0.11b1&XmlRpcPlugin | Main | HD-DVD撤退? »

2008.02.17

Trac&Subversion連携

 TracとSubversionを組み合わせて使用している場合(Plugin等で環境を構築すれば、他のバージョン管理システムでも使えると思いますが)、Subversionのコミットメッセージに#1234って感じのテキストを埋め込むことでChangeset(あるいはBrowser)から該当するチケットへのリンクが、また、チケットのコメントにr2345って感じのテキストを埋め込むことで、対応するChangesetへのリンクが自動的に生成されます。

 これを組み合わせることで、「あるチケットの修正の際にどの部分を修正したか」「この修正はどのチケットに基づくものか」といった追跡を容易に行うことができるようになります。
 もしかしたら、後日似たような不具合が発生した場合、「前回はどの部分を直したかなぁ・・・」って感じで、参考になったりするかもしれません(似たような不具合を発生させるな、というツッコミは不採用)。また、チケットの修正確認を行う際のコードレビューにも使えたりするかもしれません。

 BTSとバージョン管理システムを連携させて運用できるTracならではの機能ではありますが(もちろん、Trac以外でも同様の運用を行うことができるシステムは多々ありますが)、毎回リビジョン番号/チケット番号を意識しながらコメントを記入するのはちと面倒。というか、結構な確率で入れ忘れてしまいます(苦笑)。

 ってことで、Subversionのhookスクリプトと、bagtraqプロパティを組み合わせる設定を行ってみたので、そのメモ(クライアント側はSubversiveを使用)。
 なお、参考にしたのは、以下のサイトなど。
TortoiseSVNやSubclipseとチケットを連動 - discypus
TotoriseSVNとTracの連携 - HirobeのHack倉庫
Subversionコミット時メール送信とTracチケットの自動クローズ - Weboo! Returns.
バージョン管理に便利なSubversiveプラグイン

 ざっくりとまとめると、以下のような感じ。

trac-post-commit-hookをコピー
 Tracのアーカイブに含まれているtrac-post-commit-hookスクリプト(contribフォルダ内にあります)を、連携を行うSubversionリポジトリのhooksフォルダ内にコピー。

プロパティをセット
 連携対象とするリソース(多くの場合はソースファイルなど?)に対して、bugtraq:labelbugtraq:messagebugtraq:urlの3つのプロパティをセットする。他に、bugtraq:warnifnoissueのプロパティをtrueにセットしておくと、チケットIDの入力漏れを防ぎやすくなるので便利。
 bugtraq:messageプロパティの値は、チケットの運用スタイル(誰がどのタイミングでclosedにするか?)によっても異なってきますが、
・コミットメッセージ⇒TicketへのリンクのみでOK:(#%BUGID%)
・上記に加えて、Ticket⇒Changelogのリンクをコメントとして追記(Ticketのステータスはそのまま):(refs #%BUGID%)
・Ticket⇒Changelogのリンクを追記する際にTicketをクローズする:(fix #%BUGID%)
などが考えられるのではないかと。

 とりあえず、以下のようなテキストに反応するようです。

・ステータスはそのまま:addresses, re, references, refs, see
・Ticketをクローズする:close, closed, closes, fix, fixed, fixes

 なお、bugtraq:appendプロパティをtrueで追加すると、bugtraq:messageで生成されるテキストは入力したコメントの末尾に追加され、falseの場合はコメントの先頭に挿入されます。

Subversionのhookスクリプトを書き換え
 連携対象とするSubversionプロジェクトのpost-commitスクリプトを準備。

# mv post-commit.tmpl post-commit
# chmod a+x post-commit

 内容としては、
#!/bin/sh
REPOS="$1"
REV="$2"
export LANG=ja_JP.UTF-8
LOG=`/usr/local/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/local/bin/svnlook author -r $REV $REPOS`
/usr/local/bin/python ${REPOS}/hooks/trac-post-commit-hook \
-p "/var/tracdata/trac/(projectname)" \
-r "$REV" \
-u "$AUTHOR" \
-m "$LOG"

ってな感じ。

なお、${REPOS}/hooks/trac-post-commit-hook に関して、ファイルをフルパスで指定するとtrac-post-commit-hookスクリプトのコピーは不要です。

|

« Trac0.11b1&XmlRpcPlugin | Main | HD-DVD撤退? »

Subversion・Trac・etc.」カテゴリの記事

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference Trac&Subversion連携:

« Trac0.11b1&XmlRpcPlugin | Main | HD-DVD撤退? »