状況
実際にしたこと
> cvs -d:pserver:user@repository.host:/repo/path checkout somemodule
> hg convert somemodule somemodule-hg
hg convert を実行すると早々に「そんなリポジトリはない」と言われてしまいます。
なぜ?
convert extension は変換元リポジトリ (CVS) の変更履歴を取得しようとしますが、この時に接続情報として以下が必要です。
- "BEGIN AUTH REQUEST"
- CVSROOT
- ユーザー名
- パスワード (気休め程度に暗号化されたもの)
- "END AUTH REQUEST"
これらを LF で結合して送信するのですが、実際に送信したデータを見ると CVSROOT の後ろになぜか CR がありました。
これは convert extension が CVSROOT を作業ディレクトリの管理ファイル (Root) から取得するときの処理が原因でした。
self.cvsroot = open(os.path.join(cvs, "Root")).read()[:-1]
WinCVS なので Root ファイルの改行コードも CRLF になっていて、その CR を取りこぼしてしまったようです *1
「これかー」みたいなことを Twitter で呟いていたら @flyingfoozy さんに「リストから取り出すときに strip() すればいいですよ」と教えて頂いたので、早速試してみたところちゃんと接続出来ました *2
他にも落とし穴が
変換元リポジトリには接続できたのですが、その後の変更履歴を取り出す段になって cvs log コマンドの解析に失敗しているのか、変換後のリポジトリでは全てのリビジョンでファイルが "新規追加" になってしまいました。
リビジョン数も明らかに少なく、@flyingfoozy さんに相談しながら色々と試したのですが、原因究明までは至らずギブアップとなりました。
その後
cygwin の cvs コマンドでチェックアウトしたものを hg convert したら一発で出来ました。
どう見ても不注意です。@flyingfoozy さん本当にすみませんでした。