複数プロジェクトにまたがるコンポーネントとリポジトリの関連

1,209 views
Skip to first unread message

もいち

unread,
Jun 25, 2008, 8:51:18 AM6/25/08
to Redmine Users (japanese)
こんにちは。今日からこのグループに参加させてもらったもいちです。よろしくお願いします。

Redmineをうちでも使い始めたのですが、どうもしっくり来ないことがありまして。

複数プロジェクトに共通してまたがるコンポーネントあるいはライブラリの管理を Redmine ではどうやるべきなのか?が、よく分からないのです。
少々長いですが、お付き合いください。

1) コンポーネントをそれぞれのプロジェクトのサブプロジェクトとして登録する。

まずは、こうやってみました。Project1 と Project2 があったとして、その2つのプロジェクトは共通のコンポーネント
Component を使っています。Component は Redmine では Component1, Component2 としてそれぞれ
のプロジェクトのサブプロジェクトに登録し、4つのプロジェクト(サブプロジェクト)全部にリポジトリ(CVS)を登録しました。

それで、Project1 にあるバグがあることがわかりチケット(#111)を登録しました。よく調べてみるとそれはComponentのあるソース
に問題があることが分かり、修正してCVSにコミットしました。このときコメントには「refs 111 なんやかんや」と入力しました。

その後、ruby script/runner "Repository.fetch_changesets" -e production で、コ
ミットしたリビジョンがそのチケットに含まれているか確認しても無いのです。Project1, Project2, Component1,
Component2 いずれの活動にも表示されていないのです。つまり、さっきのコミットは Project1 のリポジトリとは関係のないものなの
で、せっかく「refs 111」を指定してもチケットには結び付けられなかったようです。

2) 複数のCVSモジュールをプロジェクトに結びつける。

CVSROOT/modules で alias を設定することで、ひとつのモジュールで複数のモジュールを参照することができます。
具体的には "Project1_all -a Project1 Component" とし、Project1 のリポジトリとしてモジュール
Project1_all を指定しました。

それで、さっきの Component1, Component2 のプロジェクトは削除して、Project1, Project2 とプロジェクト
は2つだけにしました。すると先ほどのように 「refs 111 なんやかんや」のコメントでコミットしたリビジョンはちゃんとチケットのページで表
示されました。これでめでたしのはずだったのですが、「リポジトリ」メニューから「差分を見る」で修正したComponentのソースを見ようとする
と、昔コミットした関係のないソースなども表示されてしまって、どうにもならないのです。ログを見てみると cvs rdiff xxx がたくさん出
ていて、alias を使った場合には、対象ソースだけでなくその alias 配下のすべてのソースの差分をとってしまうことがあるようです。これ
は Redmine の問題ではなく、cvs の問題のような感じなのですが。

3) Subversion ではどうか?

世の中がもう CVS をあまり使わなくなって、みんな Subversion を使っている時代にしつこく CVS を使っていたのですが、2)のよ
うなことがあり、Subversion に切替えることも考えてきました。

それで、皆さんは恐らく Subversion 派が多いと思いますが、このように複数プロジェクトにまたがるコンポーネントは Redmine/
Subversion でどのように管理されていますか?

Armadillo

unread,
Jun 25, 2008, 9:34:49 PM6/25/08
to Redmine Users (japanese)
Armadilloです。

一応、このような用途を考えている人は私も含めて多数居まして、

http://www.redmine.org/issues/show/779

がそれに該当するかと思います。

根本的な問題は
・Redmineは1プロジェクト1リポジトリ前提
と言うところに有るので、結局これが改められないと満足いく結果にならないのではないかと思います。

一応、私は、投稿したIssueRepositoriesGrobal.patch を使って、
1リポジトリ1プロジェクトにして、それをクローラーとして「のみ」使い、
プロジェクトマネジメント用のプロジェクトを別途立てる形で使っています。

後、コード/動きを見ていると、Subversionだと、同じリポジトリを複数のプロジェクトで使いまわしても、
それぞれのプロジェクトでコミットログを別途取得してくれるようなのですが、
CVSだと履歴管理の都合か何かで複数のプロジェクトで使いまわしても
トータルで一度しかコミットログを取得してくれないようです。
#なので、ProjectA側でログを取ってrefs#xxを取得すると、ProjectB側ではもうそのログは読まなくて、
#結果ProjectBのIssue#xxとリポジトリが結びつかない、となる。

Subversionに移行するのは良いことなのではないかなと思います。
1.5.0になって待望のMergeTrackingが入りましたし。

#ちなみに私は業務上ではVSS...
#DocはVSS、SourceはSubversionに移行を画策中ですが

もいち

unread,
Jun 25, 2008, 11:47:19 PM6/25/08
to Redmine Users (japanese)
こんにちは、もいちです。

返信ありがとうございます。

On 6月26日, 午前10:34, Armadillo <Armadillo1...@gmail.com> wrote:
> 一応、このような用途を考えている人は私も含めて多数居まして、
>
> http://www.redmine.org/issues/show/779

これです。まさにこれです。

上記の issue で議論されているように「ひとつのプロジェクトで複数SCM」を扱えればベストですね。ブランチでの開発はまだ始まっていないよう
ですし。。。

まずは Subversion に移行してから、Aruo Miuraさん(Armadillo さん?)の
IssueRepositoriesGrobal.patch を当てて使う方法を検討してみます。

もいち

unread,
Jun 26, 2008, 5:17:48 AM6/26/08
to Redmine Users (japanese)
こんにちは。

やっぱりサーバ側の環境を変えるのも怖いので、結局CVSをしつこく使うことにしました。その代わり、CVSの複数のモジュールをプロジェクトに関連づ
けられる実行スクリプトを作って対処することにしました。

lib/redmine/scm/adapters/cvs_adapter.rb は cvs の実行ファイルを実行して、標準出力の内容を解析して
いるので、CvsAdaptor が実行する実行ファイルを自分で作ったスクリプト(cvs_alias.rb)に変更することで実現しました。

Redmineのリポジトリには、適当な仮想モジュール名(CVSのエイリアスとは無関係)をモジュール名として登録しておきま
す。cvs_alias.rb でその仮想モジュール名と複数のモジュールを関連づけるようにしました。Redmine にとってはその複数のモジュー
ルが、登録している仮想モジュール名の配下にある通常のディレクトリのように見えるので、リポジトリに関する全操作がうまく動作するようになりまし
た。

CVSを使って複数モジュールを扱いたい方はどうぞ。

使い方

* 添付のcvs_alias.rbをRedmineがうごいているサーバに保存します。
* Redmineで、プロジェクトのリポジトリに適当な「仮想モジュール名」をモジュール名に登録します。
* cvs_alias.rb を開いて、最初の辺りにある CVSROOT を実際のCVSROOT(Redmineで登録しているCVSROOT)
に変更します。さらに ALIASES で「仮想モジュール名」と実際の複数のモジュール名を結びつけます。
* lib/redmine/scm/adapters/cvs_adapter.rb の最初の辺りの CVS_BIN to /path/to/
cvs_alias.rb に変更して終わりです。

添付のcvs_alias.rbは http://www.redmine.org/issues/show/779 の #13 にポストしてありま
す。
Reply all
Reply to author
Forward
0 new messages