Alternate file systems

Michael Wagner wagner at dasher.UUCP
Wed Oct 12 01:45:36 AEST 1988


First, the global problem. We're trying to integrate a version control
system into the Unix(tm) file system. It would be similar to RCS with
version groups consisting of revisions organized on branches. The version
groups would act as both a directory of branches and revisions and as
a link to the default revision in the version group (normally the latest).
Thus if I had a version group named "main.c", the command "cc main.c" would
compile the default revision in the version group, while the command
"cat main.c/branch1/3" would list revision 3 on branch 1 of the version
group. Life gets really interesting when you consider that revision 3 may
not exist as clear text but has been stored in some delta format.

Next a potential solution. Create a special logical file system that is
mounted via NFS. All version groups are created within this file system
and referenced via symbolic links from the rest of the directory structure.
When an open call is issued on a version group itself (e.g., in the above
command "cc main.c") the default revision is opened and returned (possibly
reconstituting it). If a particular revision is opened (e.g., via
"cat main.c/branch1/3"), that revision is reconstituted and opened.

Potential problems: How could a machine export two different NFS servers,
one the standard Sun, Mt. Xinu, etc., version, and one this special
version control NFS server? Given that we can use NFS, can we rely on
the entire pathname (relative to the mount point) being passed to the server?
Would the server get passed "main.c/branch1/3" all in one chunk, or would
each element of the path name get evaluated separately? (The answer to
this isn't crucial, it would just be nice if we were given a single chunk.)

I'd be interested in hearing from anybody who has solved a similar problem
in a Unix environment. We've looked at a number of potential solutions, with
varying degrees of promise. The work on Watchdogs at the Univ. of Washington
solves this problem wonderfully. Unfortunately it involves hacking on the
kernel which we'd prefer to avoid. Another option might be to use device
drivers. The version group main.c would be made up of a device "main.c"
and some normal file, say ".main.c,v". Opening "main.c" would return
the default revision using ".main.c,v" for the version group data. This
gives you transparent access to a single revision, but it doesn't let you
at arbitrary revisions.

Comments from the audience?

Mike Wagner			Internet: wagner at dasher.siemens.com
Siemens Corporate Research	UUCP: ...!princeton!siemens!dasher!wagner
Princeton, NJ			Voice: (609)734-6568
		



More information about the Comp.unix.wizards mailing list