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