A less invasive rcs

John Yates <[email protected]> Sat, 13 Feb 2021 21:38:37 -0500
Newsgroups gmane.comp.gnu.rcs
Message-ID <CAJnXXogpH1v81yReYy7eYwJLfUg4TkouzydqH3vF1aA8QjdRNQ@mail.gmail.com>
--000000000000da824f05bb42c447
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

I am brainstorming some extensions to rcs that would

   - 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
        =E2=94=9C=E2=94=80=E2=94=80 src
        =E2=94=82   =E2=94=9C=E2=94=80=E2=94=80 foo.c
        =E2=94=82   =E2=94=94=E2=94=80=E2=94=80 bar.c
        =E2=94=9C=E2=94=80=E2=94=80 inc
        =E2=94=82   =E2=94=9C=E2=94=80=E2=94=80 foo.h
        =E2=94=82   =E2=94=94=E2=94=80=E2=94=80 bar.h
        =E2=94=9C=E2=94=80=E2=94=80 doc
        =E2=94=82   =E2=94=94=E2=94=80=E2=94=80 foo.md
        =E2=94=94=E2=94=80=E2=94=80 .rcs
            =E2=94=9C=E2=94=80=E2=94=80 src
            =E2=94=82   =E2=94=9C=E2=94=80=E2=94=80 foo.c,v
            =E2=94=82   =E2=94=94=E2=94=80=E2=94=80 bar.c,v
            =E2=94=9C=E2=94=80=E2=94=80 inc
            =E2=94=82   =E2=94=9C=E2=94=80=E2=94=80 foo.h,v
            =E2=94=82   =E2=94=94=E2=94=80=E2=94=80 bar.h,v
            =E2=94=94=E2=94=80=E2=94=80 doc
                =E2=94=94=E2=94=80=E2=94=80 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>


Does this seem too crazy?  Any implementation suggestions?
Where is the relevant search logic implemented in the rcs
source?

/john

--000000000000da824f05bb42c447
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:arial,he=
lvetica,sans-serif">I am brainstorming some extensions to rcs that would</d=
iv><div class=3D"gmail_default" style=3D""><ul style=3D"font-family:arial,h=
elvetica,sans-serif"><li>Avoid both ,v files and RCS directories in working=
 trees</li><li>Allow the ,v files to be stored in a fully separate tree</li=
></ul><div style=3D"font-family:arial,helvetica,sans-serif">Today, we have =
two places for a working file&#39;s ,v file:</div><div style=3D"font-family=
:arial,helvetica,sans-serif"><ul><li>In the working file&#39;s working dire=
ctory</li><li>In an RCS subdirectory added to that working directory</li></=
ul><div>I propose a=C2=A0third location, a=C2=A0mirror of that working dire=
ctory<br>located by searching upward, through parent directories, for<br>a =
&quot;dominating&quot; .rcs directory.=C2=A0 If such a directory is found, =
it<br>contains a parallel directory structure:</div></div><div style=3D"fon=
t-family:arial,helvetica,sans-serif"><br></div><div style=3D""><font face=
=3D"monospace">=C2=A0 =C2=A0 .../project<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=
=94=9C=E2=94=80=E2=94=80 src<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82 =C2=
=A0 =E2=94=9C=E2=94=80=E2=94=80 foo.c<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=
=82 =C2=A0 =E2=94=94=E2=94=80=E2=94=80 bar.c<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =E2=94=9C=E2=94=80=E2=94=80 inc<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82 =
=C2=A0 =E2=94=9C=E2=94=80=E2=94=80 foo.h<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=
=94=82 =C2=A0 =E2=94=94=E2=94=80=E2=94=80 bar.h<br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =E2=94=9C=E2=94=80=E2=94=80 doc<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=
=82 =C2=A0 =E2=94=94=E2=94=80=E2=94=80 foo.md<br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =E2=94=94=E2=94=80=E2=94=80 .rcs<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =E2=94=9C=E2=94=80=E2=94=80 src<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =E2=94=82 =C2=A0 =E2=94=9C=E2=94=80=E2=94=80 foo.c,v<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82 =C2=A0 =E2=94=94=E2=94=80=E2=
=94=80 bar.c,v<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=9C=E2=94=
=80=E2=94=80 inc<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=82 =C2=
=A0 =E2=94=9C=E2=94=80=E2=94=80 foo.h,v<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =E2=94=82 =C2=A0 =E2=94=94=E2=94=80=E2=94=80 bar.h,v<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=94=E2=94=80=E2=94=80 doc<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =E2=94=94=E2=94=80=E2=
=94=80 foo.md,v<br></font></div><div style=3D"font-family:arial,helvetica,s=
ans-serif"><br></div><div style=3D"font-family:arial,helvetica,sans-serif">=
How to search for a ,v file:</div><div style=3D"font-family:arial,helvetica=
,sans-serif"><ul><li>Look in working file&#39;s directory</li><li>If the wo=
rking directory contains an RCS sub-directory,<br>then look there</li><li>I=
f a &quot;dominating&quot; .rcs directory exists, look in the<br>correspond=
ing directory</li></ul><div>Where to create a new ,v file:</div><div><ul><l=
i>If a &quot;dominating&quot; .rcs directory exists, ensure existence<br>of=
 a corresponding directory and create it there</li><li>If a RCS sub-directo=
ry exists, create it there</li><li>Create it in the working file&#39;s work=
ing directory</li></ul></div></div><div style=3D"font-family:arial,helvetic=
a,sans-serif"><div><div class=3D"gmail_default">To provide a means of stopp=
ing the upward search for a .rcs<br>marker I propose a very simple .rcsstop=
 marker.</div></div><div class=3D"gmail_default"><br></div><div class=3D"gm=
ail_default"></div></div><div style=3D"font-family:arial,helvetica,sans-ser=
if">At this point I take some inspiration from git for a separate</div><div=
 style=3D"font-family:arial,helvetica,sans-serif">directory convention.=C2=
=A0 This means allowing the &quot;dominating&quot;</div><div style=3D"font-=
family:arial,helvetica,sans-serif">.rcs marker to be a file,=C2=A0similar t=
o .git.=C2=A0 If it is a file then it is</div><div style=3D"font-family:ari=
al,helvetica,sans-serif">a &quot;file system agnostic&quot; symbolic link t=
o an out of tree .rcs</div><div style=3D"font-family:arial,helvetica,sans-s=
erif">directory.=C2=A0 The contents of this file is</div><div style=3D"font=
-family:arial,helvetica,sans-serif"><br></div><div style=3D"font-family:ari=
al,helvetica,sans-serif">=C2=A0 =C2=A0 rcsdir: &lt;path&gt;</div></div><div=
><br></div><div class=3D"gmail_default" style=3D"font-family:arial,helvetic=
a,sans-serif"><br></div><div class=3D"gmail_default" style=3D"font-family:a=
rial,helvetica,sans-serif">Does this seem too crazy?=C2=A0 Any implementati=
on suggestions?</div><div class=3D"gmail_default" style=3D"font-family:aria=
l,helvetica,sans-serif">Where is the relevant search logic implemented in t=
he rcs</div><div class=3D"gmail_default" style=3D"font-family:arial,helveti=
ca,sans-serif">source?</div><div class=3D"gmail_default" style=3D"font-fami=
ly:arial,helvetica,sans-serif"><br></div><div class=3D"gmail_default" style=
=3D"font-family:arial,helvetica,sans-serif">/john</div><div class=3D"gmail_=
default" style=3D"font-family:arial,helvetica,sans-serif"><br></div></div>

--000000000000da824f05bb42c447--