ノード: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 ページに完全な解 説が載っていますので読んでみてください。また、生のプロトコルを読むと いろいろと分かると思います。問題の原因の他の可能性を全て除去するまで クライアントロギングを使う気分になれなかったとしても、クライアントと サーバの間で何が起こっているか探るにはとても価値のあるツールです。