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]