簡単な構造
SVNからは、コミット後(post-commit hook)に、Tracに対して「コミットあったよー。」という連携をします。(trac-adminによるchangeset連携)
Tracは、連携を受けると、対応するsvnを確認して前述のプラグインを走らせることで、必要な対応を行います。
ここで、コメント内容(tracプラグイン用のコマンド:refsとか)はTracがsvnを参照して理解するので、先にTracにsvnリポジトリを登録しておく必要があります。
つまり、対応する手順としてはこんな感じになります。
- Tracに(svn)リポジトリを登録
- svnのhookポイントを利用し、コミット後にTracへ連携(このとき、リポジトリ名とリビジョン番号を連携する)
- Tracは連携を受けて、対応するリポジトリ名のリポジトリのリビジョン番号を検索し、そのコメント内に書かれているコマンド(refsとか)を判断して実行
以下、それぞれの具体的な内容を書きます。
おまけのおまけ:closeの停止とresolved対応
デフォルトでは上記プラグインが持っている機能は
- チケットにリポジトリのコメントを連携する
- チケットをクローズする
ですが、今回対応したケースでは、チケットクローズはマネージャがしたいので、勝手にクローズされては困ったりしました。そうじゃなくてステータスをresolvedにはしたい。困った困った。
ということで、プラグイン書き換えました。
vi /usr/local/lib/python2.6/dist-packages/Trac-0.12.2.ja1-py2.6.egg/tracopt/ticket/commit_updater.py
def cmd_close(self, ticket, changeset, perm):
if not self.check_perms or 'TICKET_MODIFY' in perm:
ticket['status'] = 'resolved' <== ここ
if not ticket['owner']:
ticket['owner'] = changeset.author
これでステータス変更対象が close じゃなくて resolved になりました。
あと、デフォルトではこのチケットステータス変更用のコマンドが「close」とかで気持ち悪いので、trac.iniにこんな感じで追加。
commit_ticket_update_commands.close = resolved resolve solve fix fixed fixes
関数名も変数名も close で多少気持ち悪いけど、Core ライブラリを必要以上にいじるのも気が引けるし、こんなもんでしょ。