ss-2010-01-07-01 on Flickr

はじめに

年末年始でSubversionのリポジトリを引越したり,BTSな開発脳を鍛えるべく,Tracをセットアップしたりしているissmです.

昨晩,ふと思い立ったのと勉強もかねて,Tracのプラグイン「Revtree」を入れてみました.

以下,その経緯をだらだらと書いていきます.

環境

放置していたThinkpad R32にUbuntu 9.10を入れて動かしています.

Revtreeプラグインについて

Revtreeは,Subversionリポジトリにおけるリビジョンの遷移とか派生状況とかをグラフィカルに表示してくれたりする,Tracのプラグインです.

以下,引用をいくつか.

概要

This plugin renders a graphical representation of the repository.

The plugin collects the repository’s revisions and rebuilds the branches based on the names of the files changed in each revision.

Filters can be used to choose which branches and which revisions are to be displayed.

Each depicted changeset is a clickable item that redirects the browser to the appropriate changeset view.

Whenever the mouse cursor is hovered over a revtree changeset, the browser opens a tool tip box that shows the revision number, the author and the date of the revision along with the wiki-formatted log message.

The plugin also shows branch cloning/tagging operations, and can be extended to render other kinds of operations such as merging.
RevtreePlugin – Trac Hacks – Plugins Macros etc. – Trac

インラインSVGに対応いているブラウザが必要

the RevtreePlugin generates inlined SVG.
SVG is only supported on modern browsers
inlined SVG means that the plugin generates XHTML+SVG data, which are only supported by a few browsers. Many browsers that support SVG do not accept inlined SVG. Checkout the following section for a non-exhaustive list of supported browsers.
RevtreePlugin – Trac Hacks – Plugins Macros etc. – Trac

「モダンな」ブラウザなら大丈夫そうです.

インストール

同ページを参考に作業を進めます.

ソースコードを取得する

% wget "http://trac-hacks.org/changeset/latest/revtreeplugin?old_path=/&filename=revtreeplugin&format=zip" -O revtreeplugin.zip
% unzip revtreeplugin.zip
% ls -l revtreeplugin
合計 12
drwxr-xr-x 4 iwata 4096 2010-01-07 03:00 0.10
drwxr-xr-x 8 iwata 4096 2010-01-07 03:01 0.11
drwxr-xr-x 5 iwata 4096 2010-01-07 03:00 0.12

現在入れているTracのバージョンが「0.11.5.ja1」なので,それに見合ったディレクトリに入ります.

% cd revtreeplugin/0.11

なんだかパーミッションが000なファイルが見られました.

% ls -l
合計 20
drwxr-xr-x 5 iwata 4096 2010-01-07 11:15 enhancers
drwxr-xr-x 3 iwata 4096 2010-01-07 11:15 hooks
drwxr-xr-x 4 iwata 4096 2010-01-07 11:15 revtree
---------- 1 iwata   51 2006-12-05 01:43 setup.cfg
---------- 1 iwata 1503 2008-11-19 19:12 setup.py
% tree -p | head -n 20
.
|-- [drwxr-xr-x]  enhancers
|   |-- [drwxr-xr-x]  logenhancer
|   |   |-- [drwxr-xr-x]  logenhancer
|   |   |   |-- [----------]  __init__.py
|   |   |   `-- [----------]  enhancer.py
|   |   |-- [----------]  setup.cfg
|   |   `-- [----------]  setup.py
|   |-- [drwxr-xr-x]  mergeenhancer
|   |   |-- [drwxr-xr-x]  mergeenhancer
|   |   |   |-- [----------]  __init__.py
|   |   |   `-- [----------]  enhancer.py
|   |   |-- [----------]  setup.cfg
|   |   `-- [----------]  setup.py
|   `-- [drwxr-xr-x]  mergeinfoenhancer
|       |-- [drwxr-xr-x]  mergeinfoenhancer
|       |   |-- [----------]  __init__.py
|       |   `-- [----------]  enhancer.py
|       |-- [----------]  setup.cfg
|       `-- [----------]  setup.py

ので,テキトーにパーミッションを付加しました.

% chmod -R 755 *

セットアップスクリプトを実行する

入ったディレクトリ直下にあるsetyp.pyを,bdist_egg引数をつけて実行します.

% python setup.py bdist_egg

eggファイルをコピーする

セットアップスクリプトが無事終了したら,distディレクトリ以下にeggファイルができるので,これを,グローバルもしくはプロジェクトのプラグインディレクトリに放り込みます.

% cp dist/TracRevtreePlugin-0.6.3dev-py2.6.egg <pugin_directory>

設定

次のような内容をtrac.iniに追記します.

[trac]
mainnav = wiki,timeline,revtree,roadmap,browser,tickets,newticket,search
 
[components]
revtree.* = enabled
 
[revtree]
branch_re = ^(?P<branch>branches/[^/]+|trunk|tags)(?:/(?P<path>.*))?$
trunks = trunk
scale = 1.0
revbase = 1
abstime = True
style = compact
contexts =

プロジェクトごとに書くのもアレなので,グローバルなtrac.iniに書いておくといいかもです.

しかし,私の環境では,グローバルな設定を行っているtrac.ini,というかそれらしいディレクトリが見当たりませんでした.

グローバルな設定は Environment 固有の設定とマージされます。ローカルの設定はグローバルの設定を上書きます。グローバルな設定ファイルは以下のように指定します:

[inherit]
file = /usr/share/trac/conf/trac.ini
Note: 新しいプロジェクトを作る時に trac-admin の initenv コマンドに –inherit=/path/to/global/options オプションを追加することで、グローバル設定ファイルを指定することができます。 オプションを追加せずにプロジェクトを作成した場合でも、新しい Environment でグローバル設定ファイルを使用することができます。 新しく作成された conf/trac.ini ファイルを編集して、グローバルファイルの設定で上書きしたいエントリを削除すれば、 新しい Environment でグローバル設定ファイルを使用することができます。

この中にグローバルなtrac.iniを入れておきます.

プラグインについても同様にしておくとよさげですね.

% sudo mkdir -p /usr/local/trac/plugins

で,プロジェクトのtrac.iniを修正します.

[inherit]
file = /usr/local/share/trac/conf/trac.ini
plugins_dir = /usr/local/share/trac/plugins
templates_dir =

Apacheの再起動

Trac の設定は /conf/ にある trac.ini というファイルを編集して行います。変更した内容は通常、即座に反映されますが、 [components] セクションや [logging] セクションへの変更では Web サーバを再起動する必要があります。また、グローバルな設定ファイルを新しく作成した直後も Web サーバを再起動しなければなりません。

表示を確認する

設定したプロジェクトのTracにアクセスしてみます.

あれ,変化がありません><

権限の追加

試しに,パスにrevtreeをつけて再度アクセスしてみたところ,次のようなエラーが(次図).

「REVTREE_VIEW」という権限が必要なんですね.確認してみます.

% trac-admin <projectenv> permission list
 
User           Action
------------------------------
anonymous      BROWSER_VIEW
anonymous      CHANGESET_VIEW
anonymous      FILE_VIEW
anonymous      LOG_VIEW
anonymous      MILESTONE_VIEW
anonymous      REPORT_SQL_VIEW
anonymous      REPORT_VIEW
anonymous      ROADMAP_VIEW
anonymous      SEARCH_VIEW
anonymous      TICKET_VIEW
anonymous      TIMELINE_VIEW
anonymous      WIKI_VIEW
authenticated  TICKET_CREATE
authenticated  TICKET_MODIFY
authenticated  WIKI_CREATE
authenticated  WIKI_MODIFY
 
 
Available actions:
 BROWSER_VIEW, CHANGESET_VIEW, CONFIG_VIEW, EMAIL_VIEW, FILE_VIEW,
 LOG_VIEW, MILESTONE_ADMIN, MILESTONE_CREATE, MILESTONE_DELETE,
 MILESTONE_MODIFY, MILESTONE_VIEW, PERMISSION_ADMIN, PERMISSION_GRANT,
 PERMISSION_REVOKE, REPORT_ADMIN, REPORT_CREATE, REPORT_DELETE,
 REPORT_MODIFY, REPORT_SQL_VIEW, REPORT_VIEW, REVTREE_VIEW, ROADMAP_ADMIN,
 ROADMAP_VIEW, SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP,
 TICKET_CREATE, TICKET_EDIT_CC, TICKET_EDIT_DESCRIPTION, TICKET_MODIFY,
 TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE,
 WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW

確かに「REVTREE_VIEW」という権限はありません.また,同権限が「Available」ということもわかります.

ということで,同権限を追加します.ログインユーザ全員に与えておけばいいですかね.

% trac-admin <projectenv> permission add authenticated REVTREE_VIEW

再度確認してみます.

% trac-admin <projectenv> permission list
 
User           Action
------------------------------
anonymous      BROWSER_VIEW
anonymous      CHANGESET_VIEW
anonymous      FILE_VIEW
anonymous      LOG_VIEW
anonymous      MILESTONE_VIEW
anonymous      REPORT_SQL_VIEW
anonymous      REPORT_VIEW
anonymous      ROADMAP_VIEW
anonymous      SEARCH_VIEW
anonymous      TICKET_VIEW
anonymous      TIMELINE_VIEW
anonymous      WIKI_VIEW
authenticated  REVTREE_VIEW
authenticated  TICKET_CREATE
authenticated  TICKET_MODIFY
authenticated  WIKI_CREATE
authenticated  WIKI_MODIFY
 
 
Available actions:
...

無事追加されました.

再度表示を確認する

再度表示を確認してみます.

ss-2010-01-07-02 on Flickr

おぉ,メニューに「Rev Tree」が追加されました.グラフも表示されてます.

ちょっと気になる

こんな警告が出ますね.

/usr/local/share/trac/plugins/TracRevtreePlugin-0.6.3dev-py2.6.egg/revtree/svgview.py:17: DeprecationWarning: the md5 module is deprecated; use hashlib instead

Pythonについては無知なので,解決策がよくわかりません><

おわりに

以上,Revtreeプラグインを入れてみた経緯について書きました.この調子で(?),次のまとめを参考に,他の実用的なプラグインも追加してみます.

まぁそれ以前に,Trac開発脳を鍛えるのが先決ですが...

こちらもあわせてどうぞ

コメントをどうぞ