Hi Alan (and others, should this move to COFF?)
I'm happy to hear that some folks appreciated
what I called "INEX" (for
include/exclude); one of my contributions to SCCS.
You just got yourself a big fan, anyone who had the insight to add includes
and excludes to SCCS is a smart cookie, thank you for those, BitKeeper makes
heavy use of them.
I've had to argue against RCS and, of course,
deal with CVS, much to my
chagrin.
You and me both.
Are you familiar with the concept of SCCS ID lists
(slists), which act as a
table of contents of a "unit" (usually a library or load module)?
That sounds like BitKeeper's ChangeSet file. BitKeeper's model is
repository based, a repository is a collection of SCCS files that are
all managed as a unit. It doesn't work this way but you could think
of the original content of the ChangeSet file as
src/foo.c 1.1
man/foo.1 1.1
It is <pathname> <revision>
The ChangeSet file is itself versioned so lets say you added a file,
then version 1.2 of the ChangeSet file is
src/foo.c 1.1
man/foo.1 1.1
examples/foo.eg 1.1
Because pathnames can change (BitKeeper has pathnames versioned just like
the content is version) we had to come up with a non-changing name for
pathnames (think inode # but it has to be globally unique). Ditto for
revisions, they get changed all the time because of merges.
BitKeeper's internal names look like (you can skip this for now):
Inode:
lm(a)lm.bitmover.com|man/WhatIs|19980710174007|58324|a9558aeac091a142
or
user(a)host.domain|relative/path|date|chksum|64 bits of /dev/random
Revision:
lm(a)work.bitmover.com|man/WhatIs|20000205064107|58704
or
same as the inode but skip the 64 bits.
Getting back to useful stuff, you can clone a repository to any commit,
all that does is check out that version of the ChangeSet file and strips
off deltas until the tip matches the revision from that version of the
ChangeSet file.
BitKeeper was the first fully distributed SCM system, Git, Hg, et al,
are all inspired by BitKeeper (and would have done well to copy it more
closely, Git in particular is just awful). BitKeeper owes a tremendous
nod to SCCS, SCCS taught me the value of that file format.
--lm