The CMU CL sources are maintained using RCS in a hierarchical directory
structure which supports:
- shared RCS config file across a build area,
- frozen sources for multiple releases, and
- separate system build areas for different architectures.
Since this organization maintains multiple copies of the source, it is somewhat
space intensive. But it is easy to delete and later restore a copy of the
source using RCS snapshots.
There are three major subtrees of the root /afs/cs/project/clisp
:
- rcs
- holds the RCS source (suffix
,v
) files.
- src
- holds ``checked out'' (but not locked) versions of the source files,
and is subdivided by release. Each release directory in the source tree has a
symbolic link named ``RCS'' which points to the RCS subdirectory of the
corresponding directory in the ``rcs tree. At top-level in a source tree
is the ``RCSconfig'' file for that area. All subdirectories also have a
symbolic link to this RCSconfig file, allowing the configuration for an area to
be easily changed.
- build
- compiled object files are placed in this tree, which is subdivided
by machine type and version. The CMU CL search-list mechanism is used to allow
the source files to be located in a different tree than the object files. C
programs are compiled by using the
tools/dupsrcs
command to make
symbolic links to the corresponding source tree.
On order to modify an file in RCS, it must be checked out with a lock to
produce a writable working file. Each programmer checks out files into a
personal ``play area'' subtree of clisp/hackers
. These tree duplicate
the structure of source trees, but are normally empty except for files actively
being worked on.
See /afs/cs/project/clisp/pmax_mach/alpha/tools/
for
various tools we use for RCS hacking:
- rcs.lisp
- Hemlock (editor) commands for RCS file manipulation
- rcsupdate.c
- Program to check out all files in a tree that have been
modified since last checkout.
- updates
- Shell script to produce a single listing of all RCS log
entries in a tree since a date.
- snapshot-update.lisp
- Lisp program to generate a shell script which
generates a listing of updates since a particular RCS snapshot (RCSSNAP)
file was created.
You can easily operate on all RCS files in a subtree using:
find . -follow -name '*,v' -exec <some command> {} \;
Subsections