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

[[http://mercurial.selenic.com/wiki/ConvertExtension#Converting_from_RCS|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だった。