ノード: Some commands fail remotely but not locally; how should I debug?, 次: , 前: How can I get a list of all projects in a repository?, 上: Some Real Life Problems (With Solutions)



Some commands fail remotely but not locally; how should I debug?

リモートで失敗するコマンドがあるんですが、ローカルでは失敗しません; どうデバッグするべき?

クライアントとサーバ間の通信に問題が存在することがあります。もしそう ならそれは CVS のバグなんですが、さてそれをどうやって追跡すればよい のでしょうか?

CVS ではクライアントとサーバ間のプロトコルを監視する方法があります。 ローカル(作業コピーのある)マシン上でコマンドを動かす前に、 CVS_CLIENT_LOG 環境変数をセットしてください。Bourne シェルで は次のように設定します:

     floss$ CVS_CLIENT_LOG=clog; export CVS_CLIENT_LOG
     

CVS はこの変数がセットされると、クライアントとサーバの間の通信を、ファ イル2つにすべて記録します。ファイル名はその環境変数に設定された値に 基づいたものになります:

     floss$ ls
     CVS/        README.txt    a-subdir/    b-subdir/    foo.gif     hello.c
     floss$ cvs update
     ? clog.in
     ? clog.out
     cvs server: Updating .
     cvs server: Updating a-subdir
     cvs server: Updating a-subdir/subsubdir
     cvs server: Updating b-subdir
     floss$ ls
     CVS/              a-subdir/    clog.in     foo.gif
     README.txt        b-subdir/    clog.out    hello.c
     floss$
     

clog.in ファイルにはクライアントがサーバに送信したもの全てが、 clog.out ファイルにはサーバがクライアントに送り返してきたもの 全てが記録してあります。プロトコルがどんな感じに見えるのか示すために、 clog.out の内容をお見せします:

     Valid-requests Root Valid-responses valid-requests Repository           \
     Directory Max-dotdot Static-directory Sticky Checkin-prog Update-prog   \
     Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged     \
     Notify Questionable Case Argument Argumentx Global_option Gzip-stream   \
     wrapper-sendme-rcsOptions Set expand-modules ci co update diff log add  \
     remove update-patches gzip-file-contents status rdiff tag rtag import   \
     admin export history release watch-on watch-off watch-add watch-remove  \
     watchers editors init annotate noop
     ok
     M ? clog.in
     M ? clog.out
     E cvs server: Updating .
     E cvs server: Updating a-subdir
     E cvs server: Updating a-subdir/subsubdir
     E cvs server: Updating b-subdir
     ok
     

clog.in ファイルのほうはリビジョン番号や他のファイルごとの情報をサー バに送らなければならないので、もう少し複雑です。

クライアント/サーバのプロトコルを書くには紙幅が足りませんが、CVS と 一緒に配布されている cvsclient という info ページに完全な解 説が載っていますので読んでみてください。また、生のプロトコルを読むと いろいろと分かると思います。問題の原因の他の可能性を全て除去するまで クライアントロギングを使う気分になれなかったとしても、クライアントと サーバの間で何が起こっているか探るにはとても価値のあるツールです。