WiLiKiのソースはSourceForge.netのCVSを利用してきたが、これをSubversionに移行することにする。以下は移行メモ。
SF.netで示されている方法は、
なんだけど、この手順に従うと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 -av 'rsync://wiliki.cvs.sourceforge.net/cvsroot/wiliki/*' wiliki-cvsbackup
ちょっとはまったこと: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で練習した。
ふたつのパッケージがある。
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
再び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