スポンサードリンク
Tracではリポジトリは1つしか扱えない。例えば【1つのリポジトリを複数のTracで利用する】の事は出来るようだが、逆に【複数リポジトリを1つのTracで動かす】のは色々検索したが見つからなかった。
例えば、社内に複数のリポジトリがあってそれを1つのTracで管理したい場合。こんなのありそうだが・・・Trac 0.10xとかで機能追加されるのかな(?)。これがまた私の方でこのようなケースを自分で作り出してしまって困ったので…。無理やりではあるがSubversionのリポジトリ側で統合をしてみた。クレバーじゃぁないが、忘れそうなのでメモ。ちなみに、外部からのアクセスに関してはsvnserve、Tracで使うWebサーバはApacheだった場合を想定です。
なんかクレバーな方法あったら教えてください。m(_ _)m
大まかな説明
下記にあるシェルスクリプトをcronで回す。流れは以下。
- 統合させたい複数リポジトリをダンプ。
- 【統合リポジトリ】を作成する(しなおす)。
- ダンプしたファイルを【統合リポジトリ】にダンプをインポート。
- Tracにて【統合リポジトリ】を読み込み直す。
- #!/bin/sh
-
- SVN_USER=user
- SVN_PASS=password
- SVN_REPO=/path/to/svn-basic
- TMPLOG=/path/temppath
- SVNSERVE_CONF=/path/to/svnserve-conf
-
- TRAC_PATH=/path/to/trac
- TRAC_PROJECT=(project1 project2 project2)
- TRAC_ALL_PROJECT=all
-
- APACHE_USER=www-data
- APACHE_GROUP=www-data
-
- # 統合するリポジトリをダンプする。
- for i in ${TRAC_PROJECT[*]} ; do
- svnadmin dump $SVN_REPO/$i > $TMPLOG/$i.log
- done
-
- # 作業フォルダを全て削除。
- rm -fr $SVN_REPO/all
- rm -fr $TMPLOG/all
-
- # 新リポジトリを作成して、confを入れる。
- svnadmin create $SVN_REPO/$TRAC_ALL_PROJECT
- cp -fR $SVNSERVE_CONF/* $SVN_REPO/$TRAC_ALL_PROJECT/conf/
-
- # 統合するリポジトリを入れるフォルダを作成。
- cd $SVN_REPO
- svn \
- –username $SVN_USER \
- –password $SVN_PASS \
- co \
- file://$SVN_REPO/$TRAC_ALL_PROJECT $TRAC_ALL_PROJECT
-
- cd $SVN_REPO/all
- for i in ${TRAC_PROJECT[*]} ; do
- svn mkdir $i
- done
- svn commit -m “Dump Message”
-
- # 作業フォルダを削除。
- rm -fr $TMPLOG/$TRAC_ALL_PROJECT
-
- # 旧リポジトリを入れ込む。
- for i in ${TRAC_PROJECT[*]} ; do
- svnadmin load $SVN_REPO/$TRAC_ALL_PROJECT –parent-dir $i \
- < $TMPLOG/$i.log
- done
-
- # リポジトリを復旧
- svnadmin recover $SVN_REPO/$TRAC_ALL_PROJECT
-
- # 権限設定を変更する。
- chown -R $APACHE_USER:$APACHE_PASS $SVN_REPO/$TRAC_ALL_PROJECT
-
- # trac変更を読み込ませる。
- 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時間毎でもいいかも知れない。
参照させて頂いたサイト