CVX is a simple profile-aware wrapper around cvs, designed to make using multiple CVS modules from a small number of cvs servers easier (where "small" merely means fewer than the number of CVS modules).
When run, cvx treats its first argument as a profile name; this profile is treated as a filename relative to $HOME/.cvx, and if found, the contents of this file are passed to a cvs invocation as the contents of the -d flag. All other arguments are passed transparently to cvx. This will make more sense with an example; in my setup, this:
$ cvx bashlib co bashlib
Will be expanded to:
cvs -d:ext:firstname.lastname@example.org:/cvsroot/bashlib co bashlib
The first time cvx is run, it will create $HOME/.cvx if it does not exist. Any profiles that are passed to it that it does not know about will case cvx to prompt for a value (my responses are in bold):
$ cvx tt co Template2
Can't find /home/darren/.cvx; should I make it? [Y/n] y Creating /home/darren/.cvx... ok. Didn't find profile tt in /home/darren/.cvx; create it? [Y/n] y Enter the CVSROOT string for tt: :pserver:email@example.com:/template-toolkit
And the cvs checkout proceeds as usual. The next time, however, is simpler:
$ cvs tt co Template2
and cvs proceeds, because cvx already know about the profile named tt.
cvx would be most useful for people who use many cvs modules from a small number of servers. If the ratio of cvs modules to CVSROOTs is close to 1, then this script will not be so useful; however, in the case of many cvs modules spread out over a few cvs servers, this script can be a huge time saver.
You can get cvx from the SourceForge CVS server or from this server. You can also browse the source. CVS instructions:
cvs -d:pserver:firstname.lastname@example.org:/cvsroot/bashlib login cvs -z3 -d:pserver:email@example.com:/cvsroot/bashlib co cvx
You'll need autoconf to build a usable configure script if you get the source from cvx. If you get a tarball, you will not need autoconf.