Sometimes there's a problem in the communication between the client and the server. If so, it's a bug in CVS, but how would you go about tracking down such a thing?
CVS gives you a way to watch the protocol between the client and server.
Before you run the command on the local (working copy) machine, set the
CVS_CLIENT_LOG. Here's how in Bourne shell
floss$ CVS_CLIENT_LOG=clog; export CVS_CLIENT_LOG
Once that variable is set, CVS will record all communications between client and server in two files whose names are based on the variable's value:
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$
The clog.in file contains everything that the client sent into the server, and clog.out contains everything the server sent back out to the client. Here are the contents of clog.out, to give you a sense of what the protocol looks like:
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
The clog.in file is even more complex, because it has to send revision numbers and other per-file information to the server.
There isn't space here to document the client/server protocol, but you
can read the
cvsclient Info pages that were distributed with CVS
for a complete description. You may be able to figure out a good deal
of it just from reading the raw protocol itself. Although you probably
won't find yourself using client logging until you've eliminated all of
the other possible causes of a problem, it is an invaluable tool for
finding out what's really going on between the client and server.