CVSNTによるドライブ名を含むリポジトリパスに,LinuxのCVSコマンドからアクセスする方法 1.背景CVSサーバにCVSNTを使った場合,リポジトリパスが以下のようにドライブ名を含む場合がある.D:/cvshome Linux標準のCVSコマンドで,このようなリポジトリパスへ接続しようとすると, 以下のようにエラーになる. $ export CVSROOT=:pserver:kamoi@cvsserver:D:/cvshome $ cvs login cvs login: CVSROOT may only specify a positive, non-zero, integer port (not `D:'). cvs login: Perhaps you entered a relative pathname? cvs [login aborted]: Bad CVSROOT: `:pserver:kamoi@cvsserver:D:/cvshome'. それでCVSのソースを見たところ,CVSコマンドではリポジトリパスが必ず「/」で始まると想定しているようで, 今回のようにドライブ名から始まるものは扱えないようだ. そこで仕方がないので,CVSを改造することにした. 今回のCVS改造を適用したことで何か不具合が起こっても,私は責任は取れませんのでご了承ください.
2.改造の内容最新のCVSのソースを, http://www.ring.gr.jp/pub/misc/cvs/source/stable/ からダウンロードした. 今回使ったのは,
である. 手がかりとして以下のエラーメッセージ CVSROOT may only specify a positive でソース内をgrepしたところ,root.cでCVSROOTの解析処理を行っていた.ここを改造した. 以下がそのパッチである. root.c-1.11.22_patch 473a474,475 > error (0, 0, > ":(gserver|kserver|pserver):[[user][:password]@]host[:[port]]://drivename:/path"); /* 2007.04.28 kamoi */ 522a525,529 > if (*q == ':') /* 2007.04.28 kamoi */ > { > *q = '\0'; > break; > } 553a561,564 > if (*(cvsroot_copy + 1) == '/') /* 2007.04.28 kamoi */ > { > cvsroot_copy += 2; > } これにより,CVSROOTに従来の :(gserver|kserver|pserver):[[user][:password]@]host[:[port]]/path
:(gserver|kserver|pserver):[[user][:password]@]host[:[port]]://drivename:/path
3.改造版の使い方http://www.ring.gr.jp/pub/misc/cvs/source/stable/1.11.22/ から
をダウンロードし,今回のパッチを用意して,以下のように実行すればよい. tar zxf cvs-1.11.22.tar.gz cd cvs-1.11.22/src patch root.c root.c-1.11.22_patch ←今回作成したパッチ cd .. ./configure make make install ←これはrootで実行
4.使用例例えば以下のような状態なら,
$ export CVSROOT=:pserver:kamoi@cvsserver://D:/cvshome $ cvs login |