diff options
Diffstat (limited to 'gnu/usr.bin/cvs/doc/cvsclient.info-3')
-rw-r--r-- | gnu/usr.bin/cvs/doc/cvsclient.info-3 | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/gnu/usr.bin/cvs/doc/cvsclient.info-3 b/gnu/usr.bin/cvs/doc/cvsclient.info-3 new file mode 100644 index 00000000000..8218609469c --- /dev/null +++ b/gnu/usr.bin/cvs/doc/cvsclient.info-3 @@ -0,0 +1,257 @@ +This is Info file cvsclient.info, produced by Makeinfo version 1.67 +from the input file ../../work/ccvs/doc/cvsclient.texi. + + +File: cvsclient.info, Node: Example, Next: Requirements, Prev: Text tags, Up: Protocol + +Example +======= + + Here is an example; lines are prefixed by `C: ' to indicate the +client sends them or `S: ' to indicate the server sends them. + + The client starts by connecting, sending the root, and completing the +protocol negotiation. In actual practice the lists of valid responses +and requests would be longer. + + C: Root /u/cvsroot + C: Valid-responses ok error Checked-in M E + C: valid-requests + S: Valid-requests Root Directory Entry Modified Argument Argumentx ci co + S: ok + C: UseUnchanged + + The client wants to check out the `supermunger' module into a fresh +working directory. Therefore it first expands the `supermunger' +module; this step would be omitted if the client was operating on a +directory rather than a module. + + C: Argument supermunger + C: Directory . + C: /u/cvsroot + C: expand-modules + + The server replies that the `supermunger' module expands to the +directory `supermunger' (the simplest case): + + S: Module-expansion supermunger + S: ok + + The client then proceeds to check out the directory. The fact that +it sends only a single `Directory' request which specifies `.' for the +working directory means that there is not already a `supermunger' +directory on the client. + + C: Argument -N + C: Argument supermunger + C: Directory . + C: /u/cvsroot + C: co + + The server replies with the requested files. In this example, there +is only one file, `mungeall.c'. The `Clear-sticky' and +`Clear-static-directory' requests are sent by the current +implementation but they have no effect because the default is for those +settings to be clear when a directory is newly created. + + S: Clear-sticky supermunger/ + S: /u/cvsroot/supermunger/ + S: Clear-static-directory supermunger/ + S: /u/cvsroot/supermunger/ + S: E cvs server: Updating supermunger + S: M U supermunger/mungeall.c + S: Created supermunger/ + S: /u/cvsroot/supermunger/mungeall.c + S: /mungeall.c/1.1/// + S: u=rw,g=r,o=r + S: 26 + S: int mein () { abort (); } + S: ok + + The current client implementation would break the connection here +and make a new connection for the next command. However, the protocol +allows it to keep the connection open and continue, which is what we +show here. + + After the user modifies the file and instructs the client to check it +back in. The client sends arguments to specify the log message and file +to check in: + + C: Argument -m + C: Argument Well, you see, it took me hours and hours to find + C: Argumentx this typo and I searched and searched and eventually + C: Argumentx had to ask John for help. + C: Argument mungeall.c + + It also sends information about the contents of the working +directory, including the new contents of the modified file. Note that +the user has changed into the `supermunger' directory before executing +this command; the top level directory is a user-visible concept because +the server should print filenames in `M' and `E' responses relative to +that directory. + + C: Directory . + C: /u/cvsroot/supermunger + C: Entry /mungeall.c/1.1/// + C: Modified mungeall.c + C: u=rw,g=r,o=r + C: 26 + C: int main () { abort (); } + + And finally, the client issues the checkin command (which makes use +of the data just sent): + + C: ci + + And the server tells the client that the checkin succeeded: + + S: M Checking in mungeall.c; + S: E /u/cvsroot/supermunger/mungeall.c,v <-- mungeall.c + S: E new revision: 1.2; previous revision: 1.1 + S: E done + S: Mode u=rw,g=r,o=r + S: Checked-in ./ + S: /u/cvsroot/supermunger/mungeall.c + S: /mungeall.c/1.2/// + S: ok + + +File: cvsclient.info, Node: Requirements, Next: Obsolete, Prev: Example, Up: Protocol + +Required versus optional parts of the protocol +============================================== + + The following are part of every known implementation of the CVS +protocol (except obsolete, pre-1.5, versions of CVS) and it is +considered reasonable behavior to completely fail to work if you are +connected with an implementation which attempts to not support them. +Requests: `Root', `Valid-responses', `valid-requests', `Directory', +`Entry', `Modified', `Unchanged', `Argument', `Argumentx', `ci', `co', +`update'. Responses: `ok', `error', `Valid-requests', `Checked-in', +`Updated', `Merged', `Removed', `M', `E'. + + A server need not implement `Repository', but in order to +interoperate with CVS 1.5 through 1.9 it must claim to implement it (in +`Valid-requests'). The client will not actually send the request. + + +File: cvsclient.info, Node: Obsolete, Prev: Requirements, Up: Protocol + +Obsolete protocol elements +========================== + + This section briefly describes protocol elements which are obsolete. +There is no attempt to document them in full detail. + + There was a `Repository' request which was like `Directory' except +it only provided REPOSITORY, and the local directory was assumed to be +similarly named. + + If the `UseUnchanged' request was not sent, there was a `Lost' +request which was sent to indicate that a file did not exist in the +working directory, and the meaning of sending `Entries' without `Lost' +or `Modified' was different. All current clients (CVS 1.5 and later) +will send `UseUnchanged' if it is supported. + + +File: cvsclient.info, Node: Protocol Notes, Prev: Protocol, Up: Top + +Notes on the Protocol +********************* + + A number of enhancements are possible. Also see the file TODO in +the CVS source distribution, which has further ideas concerning various +aspects of CVS, some of which impact the protocol. + + * The `Modified' request could be speeded up by sending diffs rather + than entire files. The client would need some way to keep the + version of the file which was originally checked out; probably + requiring the use of "cvs edit" in this case is the most sensible + course (the "cvs edit" could be handled by a package like VC for + emacs). This would also allow local operation of `cvs diff' + without arguments. + + * The current procedure for `cvs update' is highly sub-optimal if + there are many modified files. One possible alternative would be + to have the client send a first request without the contents of + every modified file, then have the server tell it what files it + needs. Note the server needs to do the what-needs-to-be-updated + check twice (or more, if changes in the repository mean it has to + ask the client for more files), because it can't keep locks open + while waiting for the network. Perhaps this whole thing is + irrelevant if there is a multisite capability (as noted in TODO), + and therefore the rcsmerge can be done with a repository which is + connected via a fast connection. + + * The fact that `pserver' requires an extra network turnaround in + order to perform authentication would be nice to avoid. This + relates to the issue of reporting errors; probably the clean + solution is to defer the error until the client has issued a + request which expects a response. To some extent this might + relate to the next item (in terms of how easy it is to skip a + whole bunch of requests until we get to one that expects a + response). I know that the kerberos code doesn't wait in this + fashion, but that probably can cause network deadlocks and perhaps + future problems running over a transport which is more transaction + oriented than TCP. On the other hand I'm not sure it is wise to + make the client conduct a lengthy upload only to find there is an + authentication failure. + + * The protocol uses an extra network turnaround for protocol + negotiation (`valid-requests'). It might be nice to avoid this by + having the client be able to send requests and tell the server to + ignore them if they are unrecognized (different requests could + produce a fatal error if unrecognized). To do this there should + be a standard syntax for requests. For example, perhaps all + future requests should be a single line, with mechanisms analogous + to `Argumentx', or several requests working together, to provide + greater amounts of information. Or there might be a standard + mechanism for counted data (analogous to that used by `Modified') + or continuation lines (like a generalized `Argumentx'). It would + be useful to compare what HTTP is planning in this area; last I + looked they were contemplating something called Protocol Extension + Protocol but I haven't looked at the relevant IETF documents in + any detail. Obviously, we want something as simple as possible + (but no simpler). + + * The scrambling algorithm in the CVS client and server actually + support more characters than those documented in *Note Password + scrambling::. Someday we are going to either have to document + them all (but this is not as easy as it may look, see below), or + (gradually and with adequate process) phase out the support for + other characters in the CVS implementation. This business of + having the feature partly undocumented isn't a desirable state + long-term. + + The problem with documenting other characters is that unless we + know what character set is in use, there is no way to make a + password portable from one system to another. For example, a with + a circle on top might have different encodings in different + character sets. + + It *almost* works to say that the client picks an arbitrary, + unknown character set (indeed, having the CVS client know what + character set the user has in mind is a hard problem otherwise), + and scrambles according to a certain octet<->octet mapping. There + are two problems with this. One is that the protocol has no way + to transmit character 10 decimal (linefeed), and the current + server and clients have no way to handle 0 decimal (NUL). This + may cause problems with certain multibyte character sets, in which + octets 10 and 0 will appear in the middle of other characters. + The other problem, which is more minor and possibly not worth + worrying about, is that someone can type a password on one system + and then go to another system which uses a different encoding for + the same characters, and have their password not work. + + The restriction to the ISO646 invariant subset is the best + approach for strings which are not particularly significant to + users. Passwords are visible enough that this is somewhat + doubtful as applied here. ISO646 does, however, have the virtue + (!?) of offending everyone. It is easy to say "But the $ is right + on people's keyboards! Surely we can't forbid that". From a + human factors point of view, that makes quite a bit of sense. The + contrary argument, of course, is that a with a circle on top, or + some of the characters poorly handled by Unicode, are on + *someone*'s keyboard. + + |