4 Still missing
RCS is still missing some features. The following is an unordered list
of “to-do musings” kept by the RCS maintainers. If you would like to
hack on an item, See Reporting bugs.
- Add an option to rcsmerge so that it can use an arbitrary
program to do the 3-way merge, instead of the default merge.
Likewise for rcsdiff and diff. It should be
possible to pass arbitrary options to these programs, and to the subsidiary
- Add format options for finer control over the output of
ident and rlog. E.g. there should be an easy way
for rlog to output lines like ‘src/main.c 2.4 wft’, one for each locked
revision. rlog options should have three orthogonal types:
selecting files, selecting revisions, and selecting rlog format.
- Add format options for finer control over the output of keyword
strings. E.g. there should be some way to prepend ‘@(#)’, and
there should be some way to change ‘$’ to some other character to
disable further substitution. These options should make the resulting
files uneditable, like ‘-kv’.
- Add long options, e.g. --keyword-substitution.
Unfortunately RCS’s option syntax is incompatible with getopt. Perhaps
the best way is to overload rcs, e.g., ‘rcs diff
--keyword-substitution=old file’ instead of ‘rcsdiff -ko file’.
rlog -rM:N should work even if M and N have
different numbers of fields, so long as M is an ancestor of
N or vice versa.
- rcs should evaluate options in order;
rcs -oS -nS.
- Be able to redo your most recent checkin with minor changes.
co -u shouldn’t complain about a ‘+w’ working
file if contents don’t change.
- Add a ‘-’ option to take the list of file names from
standard input. Perhaps the file names should be null-terminated, not
newline-terminated, so that those that contain newlines are handled
- Permit multiple option–filename pairs,
co -r1.4 a -r1.5 b.
- Add an option to break a symbolic link to an RCS file,
instead of breaking the hard link that it points to.
- Add ways to specify the earliest revision, the most recent
revision, the earliest or latest revision on a particular branch, and
the parent or child of some other revision.
- If a user has multiple locks, perhaps ci should fall
back on the method of
ci -k to figure out which revision to use.
- Add an option to rcsclean to clean directories recursively.
- Write an rcsck program that repairs corrupted RCS files,
much as fsck repairs corrupted file systems. For example, it should
remove stale lock files.
- Update the date parser to use the more modern getdate.y
by Bellovin, Salz, and Berets, or the even more modern
Moraes. None of these getdate implementations are as robust as RCS’s
old warhorse in avoiding problems like arithmetic overflow, so they’ll
have to be fixed first. (Perhaps we can use gnulib module
- Break up the code into a library so that it’s easier to write
new programs that manipulate RCS files, and so that useless code is
removed from the existing programs. For example, the rcs
command contains unnecessary keyword substitution baggage, and the
merge command can be greatly pruned.
- Make it easier to use your favorite text editor to edit log
messages, etc., instead of having to type them in irretrievably at the
- Let the user specify a search path for default branches,
e.g., to use L as the default branch if it works, and M
otherwise. Let the user require that at least one entry in the
search path works. Let the user say that later entries in the
search path are read only, i.e. one cannot check in changes to them.
This should be an option settable by ‘RCSINIT’.
- Add a way for a user to see which revisions affected which lines.
rlog -nN F print just the revision number that
N translates to. E.g.,
rlog -nB. F would print the highest
revision on the branch B. Use this to add an option -bB to
rcsbranch, to freeze the named branch. This should interact well with
- Add a co option that prints the revision number before
each line, as SCCS’s
get -m does.
[I implemented this for Emacs 22 as a subroutine
vc-annotate, q.v. —ttn]