ClearCase-CRDB
view release on metacpan or search on metacpan
When used recursively in the forward direction, this script answers the
question "if I change file X, which derived files will need to be
rebuilt"? This is the classic use, the one for which it was written.
When used recursively in the backward direction it can depict the entire
dependency tree in an easily readable format.
Because extracting a recursive CR can be quite slow for large build
systems, whouses provides ways of dumping the CR data to a file
representation for speed. Use of "-save":
% whouses -do foo -save ...
will write out the data to foo.crdb. Subsequently, if foo.crdb exists it
will be used unless a new the "-do" flag is used. See also the "-db" and
"-fmt" flags.
The default save format is that of Data::Dumper. It was chosen because
it results in a nicely indented, human-readable text format file.
SELECTING DERIVED OBJECTS TO ANALYZE
If a "-do" flag is given, the CRs are taken from the specified derived
object(s). Multiple DOs may be specified with multiple "-do" flags or as
a comma-separated list. Alternatively, if the "CRDB_DO" environment
variable exists, its value is used as if specified with "-do".
If no DOs are specified directly, "whouses" will look for stored DO data
in files specified with "-db" or the "CRDB_DB" EV. The format is the
same as above.
Failing that, "whouses" will search for files named "*.crdb" along a
path specified with "-dir" or "CRDB_PATH", defaulting to the current
directory.
.AUDIT FILES
As a special case, derived objects matching the Perl regular expression
"/\.AUDIT/i" are ignored while traversing the recursive config spec.
These are presumed to be *meta-DOs* by convention, which aren't part of
the production build per se but rather pseudo-targets whose only purpose
is to hold CRs referring back to all real deliverables. Thus if you
construct your Makefile to create a meta-DO, you might want to name it
".AUDIT" or ".prog.AUDIT" or something.
ClearCase::CRDB
Most of the logic is actually in the "ClearCase::CRDB" module; the
"whouses" program is just a wrapper which uses the module. It's done
this way so ClearCase::CRDB can provide an API for other potential tools
which need to do CR analysis.
TRUE CODE ANALYSIS COMPARED
Whouses is somewhat different from "real" impact analysis products.
There are a number of such tools on the market, for example SNiFF+ from
WindRiver. Typically these work by parsing the source code into some
database representation which they can then analyze. It's a powerful
technique but entails some tradeoffs:
MINUSES
* A true code analysis tool must have knowledge of each programming
language in use. I.e. to add support for Java, a Java parser must be
added.
* A corollary of the above is that it requires lot of work by expert
programmers. Thus the tools tend to be large, complex and expensive.
Note: there is also *cscope* which is free, and maybe others. But as
the name implies *cscope* is limited to C-like languages.
* Another corollary is that the tool must track each advance in each
language, usually with significant lag time, and may not be
bug-for-bug compatible with the compiler.
* Also, since analysis basically entails compiling the code, analysis
of a large code base can take a long time, potentially as long or
longer than actually building it.
* If some part of the application is written in a language the tool
doesn't know (say Python or Visual Basic or Perl or an IDL), no
analysis of that area can take place.
PLUSES
* The analysis can be as granular and as language-knowledgeable as its
developers can make it. If you change the signature of a C function,
it can tell you how many uses of that function, in what files and on
what lines, will need to change.
* A code analysis tool may be tied to a set of languages but by the
same token it's NOT tied to a particular SCM or build system.
The minuses above are not design flaws but inherent tradeoffs. For true
code impact analysis you must buy one of these tools and accept the
costs.
Whouses doesn't attempt code analysis per se. As noted above, true code
analysis programs are tied to language but not to an SCM system. Whouses
flips this around; it doesn't care about language but it only works with
build systems that use clearmake within a ClearCase VOB.
Whouses takes the *config records* generated by clearmake, analyzes
them, and tells you which files depend on which other files according to
the CRs. Both techniques have fuzziness of different kinds: code
analysis predicts what the real compiler will do based on what the
analysis compiler found; divergence is possible. Whouses predicts what
the next build will do based on what the last build did. If changes have
taken place since, divergence is possible here too.
AUTHOR
David Boyce <dsbperl AT boyski.com>
COPYRIGHT
Copyright (c) 2000-2006 David Boyce. All rights reserved. This Perl
program is free software; you may redistribute and/or modify it under
the same terms as Perl itself.
STATUS
This is currently ALPHA code and thus I reserve the right to change the
UI incompatibly. At some point I'll bump the version suitably and remove
this warning, which will constitute an (almost) ironclad promise to
leave the interface alone.
PORTING
I've tried to write this in a platform independent style but it hasn't
been heavily tested on Windows (actually it hasn't been *all* that
heavily tested anywhere). It does pass "make test" on Windows and
appears to work fine in limited testing.
SEE ALSO
perl(1), ClearCase::CRDB(3), "cleartool man catcr"
( run in 1.176 second using v1.01-cache-2.11-cpan-2398b32b56e )