WiLiKi:リポジトリ:Subversionへの移行

WiLiKi:リポジトリ:Subversionへの移行

WiLiKiのソースはSourceForge.netのCVSを利用してきたが、これをSubversionに移行することにする。以下は移行メモ。

基本ドキュメント

基本的な手順

SF.netで示されている方法は、

  1. rsyncでCVSリポジトリ全体をローカルにバックアップ
  2. ローカルでcvs2svn --dumpfile=svndump を走らせて、svnに変換したものをダンプファイルにする
  3. ダンプファイルをSF.netのシェルサーバのグループディレクトリにアップロード
  4. SF.netのsubversion importのwebインタフェース (project homeからAdmin > Subversion > migrate) を使ってインポート

なんだけど、この手順に従うとsvnリポジトリ (wiliki.svn.sourceforge.net/svnrepos/wiliki) の直下にbranches, trunk, tagsが作られる。

/svnrepos/wiliki/branches/
/svnrepos/wiliki/trunk/WiLiKi/
/svnrepos/wiliki/tags/

WiLiKiの場合はCVSのモジュールにあたるものがWiLiKiしか無かったんで まあこれでも良いのだけれど、将来Gaucheでやっているようにひとつのリポジトリ下にいくつかの モジュールを置いてそれぞれ独立にリリースするような場合を考えると branches, trunk, tagsはWiLiKiの下に来てほしい。

/svnrepos/wiliki/WiLiKi/branches
/svnrepos/wiliki/WiLiKi/trunk
/svnrepos/wiliki/WiLiKi/tags

んでそのやり方はcvs2svnのFAQの http://cvs2svn.tigris.org/faq.html#onetoone あたりに 書いてある。optionsファイルというのを使うらしい。 (WiLiKiのようにモジュールがひとつしか無い場合はコマンドラインでも いけるみたいだけど、将来複数モジュールのCVSリポジトリを変換することも あるだろうからoptionsファイルを使ってみる。)

実際にやった手順

rsyncでCVSリポジトリを持ってくる

  $ rsync -av 'rsync://wiliki.cvs.sourceforge.net/cvsroot/wiliki/*' wiliki-cvsbackup

optionsファイルの準備

ちょっとはまったこと:FAQにあるoptionsファイルの形式は 古くて、そのままコピペしたのでは動かない。使っているcvs2svnについてきた cvs2svn-example.optionsというファイルをコピーしてきて いじるのが吉。Fedora上でyumで入れた場合はこいつは /usr/share/doc/cvs2svn-2.0.1/cvs2svn-example.optionsにあった。

書き換えたのは次の2箇所。

出力先はデフォルトでNewRepositoryOutputOptionになってるけど、 ダンプファイルが欲しいのでそっちをコメントアウトして、 そのちょっと下にあるこいつを生かす。

ctx.output_option = DumpfileOutputOption(
    dumpfile_path=r'/home/shiro/src/wilikisvndump', # Name of dumpfile to create
    )

あと、最後の方にあるadd_projectを変更。Projectの第1引数に 「バックアップしたCVSリポジトリ/モジュールディレクトリ」を指定。

ctx.add_project(
    Project(
        r'/home/shiro/src/wiliki-cvsbackup/WiLiKi',
        'WiLiKi/trunk',
        'WiLiKi/branches',
        'WiLiKi/tags',
        symbol_transforms=[
            #RegexpSymbolTransform(r'release-(\d+)_(\d+)',
            #                      r'release-\1.\2'),
            #RegexpSymbolTransform(r'release-(\d+)_(\d+)_(\d+)',
            #                      r'release-\1.\2.\3'),
            ],
        )
    )

で、cvs2svnを起動。

$ cvs2svn --options=options
$ ls -l wilikisvndump 
-rw-rw-r-- 1 shiro shiro 10428533 Jan 11 02:24 wilikisvndump

手元で確かに思ったとおりの構造になってるか確かめてみた。

$ svnadmin create /home/shiro/src/wiliki-svntest
$ svnadmin load /home/shiro/src/wiliki-svntest < wilikisvndump
$ svnlook tree /home/shiro/src/wiliki-svntest | less

アップロード

$ gzip wilikisvndump
scp wilikisvndump.gz shirok@shell.sourceforge.net:/home/groups/w/wi/wiliki/wilikisvndump.gz

インポート

SF.netのWebインタフェースでwilikisvndump.gzを指定。 実は一回、望ましくないディレクトリ構成のやつをインポートしちゃってたので "Replace" チェックボックスにチェックして完全に置き換える。

SF.netの上記ページには最長24時間かかるようなことが書いてあるけど、 10分くらいで済んだかな。

確認

$ svn co https://wiliki.svn.sourceforge.net/svnroot/wiliki/WiLiKi/trunk WiLiKi

複数のパッケージを別々に移行

WiLiKiはリポジトリ直下にWiLiKi/ ディレクトリ(パッケージ)しか無かったけど、 Gaucheのようにいくつもパッケージがあって、かつ一斉に移行するのが 難しい場合はパッケージごとに移行することができる。

いきなりGaucheでやるのは大変なので、Fixpointで練習した。

元のディレクトリ構成

ふたつのパッケージがある。

CVSリポジトリの取得

cvs2svnはCVSリポジトリ直下のCVSROOTディレクトリを見る必要があるんで、 少なくとも 'CVSROOT/' と 'パッケージ/' が見えているディレクトリ構造を 持ってくる必要がある。こんなふうにした。

$ mkdir fixpoint-cvsbackup
$ rsync -av 'rsync://fixpoint.cvs.sourceforge.net/cvsroot/fixpoint/Fixpoint/*' fixpoint-cvsbackup/Fixpoint
$ rsync -av 'rsync://fixpoint.cvs.sourceforge.net/cvsroot/fixpoint/CVSROOT/*' fixpoint-cvsbackup/CVSROOT
$ ls fixpoint-cvsbackup/
CVSROOT  Fixpoint

cvs2svn

再びoptionsファイルを作成。 DumpfileOutputOptionにsvndumpファイルのパスを入れるところは同じ。

ctx.output_option = DumpfileOutputOption(
    dumpfile_path=r'/home/shiro/src/fixpointsvndump', # Name of dumpfile to create
    )

ctx.add_projectのところで今回importするパッケージのディレクトリを指定。

ctx.add_project(
    Project(
        r'/home/shiro/src/fixpoint-cvsbackup/Fixpoint',
        'Fixpoint/trunk',
        'Fixpoint/branches',
        'Fixpoint/tags',
        symbol_transforms=[
            #RegexpSymbolTransform(r'release-(\d+)_(\d+)',
            #                      r'release-\1.\2'),
            #RegexpSymbolTransform(r'release-(\d+)_(\d+)_(\d+)',
            #                      r'release-\1.\2.\3'),
            ],
        )
    )

で、cvs2svnを走らせてこんな感じでアップロード。

$ cvs2svn --option=fixpoint.options
$ gzip fixpointsvndump 
$ scp -q fixpointsvndump.gz shirok@shell.sourceforge.net:/home/groups/f/fi/fixpoint/fixpointsvndump.gz

インポート

sf.netのproject webpageのAdmin - Subversion - migration から。

あとはこの手順を繰り返すだけ。

 rio orange
More ...