2007/01/29

cvs2svn

gentooにcvs2svnをインストールして, cvsのデータをsubversionに移行したときの記憶

emerge -uDN cvs2svn

コマンドの実行はこんな感じでやった.
cvs2svn -s /data/svn/test --encoding=euc-jp --symbol-transform="U?R([0-9]+)_([0-9]+)_([0-9]+)_([0-9].*):R\1.\2.\3.\4" --symbol-transform="Intermissiion:merge1.3_to_trunk" --symbol-transform="DEV_1_(.*):dev-1.\1" --symbol-transform="NN:original" --auto-props-ignore-case --fs-type=fsfs    /data/cvs

cvsとsubversionでは, リポジトリ内のデータの保存方法が違うので,
そのあたりを編集する.
まずは, 以下を事前に作っておく(適当に./test.plなんて名前を付けていたけど...)
#!/usr/bin/perl

use strict;
use File::Basename;

while (<&gt){
  chomp;
  my $target=$_;
  while($target =~ m/\//){
    $target = dirname $target;
    print "$target\n";
  }
}

ここまで.

svnadmin dumpで, cvs2svnで持ってきたリポジトリをダンプ.

以下では, "fk-grubver"という名前のリポジトリを移行する例.

以下を実行
for my_replace in \
  `grep -i 'Node[(-copyfrom)]*-path' orig.dump | grep fk-grubver | gawk '{print $2}'  | sort | uniq | ./test.pl | sort | uniq`
do 
  echo $my_replace ;
  perl -pi -e "s|^Node-path: $my_replace\$|Node-path: fk-grubver/$my_replace|" dump.log ;
  perl -pi -e "s|^Node-copyfrom-path: $my_replace\$|Node-copyfrom-path: fk-grubver/$my_replace|" dump.log ;
done

Node-path:の該当箇所を修正

perl -pi -e 's|^Node-path: (?:fk-grubver/)?trunk/(private/scan/tools/fk-grubver)|Node-path: $1/trunk|' dump.log
perl -pi -e 's|^Node-path: (?:fk-grubver/)?branches/(private/scan/tools/fk-grubver)|Node-path: $1/branches|' dump.log
perl -pi -e 's|^Node-path: (?:fk-grubver/)?tags/([^/][^/]*)/(private/scan/tools/fk-grubver)|Node-path: $2/tags/$1|' dump.log
perl -pi -e 's|^Node-path: private/scan/tools/fk-grubver|Node-path: fk-grubver|' dump.log

Node-copyfrom-path:の該当箇所を修正

perl -pi -e 's|^Node-copyfrom-path: (?:fk-grubver/)?trunk/(private/scan/tools/fk-grubver)|Node-copyfrom-path: $1/trunk|' dump.log
perl -pi -e 's|^Node-copyfrom-path: (?:fk-grubver/)?branches/([^/][^/]*)/(private/scan/tools/fk-grubver)|Node-copyfrom-path: $2/branches/$1|' dump.log
perl -pi -e 's|^Node-copyfrom-path: (?:fk-grubver/)?tags/([^/][^/]*)/(private/scan/tools/fk-grubver)|Node-copyfrom-path: $2/tags/$1|' dump.log
perl -pi -e 's|^Node-copyfrom-path: private/scan/tools/fk-grubver|Node-copyfrom-path: fk-grubver|' dump.log

fk-grubverに関連する部分のみを取り出す.

svndumpfilter include 'fk-grubver' < dump.log > dump.fk-grubver.log

プロジェクト単位でリポジトリを作るので, 頭の修飾語を消す

perl -pi -e 's|^Node-path: fk-grubver|Node-path: |' dump.fk-grubver.log
perl -pi -e 's|^Node-copyfrom-path: fk-grubver|Node-copyfrom-path: |' dump.fk-grubver.log

grep -i 'Node[(-copyfrom)]*-path' dump.log

rm -fr semi-private
mkdir semi-private
svnadmin create --fs-type fsfs semi-private/fk-grubver
svnadmin load semi-private/fk-grubver < dump.fk-grubver.log

0 件のコメント: