I try here to collect problems met with the current system, and
which were disclosed during the process of converting it to
ClearCase.
Reusing files is not well supported. The responsabilities are bound
to the POB, which encourages to make copies, and to start diverging
from there, instead of maintaining common parts.
As soon as a file is moved to a different directory, which is
natural in case of reuse, the history gets broken.
An example of such a divergence can be found between the POBs
ouiman and ouisws.
In this case, the whole POB (ouiman) was duplicated for
further development. This was a pick-and-paste event, after which the
files started diverging, with no hope for them to be maintained in a
coherent fashion (emhancements, bug corrections, etc...)
The revision numbers are bound to the path where the files are
found: there is no notion of element having an identity.
The directories themselves are not versioned. If a file is removed
from a directory, there is no access any more to its history!
This was e.g. the case of
ouiman/ouitermx.c.
Nothing prevents that files with the same name (either versions of
the same file, or totally different files, either sources or derived
objects) exist in various directories.
ClearCase doesn't prevent it either, but it allows to detect which
version has been used in a given context.
Such a context may for instance be this of copying the file under
the PROJECT directory.
Under the RCS based system, there is no support for keeping track of issues like the following:
ClearCase offers a powerful tool to help with these problems:
configuration records, and the related cleartools:
catcr and diffcr.
With catcr, one can trivially answer to the first question,
usinf it non-recursively. This may be usefull also e.g. to list the
header files (and their actual full path and version!) included while
compiling a given source file.
The second question may require a recursive use, and the
grepping of the output.
A similar strategy can be used to answer the third question, by
applying this approach successively to the main derived objects, then
rescursively, down to their constituents to spot the precise uses.