メイン

[Trac] チケットを階層化したい。

こんにちわ。ばたっちです。

tracのチケット便利なんだけど、階層化できないのが不便。

TracMasterTicketsというプラグインがあるようですが、バージョン0.11以上で対応。
現在、インタアクト社提供の日本語版(0.10.4)を使っているのでダメなようです。。orz

redMineはこの辺の問題を最初から考慮して作られているみたいですね。


とりあえず、カスタムチケットで関連チケットへのリンクを追加して、レポートで関連の閲覧をできるようにしてみました。

まずは、ticket-customに関連チケットのフィールドを追加します。


trac.ini
----
[ticket-custom]
related_tickets = text
related_tickets.label = 関連チケット

追加したら Apache再起動して設定を反映させます。

チケット編集画面にて「チケット属性を変更する」に「関連チケット」の項目が追加されるので、「#999」のようにチケット番号を記入します。複数ある場合は半角スペースで区切って記入します。

次に新規レポートを作成します。SQLはこんなカンジ。


SELECT t.id AS ticket, t.summary,
       (CASE t.status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
       t.resolution,
       t.time AS created, t.changetime AS modified,
       r.value AS description
  FROM ticket t
       LEFT OUTER JOIN ticket_custom r ON (t.id = r.ticket AND r.name = 'related_tickets')
  WHERE t.status IN ('new', 'assigned', 'reopened', 'closed')
  ORDER BY t.id DESC

ticket_customを JOIN して、値(チケット番号)を「description」に AS して表示しています。

こうしておくと、一覧表示で関連チケットのチケット番号が Wikiフォーマット扱いになって、リンクにしてくれます。

あとは相互リンクにしたり、チケット編集画面で関連チケットへのリンクを表示したりできるといいんだけどなぁ。(^^;


さっそく追記:

編集画面でリンク表示は簡単にできそうなのでいじってみました。
tracのソースにある web_ui.pyというファイルを以下のように変更します。


/path/to/python/lib/python2.?/site-packages/trac/ticket/web_ui.py
----
--- web_ui.py.orig      2007-05-01 18:00:28.000000000 +0900
+++ web_ui.py   2008-02-28 12:57:06.000000000 +0900
@@ -600,9 +600,11 @@
                 field['skip'] = True
             req.hdf['ticket.fields.' + name] = field
 
+        relation = "\n\nrelated " + ticket.values.get('related_tickets')
+
         req.hdf['ticket.reporter_id'] = reporter_id
         req.hdf['ticket.description.formatted'] = wiki_to_html(
-            ticket['description'], self.env, req, db)
+            ticket['description'] + relation, self.env, req, db)
 
         req.hdf['ticket.opened'] = format_datetime(ticket.time_created)
         req.hdf['ticket.opened_delta'] = pretty_timedelta(ticket.time_created)

Apache再起動すれば、チケット編集画面の「チケットの概要」に「related #999」のようにリンクが出るようになりました。

かなりやっつけ(しかもPython素人)ですが、できたのでまあいいか。A^^;

トラックバック

このエントリーのトラックバックURL:
http://pw.tech-arts.co.jp/cgi-bin/tamt32/mt-tb.cgi/69

コメント

TracLightningで試してみました。
しかしrelated_ticketsに何も入力されていないチケットではエラーが出てしまうようです。
relation = "\n\nrelated " + ticket.values.get('related_tickets')
となっているところをとりあえず
if ticket.values.get('related_tickets')==None:
relation = ""
else:
relation = "\n\nrelated " + ticket.values.get('related_tickets')
と修正することで動作するようになりました。
…こうなると親チケット、子チケットと分けてみたくなりますね。

コメントありがとうございます。
私も同じ問題に出会って修正したような気がします。

今、手元に環境がないのでどんな修正をしたのか正確には分からないんですが。。A^^;

親チケット、子チケット区別したいですね。その辺は 0.11以降のプラグインで考慮されるんですかね。(想像)

MasterTicketsPluginでは[ticket-custom]にblockedbyとblockingを追加して使うようになってました。
trac-0.11rc1-shuwaにいれてみて確認してみたのですが、Genshiをtrunkからとってこないとだめだとか、GraphVizPlugin自体がなぜか動作しない(設定がおかしいだけ?)のでつながりをグラフで見られないとかで、まだ現時点ではいまいちのような感じがしました。

0.11はまったく見たことないんですが、MasterTicketPluginはまだ不完全なんですか。。
グラフ出なくても、シンプルにチケットの親子が辿れればいいんですけどね。A^^;

すみません、言葉足らずでした。
ちょっとやっただけなので目についたことを書きましたが、
親子関係はしっかりしてるのではないかと思います。
子チケットが閉じないと親チケットが閉じれない
ようにもしてあるようです。

親から子への依存も考慮されているのですか。
それはそれで、がちがちな気も。。A^^;

個人的には、双方向のリンクを自動で作ってくれて、片方消したら相手側にも反映してくれるだけで十分かもしれないです。(^^;

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)