- Avoid both ,v files and RCS directories in working trees
- Allow the ,v files to be stored in a fully separate tree
Today, we have two places for a working file's ,v file:
- In the working file's working directory
- In an RCS subdirectory added to that working directory
I propose a third location, a mirror of that working directory
located by searching upward, through parent directories, for
a "dominating" .rcs directory. If such a directory is found, it
contains a parallel directory structure:
.../project
├── src
│ ├── foo.c
│ └── bar.c
├── inc
│ ├── foo.h
│ └── bar.h
├── doc
│ └── foo.md
└── .rcs
├── src
│ ├── foo.c,v
│ └── bar.c,v
├── inc
│ ├── foo.h,v
│ └── bar.h,v
└── doc
└── foo.md,v
How to search for a ,v file:
- Look in working file's directory
- If the working directory contains an RCS sub-directory,
then look there - If a "dominating" .rcs directory exists, look in the
corresponding directory
Where to create a new ,v file:
- If a "dominating" .rcs directory exists, ensure existence
of a corresponding directory and create it there - If a RCS sub-directory exists, create it there
- Create it in the working file's working directory
To provide a means of stopping the upward search for a .rcs
marker I propose a very simple .rcsstop marker.
At this point I take some inspiration from git for a separate
directory convention. This means allowing the "dominating"
.rcs marker to be a file, similar to .git. If it is a file then it is
a "file system agnostic" symbolic link to an out of tree .rcs
directory. The contents of this file is
rcsdir: <path>