2010-03-30

Tracのチケットに時間を入れる

目前の課題はともかく、今後のことを考えるとやっぱ時間の計測は必要だなと思ったので、以下を参考にとりあえず数字を入れる場所を用意することにした。

TracTicketsCustomFields – The Trac Project

入れるだけなら以下のような記述を conf/trac.ini に書けばイケる。

[ticket-custom]
time_actual        = text
time_actual.format = text
time_actual.label  = 消費時間(h)

time_expect        = text
time_expect.format = text
time_expect.label  = 予想時間(h)

これで ticket の末尾に予想時間、消費時間がいい感じに追加される。期待通りに「予想時間」の方が「消費時間」よりも前に出てくる感じになるんだけど、なぜかは分からない。単純に key の辞書順に並んでるなら消費時間の方が前に出てきそうなもんなんだけど。

試しに ticket を作ったら ticket_custom という table に以下のようなデータが作られた。

select * from ticket_custom;
ticketnamevalue
111time_expect1
111time_actual 

※ ここで 111 は ticket ID, 1 は予想時間を1時間と入力した値。

ははぁ、なるほど。

View Tickets の query を書き直さないと実際には嬉しくないかもしれない。一応やってみたけど、これ全部の query に反映させるのはホネだし、なんかうまいこと設定ファイルかコマンドラインで変更できるのかなぁ?

SELECT p.value AS __color__,
   milestone||' Release' AS __group__,
   id AS ticket, summary, component, version, t.type AS type,
   owner, status,
   time AS created,
   changetime AS _changetime, description AS _description,
-  reporter AS _reporter
+  reporter AS _reporter,
+  e.value as expected,
+  a.value as actual
  FROM ticket t, enum p
+   LEFT OUTER JOIN ticket_custom e ON (t.id = e.ticket AND (e.name = 'time_expect'))
+   LEFT OUTER JOIN ticket_custom a ON (t.id = a.ticket AND (a.name = 'time_actual'))
  WHERE status <> 'closed'
AND p.name = t.priority AND p.type = 'priority'
  ORDER BY (milestone IS NULL),milestone, p.value, time

なんか。なんか気持ちよくない。SQLも得意じゃないので本当にこうなの?っていうすごくモヤモヤした感じ。

About

例によって個人のなんちゃらです