wagner@dasher.UUCP (Michael Wagner) (10/11/88)
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@dasher.siemens.com Siemens Corporate Research UUCP: ...!princeton!siemens!dasher!wagner Princeton, NJ Voice: (609)734-6568