Trac月のプラグインを全部入れてみる(その1)

Trac月

最近知ったんですがTrac月というWindows環境でめっちゃお手軽にTracを使えるものがあるということを知って、使ってました。
  これが本当に簡単で、しかも高機能。
  便利なプラグインもいっぱい入ってる。
  ただ如何せん、ApacheSubversionも一緒にインストールしてしまうので、何かと他のアプリケーションが動かんかったり。。。
  で、やっぱりさくらのを使うしかないという結論に至ったので、練習とも思ってさくらのTracTracLightningと同じプラグインを入れてみることにします。
  ちなみに以下、trac-adminでinitentしたディレクトリを$TRAC_HOMEとします。

AddCommentMacro

Wikiのコメント機能追加できるようになります。
  詳しくはここ

$ cd $HOME/local/src/
$ wget http://pypi.python.org/packages/2.4/T/TracAddCommentMacro/TracAddCommentMacro-0.2-py2.4.egg#md5=5dae211117baaeb56a681161875bdd30
$ cp TracAddCommentMacro-0.2-py2.4.egg $HOME/svn/trac/plugins/
  • TracMacroPost

AddCommentMacroと依存関係のあるプラグインらしい。
  フォームからPOSTできるようになる。
   ここからzipファイルをダウンロードしてSCPかなんかでサーバにあげる。

$ cd $HOME/local/src
$ tar zxvf macropostplugin.zip
$ cd macropostplugin/0.10/                                   # trac0.1.0系を使っているので
$ python setup.py bdist_egg                    # eggファイル作成
$ cp dist/TracMacroPost-0.1-py2.4.egg $TRAC_HOME/plugins/    # pluginディレクトリにコピー
$ vi $TRAC_HOME/conf/trac.ini
------------------------------------------------------------------
[components]
.....
.....
macropost.* = enabled
addcomment.* = enabled
------------------------------------------------------------------
使い方

TracWikiにて、

[[AddComment]]

ちなみに以下のようにすると、Wikiの変更権がない anonymousユーザでもコメント書き込みができるそうです。

[[AddComment(appendonly)]]

http://d.hatena.ne.jp/yuum3/20071014/1192341888より。

TracCompleteUser

詳しくはここ
  関係者(cc)、担当者(assign_owner)のユーザIDの入力補完をサポートしてくれます。
  まず、http://pypi.python.org/pypi/python-json/3.4からpython-jsonをダウンロードして、サーバにアップ。

$ cd $HOME/local/src
$ cp -R json-py-3_4/ $HOME/local/lib/python2.4/site-packages/       # json-py-3_4は自分で作って、解凍したファイルを入れる

次にTracCompleteUserを取ってくるわけですが、さくらは外部からチェックアウトできないようになっているんで、TortoizeSVNとかを使ってローカルにチェックアウトしてサーバにアップ。 コマンドにすると、以下のような感じでしょうか。

svn co http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/completeuserplugin/branches/0.10 completeuserplugin/
$ cd $HOME/local/src
$ cd completeuserplugin/
$ python setup.py bdist_egg
$ cp dist/TracCompleteUserPlugin-0.1_r57-py2.4.egg $TRAC_HOME/plugins/
  • DecoratorPlugin

詳しくはここ
  TracCompleteUserと依存関係のあるプラグインだそうです。
  先ほどと同じように、TortoizeSVNで取ってきます。コマンドだと以下のような感じ。
  これをサーバにアップ。

svn co http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/decoratorplugin/branches/0.10 decoratorplugin/
$ cd $HOME/local/src
$ cd decoratorplugin/
$ python setup.py bdist_egg
$ cp dist/TracDecoratorPlugin-0.1-py2.4.egg $TRAC_HOME/plugins/
$ vi $TRAC_HOME/conf/trac.ini
------------------------------------------------------------------
[decorator]
calendar_fields=due_assign,due_close
------------------------------------------------------------------
使い方

どうもTracCompleteUserはjson-pythonの入れ方が悪いのか動かず。。。
  でも、そんなことよりもDecoratorPluginがスバラシイ!!
  チケットを登録するときに入力補完とかしてくれるんですが、中でもカレンダー形式の日付入力補完が最高です。
  ただ、ただ、、、ひたすら重い。マジでこれじゃ使い物にならん。。。

ということで以前のtracの高速化を真似て何とかならんもんかなあ、と模索したところ、なぜかいけました。笑
  まず、あの高速化の仕組みがどこで行われているのか調べたところ、どうやらchrome.pyということが判明。
  で、その仕組みというのがどうやらパスがcommon/で始まるCSSやJSファイルを、trac.iniで指定したhtdocs_locationから取るよう指定している模様。
  ということで、同じようにdecorator/で始まるCSSやJSファイルも同じようにhtdocs_locationから取るようにif文を増やしてやりました。

$ cp $HOME/local/lib/python2.4/site-packages/trac/web/chrome.py $HOME/local/lib/python2.4/site-packages/trac/web/chrome.py.default
$ vi $HOME/local/lib/python2.4/site-packages/trac/web/chrome.py
add_stylesheetとadd_scriptを少し改造。
------------------------------------------------------------------
--- chrome.py.default   Sun May 18 04:02:18 2008
+++ chrome.py   Sun May 18 05:03:46 2008
@@ -49,6 +49,8 @@
     if filename.startswith('common/') and 'htdocs_location' in req.hdf:
         href = Href(req.hdf['htdocs_location'])
         filename = filename[7:]
+    elif filename.startswith('decorator/') and 'htdocs_location' in req.hdf:
+        href = Href(req.hdf['htdocs_location'])
     else:
         href = Href(req.base_path).chrome
     add_link(req, 'stylesheet', href(filename), mimetype=mimetype)
@@ -58,6 +60,8 @@
     if filename.startswith('common/') and 'htdocs_location' in req.hdf:
         href = Href(req.hdf['htdocs_location'])
         filename = filename[7:]
+    elif filename.startswith('decorator/') and 'htdocs_location' in req.hdf:
+        href = Href(req.hdf['htdocs_location'])
     else:
         href = Href(req.base_path).chrome
     href = href(filename)
------------------------------------------------------------------

$ cd $HOME/local/share/trac/htdocs/
$ ln -s $HOME/local/src/decoratorplugin/decorator/htdocs/ decorator

僕はtrac.iniのhtdocs_location = trac_commonとしているので、http://example.com/trac_common/decorator/....というようにCSSやJSファイルが静的に取得されるようになりました。
  ああ、これめっちゃ時間かかった。。。
  でもPython知識ゼロの僕がこういうことをできたのは非常にうれしいもんです。
  しかも、スーパー劇的に速くなりました。笑

一日で全て入れようと思ったんですが、高速化にかなり時間を持っていかれたので、あとのやつはまたの機会に。