trac 0.12 のマルチリポジトリでrefs #1をうまく動かす Multi Repository Helper Plugin を作りました

Tracはバージョン0.12でマルチリポジトリに対応しています

設定はこんな感じですね。

  • Trac0.12の配布アーカイブ内にある contrib/trac-svn-hook スクリプトを適当な場所に配置する
    • この例では、/opt/trac-0.12/hooks としています。環境に合わせて読み替えます。
  • #{SVN_ROOT}/#{PROJECT}/hooks/post-commit を作成します
    • 環境変数TRAC_ENVにtracのプロジェクトディレクトリへのフルパスをコロン「:」区切りで複数指定します
    • 実行権も付与します(chmod +x)
#!/bin/sh
#
REPOS=$1
REV=$2

export TRAC_ENV=/var/www/html/trac012/proj1:/var/www/html/trac012/proj2
/opt/trac-0.12/hooks/trac-svn-hook $REPOS $REV


上記のように複数のTracプロジェクト(プロジェクトAとプロジェクトB)が同じSVNリポジトリリポジトリ1)を参照している場合に、困ったことがおきます

  • リポジトリ1でrefs #1とすると、プロジェクトAの1番のチケット、プロジェクトBの1番のチケットともにチケットにコミットログが関連してしまう

ふつう、チケットとタスクは1対1ですから、どちらかのプロジェクトの1番チケットに対してのタスクを行ってコミットしているはずですよね(たとえばプロジェクトAの1番チケットのタスクとして、このようにコミットする場合)
共通ライブラリ的なものは、別リポジトリになりがち(え、違いますか?すみません)とおもいますので、このようなことがおきてしまいがちと思います。

ということで、次のような書式のrefsを受け取った場合に、目的のプロジェクトのチケットにコメントを残すようにできるPluginを作りました

  • refs #projectA/1
    • リポジトリが複数のTracプロジェクトに関連している場合は、コミットコメントに、in [1/projectA]というように記述を追加して、さらにprojectAリポジトリのチェンジセット1にリンクする
      • [1/projectA] の記法はTrac 0.12がもともと持っている書式です

また、#projectA/1がリンクとして機能するようにもしています。

shibya-tracリポジトリに置かせていただきました。

インストールはソースをチェックアウトしてEGGファイルを作って、プラグイン保存ディレクトリに配置してください。

$ svn checkout http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/MultiRepositoryHelperPlugin/trunk/ multiRepositoryHelperPlugin
$ cd MultiRepositoryHelperPlugin/
$ python setup.py bdist_egg
$ cp dist/TracMultiRepositoryHelperPlugin-0.1-py2.4.egg /path/to/trac-plugindir

Trac0.12からはプラグインディレクトリが変わっていて/usr/share/tracとか無くなっています。
ですので、site-packages か、各プロジェクトのpluginsに入れてください。管理画面からアップロードできるようになっています。
また、EGGを配置したらTrac0.12の管理画面でプラグインを有効化します。


なお、次の制限があります。

  1. refs #プロジェクト名/チケット番号の書式のみの対応です
    1. 複数のチケットにリンクする場合は、とりあえずのところは refs #projectA/1 refs #projectB/5 などとrefsを省略せずに書いてください(refs #projectA/1, #projectB/5のような記載には対応していません)
  2. fixes #hoge/1というように、fixesにも対応していません

※参考にしたページ
http://coders.g.hatena.ne.jp/bellbind/20070420/p1
http://trac.edgewall.org/wiki/TracDev/PluginDevelopment
http://trac.edgewall.org/wiki/TracDev/ApiChanges/0.12#IRepositoryChangeListener