Login
Immutable PageDiscussionInfoAttachments
ytoku/daily-record/2011-01-21

MMA

RCSからMercurialに変換

いい加減メーリングリストの設定ファイルをRCSで管理するのをやめようということで、既存のリポジトリをMercurialに変換することにした。

Convert extension - Mercurial #Converting from RCS の手順に従って変換を行うことにした。

まずconvert extensionを使用するために~/.hgrcに

[extensions]
hgext.convert=

を設定して、

$ mkdir /tmp/cvs-repo
$ cvs -d /tmp/cvs-repo init
$ mkdir /tmp/cvs-repo/mma-active

そして対象のディレクトリ内にはRCSで管理されていないファイルの方が多かったので、*,vだけをコピーした。

$ mkdir -p /tmp/cvs-repo/mma-active/{bin,config}
$ cp /ml/mma-active/bin/ryml.pl,v /tmp/cvs-repo/mma-active/bin/
$ cp /ml/mma-active/config/RCS/member,v /tmp/cvs-repo/mma-active/config/

そしてこのCVSリポジトリからチェックアウトして、チェックアウトしたディレクトリを使って変換を行った。

$ mkdir /tmp/cvs-checkout
$ cd /tmp/cvs-checkout
$ cvs -d /tmp/cvs-repo co mma-active
$ mkdir -p /tmp/hg-repo/mma-active
$ hg convert --datesort /tmp/cvs-checkout/mma-active /tmp/hg-repo/mma-active

RCSで管理されずにバックアップされていたファイルをログに加える

RCSで管理されるよりも前のオリジナルバージョンが.bakファイルとしてコピーされて残されていたので、履歴の最初に追加することにした。 先ほど作ったリポジトリを一旦削除して、最初のバージョンをコミットした状態のリポジトリを作った。

$ rm -r /tmp/hg-repo/mma-active
$ mkdir /tmp/hg-repo/mma-active
$ cd /tmp/hg-repo/mma-active
$ hg init
$ mkdir bin
$ cp -a /ml/mma-active/bin/ryml.pl.bak bin/ryml.pl
$ hg add bin
$ ls -lT bin/ryml.pl
-rwxr-xr-x  1 ytoku  wheel  3457  1月 28 03:35:28 1997 bin/ryml.pl
$ hg commit -u (作った人のusername) -d "1997-01-28 03:35:28"

そして今コミットしたチェンジセットのIDを特定して

$ hg log --debug
チェンジセット:   0:0762fa563002e01dc7d815cc3d6885a4554d5f0a
...

splicemapを作成した。具体例が無くてわかりにくい。

1 0762fa563002e01dc7d815cc3d6885a4554d5f0a

先ほどの変換処理に--splicemapオプションを渡して再実行。これで0番のチェンジセットにオリジナルバージョンが加わった。

$ hg convert --splicemap splicemap --datesort /tmp/cvs-checkout/mma-active /tmp/hg-repo/mma-active

さらにいくつかのチェンジセットを最初に加えたくなったのでやり直した。

チェンジセット:   3:1e13a461e0d941adeb986f9bb8d7d8550f3c37d9

を元にした追加だったが、そのときのsplicemapは

1 1e13a461e0d941adeb986f9bb8d7d8550f3c37d9

であり、最初の値は4ではなく1だった。

ytoku/daily-record/2011-01-21 (last edited 2011-01-22 06:02:27 by ytoku)