rcs: Still missing
3.3 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, ⇒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 co invocations.
• 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; this allows ‘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
properly.
• Permit multiple option–filename pairs, e.g., ‘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 ‘getdate’ by
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 ‘getdate’.)
• 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 terminal.
• 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.
• Have ‘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 default branches.
• 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 of ‘vc-annotate’, q.v. —ttn]