1

次のコマンドを使用して、CVSリポジトリをMercurialに変換しています。

cvs -d :pserver:<user>@<cvsroot> mymodule
hg convert mymodule

Ubuntu 12.04マシンでは、これが機能し、有効なMercurialリポジトリが生成されます。Fedora 17マシンでは、作業に時間がかかり、次のエラーで失敗します。

...
38000 <commit message>
37930 changeset entries
sorting...
converting...
37929 Initial Checkin.
cvs server: cvs checkout: cannot find module `mymodule/<cvsroot>/<some file>` - ignored
abort: unknown CVS response: error

編集:私は最初はこれを見落としていましたが、見つけることができないパスは少し面白いです。これは、モジュール名とそれに続くCVSROOTおよび実際のパスで構成されます。

両方のマシンに同一の.hgrcファイルがあり、両方ともCVS1.12.13を実行しています。<cvsroot>関連すると思われる唯一の環境変数はCVSROOTです。これは両方のマシンで同じであり、上記のプレースホルダーと同じ値に設定されています。

エラーを生成するファイルは毎回同じですが、完全に正常なファイルです。他のファイルとの違いを特定することはできません。

明確にするために、私は単に作業マシンを使用できることを知っています。また、リポジトリ変換も行うcvs2svn[hg]のような他の多くのツールがあることを知っています。しかし、私はそれには興味がありません。この特定の問題を理解したいと思います。

同じリポジトリの変換が異なるマシンで失敗するのはなぜですか?これをさらにデバッグするためのいくつかの戦略は何ですか?

4

1 に答える 1

0

Ubuntuマシンには、そのリポジトリの既存のチェックアウトがあり、元々は<cvsroot>として指定されたものを使用してチェックアウトされていたことが判明しました<server>:/<path>/。私が使用したコマンドは<server>/<path>/、コロンなしでそれを指定しました。

CVSは、コロンの有無にかかわらず両方の形式を受け入れますが、hg convertのcvsps.pyには、前者を想定した特定の関数があります。リポジトリが最初にコロンなしでチェックアウトされた場合、hgconvertはファイル名からプレフィックスを適切に削除しません。これにより、ファイルリビジョンをプルダウンしようとしたときに、エラーメッセージで気付いたように、最終的に間違ったパスが使用されることになります。

したがって、元々コロンでチェックアウトされていたため、Ubuntuマシンで動作し、コロン以外の形式を使用した後続のチェックアウトでは、/ CVS/Rootの内容を変更せずに更新するだけでした。根。

他のマシンを機能させるために私がしなければならなかったのは、リポジトリをrmし、サーバーとパスの間にコロンを含むcvsrootを使用してリポジトリをクリーンアウトすることだけでした。

于 2012-10-23T21:16:29.403 に答える