ノード: Some commands fail remotely but not locally; how should I debug?, 次: I do not see my problem covered in this chapter, 前: How can I get a list of all projects in a repository?, 上: Some Real Life Problems (With Solutions)
リモートで失敗するコマンドがあるんですが、ローカルでは失敗しません; どうデバッグするべき?
クライアントとサーバ間の通信に問題が存在することがあります。もしそう ならそれは 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 ページに完全な解
説が載っていますので読んでみてください。また、生のプロトコルを読むと
いろいろと分かると思います。問題の原因の他の可能性を全て除去するまで
クライアントロギングを使う気分になれなかったとしても、クライアントと
サーバの間で何が起こっているか探るにはとても価値のあるツールです。