Next: The commitinfo And loginfo And rcsinfo Files, Previous: The config File, Up: The CVSROOT/ Administrative Directory
In modules, you can define aliases and alternate groupings for projects in the repository. The most basic module line is of the form:
MODULE_NAME DIRECTORY_IN_REPOSITORY
for example,
mp myproj
asub myproj/a-subdir
(The paths given on the right are relative to the top of the repository.) This gives developers an alternate name by which to check out a project or a portion of a project:
floss$ cvs co mp
cvs checkout: Updating mp
U mp/README.txt
U mp/foo.jpg
U mp/hello.c
cvs checkout: Updating mp/a-subdir
U mp/a-subdir/whatever.c
cvs checkout: Updating mp/a-subdir/subsubdir
U mp/a-subdir/subsubdir/fish.c
cvs checkout: Updating mp/b-subdir
U mp/b-subdir/random.c
or
floss$ cvs -d /usr/local/newrepos/ co asub
cvs checkout: Updating asub
U asub/whatever.c
cvs checkout: Updating asub/subsubdir
U asub/subsubdir/fish.c
Notice how in both cases the module's name became the name of the directory created for the working copy. In the case of asub, it didn't even bother with the intermediate myproj/ directory, but created a top-level asub/ instead, even though it came from myproj/a-subdir in the repository. Updates, commits, and all other CVS commands will behave normally in those working copies – the only thing unusual about them are their names.
By putting file names after the directory name, you can define a module consisting of just some of the files in a given repository directory. For example
readme myproj README.txt
and
no-readme myproj hello.c foo.jpg
would permit the following checkouts, respectively:
floss$ cvs -q co readme
U readme/README.txt
floss$ cvs -q co no-readme
U no-readme/hello.c
U no-readme/foo.jpg
floss$
You can define a module that will include multiple repository
directories by using the -a (for alias) flag, but note that the
directories will get them checked out under their original names. For
example, this line
twoproj -a myproj yourproj
would allow you to do this (assuming that both myproj/ and yourproj/ are in the repository):
floss$ cvs co twoproj
U myproj/README.txt
U myproj/foo.jpg
U myproj/hello.c
U myproj/a-subdir/whatever.c
U myproj/a-subdir/subsubdir/fish.c
U myproj/b-subdir/random.c
U yourproj/README
U yourproj/foo.c
U yourproj/some-subdir/file1.c
U yourproj/some-subdir/file2.c
U yourproj/some-subdir/another-subdir/blah.c
The name twoproj was a convenient handle to pull in both
projects, but it didn't affect the names of the working copies. (There
is no requirement that alias modules refer to multiple directories, by
the way; we could have omitted twoproj, in which case myproj would still
have been checked out under the name myproj.)
Modules can even refer to other modules, by prefixing them with an ampersand:
mp myproj
asub myproj/a-subdir
twoproj -a myproj yourproj
tp &twoproj
Doing a checkout of tp would have exactly the same result as the
checkout of twoproj did.
There are a few other tricks you can do with modules, most of them less frequently used than the ones just presented. See the node modules in the Cederqvist for information about them.