TracLightning用マルチリポジトリパッチ

trac0.12から追加となるマルチリポジトリ機能を
TracLightning2.1で追加できるよう、 http://trac.edgewall.org/wiki/MultipleRepositorySupport
を参考にパッチを作成しました。

短命だとは思います(いや短命であってほしい)が公開します。
(会社で使ってますが、とりあえずやりたいことはできているレベルです。
現在edgewallの方では既に0.12ベースとなっていますが、
比較が難しいので、こちらはそれ以前の0.11ベースだったころのものを
マージしてます。)

パッチはこちら。
<TracLightning-2.1rc1/TracLightning-2.1用>
http://sourceforge.jp/projects/shibuya-trac/wiki/patches%2FMultiRepos/attach/multirepos_TracLightning-2.1-1.zip
※09/03/05 タイムラインの表示部分に、マージミス(追加リポジトリの名前が出ずに
ただチェンジセットと表示されていた)があり修正。
※09/03/29 revisionlog.html修正。

<TracLightning2.2.3~2.2.5用>
http://sourceforge.jp/projects/shibuya-trac/wiki/patches%2FMultiRepos/attach/multirepos_TracLightning-2.2.3.zip
※09/05/27 [log:bbb]のようなlinkでエラーが出てたので再作成。
※09/05/28 古いpatchが入っていたので削除。
※09/06/26 各リポジトリのlogでchangesetを指定できるように、
revisionlog.htmlを修正。
※09/07/24 ロードマップからマイルストーン対応の解決・未解決チケットを開くと
エラーになるのを修正。

<TracLightning2.3.0(beta1~beta3,rc1~2も含む)~2.3.2、2.4.0~2.4.2用>
http://sourceforge.jp/projects/shibuya-trac/wiki/patches%2FMultiRepos/attach/multirepos_TracLightning-2.3.0.zip
※09/10/01 リビジョン間のdiff画面で「異なるフォーマットでダウンロード」の
リンクを修正。
※09/10/04 リビジョン間のdiff画面で「異なるフォーマットでダウンロード」で
ダウンロードされるdiff/zipファイル名前の最初にdefaultリポジトリなら(default)を、
それ以外ならそのリポジトリ名を前につけるようにした。

<TracLightning2.5.0 alfa2~3用>
http://sourceforge.jp/projects/shibuya-trac/wiki/patches%2FMultiRepos/attach/multirepos_TracLightning-2.5.0.zip

<TracLightning2.5.0(beta1~2,rc1~2も含む)~2.5.2用>
http://sourceforge.jp/projects/shibuya-trac/wiki/patches%2FMultiRepos/attach/multirepos_TracLightning-2.5.0b.zip

マルチリポジトリとは

tracではひとつのtracプロジェクトでひとつのリポジトリしか
扱えませんでした。

このパッチを適用することで複数のリポジトリを
扱うことができます。

何ができるのか

以下のようなことをしたい場合にいいです。
・ひとつのプロジェクトのソース管理をひとつのリポジトリでするのには不都合がある。
(別のことのためにリビジョンをあげたくないなど)
・他のプロジェクトのリポジトリを参照したい。
・タイムラインで他のリポジトリの更新状況を知りたい。
・wikiやticketの添付ファイルは更新する場合上書きになるか別ファイルをつくるかになるので、 ちゃんとリポジトリでバージョン管理したい。
→リポジトリにコミットしてからそれをリンクするだけですけど、
既にソースを管理しているdefault repositoryとは別に
できるというのはいいかと思います。

導入

以下のような手順で適用できます。
(適用する場合自己責任でお願いします。)

1.TracLightningのpython-lib\tracにパッチを当てる。
(TortoiseSVNを使っていればpatchを右クリック→TortoiseSVN→「パッチを適用」で
パッチを当てるのが楽です。)

2.python-lib\tracで

python setup.py install
を実行する。

3.trac.iniに追加したいリポジトリを記述する。 (例.bbbというリポジトリを追加)

[repositories]
bbb.dir = C:\TracLight\projects/svn/bbb
bbb.type = direct-svnfs
プロジェクト作成時に作っているリポジトリはdefaultリポジトリ となる。

4.追加したリポジトリでコミット時のフックを利用して チケットのコメントに追記したい場合は以下のようにする。

TRAC_LIGHT_HOMEのbinフォルダに post-commit2.shをコピーする(追加リポジトリで使う、 defaultリポジトリはpost-commit.sh)。

追加したsvnリポジトリのhooksの中の post-commit.bat(TLで作ったもの)を編集。

%TRAC_LIGHT_HOME%\bin\bash.exe~
SET PROJECTNAME="aaa"
SET REPNAME="bbb"
%TRAC_LIGHT_HOME%\bin\bash.exe %TRAC_LIGHT_HOME%/bin/post-commit2.sh "%1" %2 "%TL_PROJECT_HOME%" %PROJECTNAME% %REPNAME%
に置き換える(tracのプロジェクト名をaaaとして)。

できること

・tracのブラウザから複数のリポジトリを見られる。
・タイムラインに登録リポジトリのコミット情報が表示できる。
・svnのフックスクリプトを使えばコミットの際のコメントをチケットのコメントにすることができる。
・wikiでのリンクを短く書ける(bbbが追加リポジトリなら「1/bbb」、「changeset:21/bbb」のように)。

できないこと

・チェンジセット(コミットログ)の検索に対応してない。
SearchHyperEstraierを改造し、リポジトリ検索とともにチェンジセット検索もできるようにしてみました。
(http://omoitsuki-teck.cocolog-nifty.com/blog/2009/02/searchhyperestr.html)
・プラグインが対応していない。
→patchを導入して使えなくなったものがあるなら、例えばそのpluginの中を以下のように書き換えればdefault repositoryでは動くと思います
(repositoryの指定がなければdefault repositoryとなるので)。

get_repository(req.authname)
get_repository(None, req.authname)
PeerReviewPluginのパッチをこちらに作りました。→
http://sourceforge.jp/projects/shibuya-trac/wiki/patches%2FMultiRepos%2FPeerReview