2009年7月6日月曜日

Trac:ワークフローをカスタマイズする

Tracのデフォルトのワークフローは僕にとってあまり直感的ではないのでカスタマイズしてみる。

  • 着手するまでは課題を修正できる。

  • 着手したら解決するだけ。

  • 解決した課題は終了するか、差し戻しにする。


だけのワークフローにしよう。
Tracプロジェクトディレクトリ/conf/trac.iniを編集する。

[ticket-workflow]
revise = new,revised -> revised
revise.name = 課題を修正する
revise.permissions = TICKET_MODIFY

accept = new,revised,reopened -> accepted
accept.name = 着手する
accept.operations = set_owner_to_self
accept.permissions = TICKET_MODIFY

reopen = resolved,closed -> reopened
reopen.operation = del_resolution
reopen.permissions = TICKET_CREATE
reopen.name = 差し戻す

resolve = accepted -> resolved
resolve.name = 解決にする
resolve.operations = set_resolution
resolve.permissions = TICKET_MODIFY

close = resolved -> closed
close.name = 終了にする
close.permissions = TICKET_MODIFY


カスタマイズしたワークフローを画像で確認する。


trac.iniファイルをworkflow_parser.pyで処理して.dotファイルを作成してからGraphvizのdotコマンドでdotファイルを処理し画像ファイルに変換することで視覚化出きるそうだ。

workflow_parser.pyでtrac.iniファイルを処理し.dotファイルを作成する。

Trac-0.11.2.1.ja1/contrib/workflow/workflow_parser.py trac.ini
...
UnicodeEncodeError: 'ascii' codec can't encode ...


どうやらUTF-8でエンコードした日本語をasciiとして扱っているみたい。
http://trac.edgewall.org/ticket/6930 によるとworkflow_parser.py を修正すれば良いようだ。


import locale, codecs を追加し
sys.stdout.write(''.join(digraph_lines))

sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);
sys.stdout.write(''.join(digraph_lines))
に修正してから動作確認。



$ workfloe_parser.py trac.ini > trac.dot

今度は無事dotファイルが作成できたようだ。
Graphvizのdotコマンドでdotファイルを処理し画像ファイルに変換する。

$ dot -T png < trac.dot > trac.png




いいじゃないですか!!