jigen, Hirotomo Kunimatsu
Tokyo, Japan
mailto: microformat hcard
top

複数リポジトリを1つのTracで

trac_big

スポンサードリンク

Tracではリポジトリは1つしか扱えない。例えば【1つのリポジトリを複数のTracで利用する】の事は出来るようだが、逆に【複数リポジトリを1つのTracで動かす】のは色々検索したが見つからなかった。

例えば、社内に複数のリポジトリがあってそれを1つのTracで管理したい場合。こんなのありそうだが・・・Trac 0.10xとかで機能追加されるのかな(?)。これがまた私の方でこのようなケースを自分で作り出してしまって困ったので…。無理やりではあるがSubversionのリポジトリ側で統合をしてみた。クレバーじゃぁないが、忘れそうなのでメモ。ちなみに、外部からのアクセスに関してはsvnserve、Tracで使うWebサーバはApacheだった場合を想定です。
なんかクレバーな方法あったら教えてください。m(_ _)m

大まかな説明

下記にあるシェルスクリプトをcronで回す。流れは以下。

  • 統合させたい複数リポジトリをダンプ。
  • 【統合リポジトリ】を作成する(しなおす)。
  • ダンプしたファイルを【統合リポジトリ】にダンプをインポート。
  • Tracにて【統合リポジトリ】を読み込み直す。
  1. #!/bin/sh
  2. SVN_USER=user
  3. SVN_PASS=password
  4. SVN_REPO=/path/to/svn-basic
  5. TMPLOG=/path/temppath
  6. SVNSERVE_CONF=/path/to/svnserve-conf
  7. TRAC_PATH=/path/to/trac
  8. TRAC_PROJECT=(project1 project2 project2)
  9. TRAC_ALL_PROJECT=all
  10. APACHE_USER=www-data
  11. APACHE_GROUP=www-data
  12. # 統合するリポジトリをダンプする。
  13. for i in ${TRAC_PROJECT[*]} ; do
  14. svnadmin dump $SVN_REPO/$i > $TMPLOG/$i.log
  15. done
  16. # 作業フォルダを全て削除。
  17. rm -fr $SVN_REPO/all
  18. rm -fr $TMPLOG/all
  19. # 新リポジトリを作成して、confを入れる。
  20. svnadmin create $SVN_REPO/$TRAC_ALL_PROJECT
  21. cp -fR $SVNSERVE_CONF/* $SVN_REPO/$TRAC_ALL_PROJECT/conf/
  22. # 統合するリポジトリを入れるフォルダを作成。
  23. cd $SVN_REPO
  24. svn \
  25. –username $SVN_USER \
  26. –password $SVN_PASS \
  27. co \
  28. file://$SVN_REPO/$TRAC_ALL_PROJECT $TRAC_ALL_PROJECT
  29. cd $SVN_REPO/all
  30. for i in ${TRAC_PROJECT[*]} ; do
  31. svn mkdir $i
  32. done
  33. svn commit -m “Dump Message”
  34. # 作業フォルダを削除。
  35. rm -fr $TMPLOG/$TRAC_ALL_PROJECT
  36. # 旧リポジトリを入れ込む。
  37. for i in ${TRAC_PROJECT[*]} ; do
  38. svnadmin load $SVN_REPO/$TRAC_ALL_PROJECT –parent-dir $i \
  39. < $TMPLOG/$i.log
  40. done
  41. # リポジトリを復旧
  42. svnadmin recover $SVN_REPO/$TRAC_ALL_PROJECT
  43. # 権限設定を変更する。
  44. chown -R $APACHE_USER:$APACHE_PASS $SVN_REPO/$TRAC_ALL_PROJECT
  45. # trac変更を読み込ませる。
  46. trac-admin $TRAC_PATH resync

設定項目

SVN_USER
Subversionを操作するユーザ
SVN_PASS
Subversionを操作するユーザパスワード
SVN_REPO
元になるSubversionリポジトリパス
TMPLOG
ダンプの一時ファイルを作るフォルダ
SVNSERVE_CONF
Svnserveのコンフィグファイル(あらかじめ作っておく)。
TRAC_PATH
Tracのパス。
TRAC_PROJECT
統合するリポジトリ名(配列で入れる)
TRAC_ALL_PROJECT
統合リポジトリ名
APACHE_USER
Apacheユーザ
APACHE_GROUP
Apacheユーザパスワード

問題点

リビジョン番号
3つの複数リポジトリを統合した場合、Tracで表示されるRevisionは3つのリポジトリを足した番号になる。例えば以下のような感じ。
project1 (rev3) — Tracだと –> (rev3)
project2 (rev5) — Tracだと –> (rev8)
project3 (rev2) — Tracだと –> (rev10)
リアルタイムには反映できない
シェルで定時で同期を取るのでリアルタイムには反映されない。また、リポジトリを更新する際にソース表示関連のもの(リポジトリを利用する機能)は使えなくなる。大体長くて5分~10分程度なので3時間毎でもいいかも知れない。

参照させて頂いたサイト


スポンサードリンク

関連エントリー

よろしければ、以下リンクよりコメントをどうぞ。
2006/04/26 03:56:49200603:56
アリ「ここからメニューだすよ」
アリ「ごちそういっぱーい」
アリ「腹へったー」
アリ「働けー働けー♪」