Home | History | Annotate | Line # | Download | only in dist
      1  1.1  christos Recent changes to RCS (and possible future changes)
      2  1.1  christos 
      3  1.1  christos 	Id: NEWS,v 1.5 1995/06/16 06:19:24 eggert Exp 
      4  1.1  christos 
      5  1.1  christos 	Copyright 1991, 1992, 1993, 1994, 1995 Paul Eggert
      6  1.1  christos 	Distributed under license by the Free Software Foundation, Inc.
      7  1.1  christos 
      8  1.1  christos 	This file is part of RCS.
      9  1.1  christos 
     10  1.1  christos 	RCS is free software; you can redistribute it and/or modify it
     11  1.1  christos 	under the terms of the GNU General Public License as published
     12  1.1  christos 	by the Free Software Foundation; either version 2, or (at your
     13  1.1  christos 	option) any later version.
     14  1.1  christos 
     15  1.1  christos 	RCS is distributed in the hope that it will be useful, but
     16  1.1  christos 	WITHOUT ANY WARRANTY; without even the implied warranty of
     17  1.1  christos 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18  1.1  christos 	GNU General Public License for more details.
     19  1.1  christos 
     20  1.1  christos 	You should have received a copy of the GNU General Public License
     21  1.1  christos 	along with RCS; see the file COPYING.
     22  1.1  christos 	If not, write to the Free Software Foundation,
     23  1.1  christos 	59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     24  1.1  christos 
     25  1.1  christos 	Report problems and direct all questions to:
     26  1.1  christos 
     27  1.1  christos 		rcs-bugs (a] cs.purdue.edu
     28  1.1  christos 
     29  1.1  christos 
     30  1.1  christos Here is a brief summary of user-visible changes since 5.6.
     31  1.1  christos 
     32  1.1  christos   New options:
     33  1.1  christos     `-kb' supports binary files.
     34  1.1  christos     `-T' preserves the modification time of RCS files.
     35  1.1  christos     `-V' prints the version number.
     36  1.1  christos     `-zLT' causes RCS to use local time in working files and logs.
     37  1.1  christos     `rcsclean -n' outputs what rcsclean would do, without actually doing it.
     38  1.1  christos     `rlog -N' omits symbolic names.
     39  1.1  christos   There is a new keyword `Name'.
     40  1.1  christos   Inserted log lines now have the same prefix as the preceding `$Log' line.
     41  1.1  christos 
     42  1.1  christos Most changes for RCS version 5.7 are to fix bugs and improve portability.
     43  1.1  christos RCS now conforms to GNU configuration standards and to Posix 1003.1b-1993.
     44  1.1  christos 
     45  1.1  christos 
     46  1.1  christos Features new to RCS version 5.7, and possibly incompatible
     47  1.1  christos in minor ways with previous practice, include:
     48  1.1  christos 
     49  1.1  christos   Inserted log lines now have the same prefix as the preceding `$Log' line.
     50  1.1  christos   E.g. if a Log line starts with `// Log', log lines are prefixed with `// '.
     51  1.1  christos   RCS still records the (now obsolescent) comment leader inside RCS files,
     52  1.1  christos   but it ignores the comment leader unless it is emulating older RCS versions.
     53  1.1  christos   If you plan to access a file with both old and new versions of RCS,
     54  1.1  christos   make sure its comment leader matches its `$Log' line prefix.
     55  1.1  christos   For backwards compatibility with older versions of RCS,
     56  1.1  christos   if the log prefix is `/*' or `(*' surrounded by optional white space,
     57  1.1  christos   inserted log lines contain ` *' instead of `/*' or `(*';
     58  1.1  christos   however, this usage is obsolescent and should not be relied on.
     59  1.1  christos 
     60  1.1  christos   $Log string `Revision' times now use the same format as other times.
     61  1.1  christos 
     62  1.1  christos   Log lines are now inserted even if -kk is specified; this simplifies merging.
     63  1.1  christos 
     64  1.1  christos   ci's -rR option (with a nonempty R) now just specifies a revision number R.
     65  1.1  christos   In some beta versions, it also reestablished the default behavior of
     66  1.1  christos   releasing a lock and removing the working file.
     67  1.1  christos   Now, only the bare -r option does this.
     68  1.1  christos 
     69  1.1  christos   With an empty extension, any appearance of a directory named `RCS'
     70  1.1  christos   in a pathname identifies the pathname as being that of an RCS file.
     71  1.1  christos   For example, `a/RCS/b/c' is now an RCS file with an empty extension.
     72  1.1  christos   Formerly, `RCS' had to be the last directory in the pathname.
     73  1.1  christos 
     74  1.1  christos   rlog's -d option by default now uses exclusive time ranges.
     75  1.1  christos   E.g. `rlog -d"<T"' now excludes revisions whose times equal T exactly.
     76  1.1  christos   Use `rlog -d"<=T"' to get the old behavior.
     77  1.1  christos 
     78  1.1  christos   merge now takes up to three -L options, one for each input file.
     79  1.1  christos   Formerly, it took at most two -L options, for the 1st and 3rd input files.
     80  1.1  christos 
     81  1.1  christos   `rcs' now requires at least one option; this is for future expansion.
     82  1.1  christos 
     83  1.1  christos Other features new to RCS version 5.7 include:
     84  1.1  christos 
     85  1.1  christos   merge and rcsmerge now pass -A, -E, and -e options to the subsidiary diff3.
     86  1.1  christos 
     87  1.1  christos   rcs -kb acts like rcs -ko, except it uses binary I/O on working files.
     88  1.1  christos   This makes no difference under Posix or Unix, but it does matter elsewhere.
     89  1.1  christos   With -kb in effect, rcsmerge refuses to merge;
     90  1.1  christos   this avoids common problems with CVS merging.
     91  1.1  christos 
     92  1.1  christos   The following is for future use by GNU Emacs 19's version control package:
     93  1.1  christos 
     94  1.1  christos     rcs's new -M option causes it to not send mail when you break somebody
     95  1.1  christos     else's lock.  This is not meant for casual use; see rcs(1).
     96  1.1  christos 
     97  1.1  christos     ci's new -i option causes an error if the RCS file already exists.
     98  1.1  christos     Similarly, -j causes an error if the RCS file does not already exist.
     99  1.1  christos 
    100  1.1  christos   The new keyword `Name' is supported; its value is the name, if any,
    101  1.1  christos   used to check out the revision.  E.g. `co -rN foo' causes foo's
    102  1.1  christos   Name...$ keyword strings to end in `: N '.
    103  1.1  christos 
    104  1.1  christos   The new -zZONE option causes RCS to output dates and times using ISO 8601
    105  1.1  christos   format with ZONE as the time zone, and to use ZONE as the default time
    106  1.1  christos   zone for input.  Its most common use is the -zLT option, which causes RCS
    107  1.1  christos   to use local time externally.  You can also specify foreign time zones;
    108  1.1  christos   e.g. -z+05:30 causes RCS to use India time (5 hours 30 minutes east of UTC).
    109  1.1  christos   This option does not affect RCS files themselves, which always use UTC;
    110  1.1  christos   it affects only output (e.g. rlog output, keyword expansion, diff -c times)
    111  1.1  christos   and interpretation of options (e.g. the -d option of ci, co, and rlog).
    112  1.1  christos   Bare -z restores the default behavior of UTC with no time zone indication,
    113  1.1  christos   and the traditional RCS date separator `/' instead of the ISO 8601 `-'.
    114  1.1  christos   RCSINIT may contain a -z option.  ci -k parses UTC offsets.
    115  1.1  christos 
    116  1.1  christos   The new -T option of ci, co, rcs, and rcsclean preserves the modification
    117  1.1  christos   time of the RCS file unless a revision is added or removed.
    118  1.1  christos   ci -T sets the RCS file's modification time to the new revision's time
    119  1.1  christos   if the former precedes the latter and there is a new revision;
    120  1.1  christos   otherwise, it preserves the RCS file's modification time.
    121  1.1  christos   Use this option with care, as it can confuse `make'; see ci(1).
    122  1.1  christos 
    123  1.1  christos   The new -N option of rlog omits symbolic names from the output.
    124  1.1  christos 
    125  1.1  christos   A revision number that starts with `.' is considered to be relative to
    126  1.1  christos   the default branch (normally the trunk).  A branch number followed by `.'
    127  1.1  christos   stands for the last revision on that branch.
    128  1.1  christos 
    129  1.1  christos   If someone else already holds the lock, rcs -l now asks whether you want
    130  1.1  christos   to break it, instead of immediately reporting an error.
    131  1.1  christos 
    132  1.1  christos   ci now always unlocks a revision like 3.5 if you check in a revision
    133  1.1  christos   like 3.5.2.1 that is the first of a new branch of that revision.
    134  1.1  christos   Formerly it was inconsistent.
    135  1.1  christos 
    136  1.1  christos   File names may now contain tab, newline, space, and '$'.
    137  1.1  christos   They are represented in keyword strings with \t, \n, \040, and \044.
    138  1.1  christos   \ in a file name is now represented by \\ in a keyword string.
    139  1.1  christos 
    140  1.1  christos   Identifiers may now start with a digit and (unless they are symbolic names)
    141  1.1  christos   may contain `.'.  This permits author names like `john.doe' and `4tran'.
    142  1.1  christos 
    143  1.1  christos   A bare -V option now prints the current version number.
    144  1.1  christos 
    145  1.1  christos   rcsdiff outputs more readable context diff headers if diff -L works.
    146  1.1  christos 
    147  1.1  christos   rcsdiff -rN -rN now suppresses needless checkout and comparison
    148  1.1  christos   of identical revisions.
    149  1.1  christos 
    150  1.1  christos   Error messages now contain the names of files to which they apply.
    151  1.1  christos 
    152  1.1  christos   Mach style memory mapping is now supported.
    153  1.1  christos 
    154  1.1  christos   The installation procedure now conforms to the GNU coding standards.
    155  1.1  christos 
    156  1.1  christos   When properly configured, RCS now strictly conforms to Posix 1003.1b-1993.
    157  1.1  christos 
    158  1.1  christos 
    159  1.1  christos Features new to RCS version 5.6 include:
    160  1.1  christos 
    161  1.1  christos   Security holes have been plugged; setgid use is no longer supported.
    162  1.1  christos 
    163  1.1  christos   co can retrieve old revisions much more efficiently.
    164  1.1  christos   To generate the Nth youngest revision on the trunk,
    165  1.1  christos   the old method used up to N passes through copies of the working file;
    166  1.1  christos   the new method uses a piece table to generate the working file in one pass.
    167  1.1  christos 
    168  1.1  christos   When ci finds no changes in the working file,
    169  1.1  christos   it automatically reverts to the previous revision unless -f is given.
    170  1.1  christos 
    171  1.1  christos   RCS follows symbolic links to RCS files instead of breaking them,
    172  1.1  christos   and warns when it breaks hard links to RCS files.
    173  1.1  christos 
    174  1.1  christos   `$' stands for the revision number taken from working file keyword strings.
    175  1.1  christos   E.g. if F contains an Id keyword string,
    176  1.1  christos   `rcsdiff -r$ F' compares F to its checked-in revision, and
    177  1.1  christos   `rcs -nL:$ F' gives the symbolic name L to F's revision.
    178  1.1  christos 
    179  1.1  christos   co and ci's new -M option sets the modification time
    180  1.1  christos   of the working file to be that of the revision.
    181  1.1  christos   Without -M, ci now tries to avoid changing the working file's
    182  1.1  christos   modification time if its contents are unchanged.
    183  1.1  christos 
    184  1.1  christos   rcs's new -m option changes the log message of an old revision.
    185  1.1  christos 
    186  1.1  christos   RCS is portable to hosts that do not permit `,' in filenames.
    187  1.1  christos   (`,' is not part of the Posix portable filename character set.)
    188  1.1  christos   A new -x option specifies extensions other than `,v' for RCS files.
    189  1.1  christos   The Unix default is `-x,v/', so that the working file `w' corresponds
    190  1.1  christos   to the first file in the list `RCS/w,v', `w,v', `RCS/w' that works.
    191  1.1  christos   The non-Unix default is `-x', so that only `RCS/w' is tried.
    192  1.1  christos   Eventually, the Unix default should change to `-x/,v'
    193  1.1  christos   to encourage interoperability among all Posix hosts.
    194  1.1  christos 
    195  1.1  christos   A new RCSINIT environment variable specifies defaults for options like -x.
    196  1.1  christos 
    197  1.1  christos   The separator for revision ranges has been changed from `-' to `:', because
    198  1.1  christos   the range `A-B' is ambiguous if `A', `B' and `A-B' are all symbolic names.
    199  1.1  christos   E.g. the old `rlog -r1.5-1.7' is now `rlog -r1.5:1.7'; ditto for `rcs -o'.
    200  1.1  christos   For a while RCS will still support (but warn about) the old `-' separator.
    201  1.1  christos 
    202  1.1  christos   RCS manipulates its lock files using a method that is more reliable under NFS.
    203  1.1  christos 
    204  1.1  christos 
    205  1.1  christos Features new to RCS version 5 include:
    206  1.1  christos 
    207  1.1  christos   RCS can check in arbitrary files, not just text files, if diff -a works.
    208  1.1  christos   RCS can merge lines containing just a single `.' if diff3 -m works.
    209  1.1  christos   GNU diff supports the -a and -m options.
    210  1.1  christos 
    211  1.1  christos   RCS can now be used as a setuid program.
    212  1.1  christos   See ci(1) for how users can employ setuid copies of ci, co, and rcsclean.
    213  1.1  christos   Setuid privileges yield extra security if the effective user owns RCS files
    214  1.1  christos   and directories, and if only the effective user can write RCS directories.
    215  1.1  christos   RCS uses the real user for all accesses other than writing RCS directories.
    216  1.1  christos   As described in ci(1), there are three levels of setuid support.
    217  1.1  christos 
    218  1.1  christos     1.  Setuid works fully if the seteuid() system call lets any
    219  1.1  christos     process switch back and forth between real and effective users,
    220  1.1  christos     as specified in Posix 1003.1a Draft 5.
    221  1.1  christos 
    222  1.1  christos     2.  On hosts with saved setuids (a Posix 1003.1-1990 option) and without
    223  1.1  christos     a modern seteuid(), setuid works unless the real or effective user is root.
    224  1.1  christos 
    225  1.1  christos     3.  On hosts that lack both modern seteuid() and saved setuids,
    226  1.1  christos     setuid does not work, and RCS uses the effective user for all accesses;
    227  1.1  christos     formerly it was inconsistent.
    228  1.1  christos 
    229  1.1  christos   New options to co, rcsdiff, and rcsmerge give more flexibility to keyword
    230  1.1  christos   substitution.
    231  1.1  christos 
    232  1.1  christos     -kkv substitutes the default `$Keyword: value $' for keyword strings.
    233  1.1  christos     However, a locker's name is inserted only as a file is being locked,
    234  1.1  christos     i.e. by `ci -l' and `co -l'.  This is normally the default.
    235  1.1  christos 
    236  1.1  christos     -kkvl acts like -kkv, except that a locker's name is always inserted
    237  1.1  christos     if the given revision is currently locked.  This was the default in
    238  1.1  christos     version 4.  It is now the default only with when using rcsdiff to
    239  1.1  christos     compare a revision to a working file whose mode is that of a file
    240  1.1  christos     checked out for changes.
    241  1.1  christos 
    242  1.1  christos     -kk substitutes just `$Keyword$', which helps to ignore keyword values
    243  1.1  christos     when comparing revisions.
    244  1.1  christos 
    245  1.1  christos     -ko retrieves the old revision's keyword string, thus bypassing keyword
    246  1.1  christos     substitution.
    247  1.1  christos 
    248  1.1  christos     -kv retrieves just `value'.  This can ease the use of keyword values, but
    249  1.1  christos     it is dangerous because it causes RCS to lose track of where the keywords
    250  1.1  christos     are, so for safety the owner write permission of the working file is
    251  1.1  christos     turned off when -kv is used; to edit the file later, check it out again
    252  1.1  christos     without -kv.
    253  1.1  christos 
    254  1.1  christos   rcs -ko sets the default keyword substitution to be in the style of co -ko,
    255  1.1  christos   and similarly for the other -k options.  This can be useful with file
    256  1.1  christos   formats that cannot tolerate changing the lengths of keyword strings.
    257  1.1  christos   However it also renders a RCS file readable only by RCS version 5 or later.
    258  1.1  christos   Use rcs -kkv to restore the usual default substitution.
    259  1.1  christos 
    260  1.1  christos   RCS can now be used by development groups that span time zone boundaries.
    261  1.1  christos   All times are now displayed in UTC, and UTC is the default time zone.
    262  1.1  christos   To use local time with co -d, append ` LT' to the time.
    263  1.1  christos   When interchanging RCS files with sites running older versions of RCS,
    264  1.1  christos   time stamp discrepancies may prevent checkins; to work around this,
    265  1.1  christos   use `ci -d' with a time slightly in the future.
    266  1.1  christos 
    267  1.1  christos   Dates are now displayed using four-digit years, not two-digit years.
    268  1.1  christos   Years given in -d options must now have four digits.
    269  1.1  christos   This change is required for RCS to continue to work after 1999/12/31.
    270  1.1  christos   The form of dates in version 5 RCS files will not change until 2000/01/01,
    271  1.1  christos   so in the meantime RCS files can still be interchanged with sites
    272  1.1  christos   running older versions of RCS.  To make room for the longer dates,
    273  1.1  christos   rlog now outputs `lines: +A -D' instead of `lines added/del: A/D'.
    274  1.1  christos 
    275  1.1  christos   To help prevent diff programs that are broken or have run out of memory
    276  1.1  christos   from trashing an RCS file, ci now checks diff output more carefully.
    277  1.1  christos 
    278  1.1  christos   ci -k now handles the Log keyword, so that checking in a file
    279  1.1  christos   with -k does not normally alter the file's contents.
    280  1.1  christos 
    281  1.1  christos   RCS no longer outputs white space at the ends of lines
    282  1.1  christos   unless the original working file had it.
    283  1.1  christos   For consistency with other keywords,
    284  1.1  christos   a space, not a tab, is now output after `$Log:'.
    285  1.1  christos   Rlog now puts lockers and symbolic names on separate lines in the output
    286  1.1  christos   to avoid generating lines that are too long.
    287  1.1  christos   A similar fix has been made to lists in the RCS files themselves.
    288  1.1  christos 
    289  1.1  christos   RCS no longer outputs the string `Locker: ' when expanding Header or Id
    290  1.1  christos   keywords.  This saves space and reverts back to version 3 behavior.
    291  1.1  christos 
    292  1.1  christos   The default branch is not put into the RCS file unless it is nonempty.
    293  1.1  christos   Therefore, files generated by RCS version 5 can be read by RCS version 3
    294  1.1  christos   unless they use the default branch feature introduced in version 4.
    295  1.1  christos   This fixes a compatibility problem introduced by version 4.
    296  1.1  christos 
    297  1.1  christos   RCS can now emulate older versions of RCS; see `co -V'.
    298  1.1  christos   This may be useful to overcome compatibility problems
    299  1.1  christos   due to the above changes.
    300  1.1  christos 
    301  1.1  christos   Programs like Emacs can now interact with RCS commands via a pipe:
    302  1.1  christos   the new -I option causes ci, co, and rcs to run interactively,
    303  1.1  christos   even if standard input is not a terminal.
    304  1.1  christos   These commands now accept multiple inputs from stdin separated by `.' lines.
    305  1.1  christos 
    306  1.1  christos   ci now silently ignores the -t option if the RCS file already exists.
    307  1.1  christos   This simplifies some shell scripts and improves security in setuid sites.
    308  1.1  christos 
    309  1.1  christos   Descriptive text may be given directly in an argument of the form -t-string.
    310  1.1  christos 
    311  1.1  christos   The character set for symbolic names has been upgraded
    312  1.1  christos   from Ascii to ISO 8859.
    313  1.1  christos 
    314  1.1  christos   rcsdiff now passes through all options used by GNU diff;
    315  1.1  christos   this is a longer list than 4.3BSD diff.
    316  1.1  christos 
    317  1.1  christos   merge's new -L option gives tags for merge's overlap report lines.
    318  1.1  christos   This ability used to be present in a different, undocumented form;
    319  1.1  christos   the new form is chosen for compatibility with GNU diff3's -L option.
    320  1.1  christos 
    321  1.1  christos   rcsmerge and merge now have a -q option, just like their siblings do.
    322  1.1  christos 
    323  1.1  christos   rcsclean's new -n option outputs what rcsclean would do,
    324  1.1  christos   without actually doing it.
    325  1.1  christos 
    326  1.1  christos   RCS now attempts to ignore parts of an RCS file that look like they come
    327  1.1  christos   from a future version of RCS.
    328  1.1  christos 
    329  1.1  christos   When properly configured, RCS now strictly conforms with Posix 1003.1-1990.
    330  1.1  christos   RCS can still be compiled in non-Posix traditional Unix environments,
    331  1.1  christos   and can use common BSD and USG extensions to Posix.
    332  1.1  christos   RCS is a conforming Standard C program, and also compiles under traditional C.
    333  1.1  christos 
    334  1.1  christos   Arbitrary limits on internal table sizes have been removed.
    335  1.1  christos   The only limit now is the amount of memory available via malloc().
    336  1.1  christos 
    337  1.1  christos   File temporaries, lock files, signals, and system call return codes
    338  1.1  christos   are now handled more cleanly, portably, and quickly.
    339  1.1  christos   Some race conditions have been removed.
    340  1.1  christos 
    341  1.1  christos   A new compile-time option RCSPREFIX lets administrators avoid absolute path
    342  1.1  christos   names for subsidiary programs, trading speed for flexibility.
    343  1.1  christos 
    344  1.1  christos   The configuration procedure is now more automatic.
    345  1.1  christos 
    346  1.1  christos   Snooping has been removed.
    347  1.1  christos 
    348  1.1  christos 
    349  1.1  christos Version 4 was the first version distributed by FSF.
    350  1.1  christos Beside bug fixes, features new to RCS version 4 include:
    351  1.1  christos 
    352  1.1  christos   The notion of default branch has been added; see rcs -b.
    353  1.1  christos 
    354  1.1  christos 
    355  1.1  christos Version 3 was included in the 4.3BSD distribution.
    356  1.1  christos 
    357  1.1  christos 
    358  1.1  christos Here are some possible future changes for RCS:
    359  1.1  christos 
    360  1.1  christos   Bring back sccstorcs.
    361  1.1  christos 
    362  1.1  christos   Add an option to `rcsmerge' so that it can use an arbitrary program
    363  1.1  christos   to do the 3-way merge, instead of the default `merge'.
    364  1.1  christos   Likewise for `rcsdiff' and `diff'.  It should be possible to pass
    365  1.1  christos   arbitrary options to these programs, and to the subsidiary `co's.
    366  1.1  christos 
    367  1.1  christos   Add format options for finer control over the output of ident and rlog.
    368  1.1  christos   E.g. there should be an easy way for rlog to output lines like
    369  1.1  christos   `src/main.c 2.4 wft', one for each locked revision.
    370  1.1  christos   rlog options should have three orthogonal types: selecting files,
    371  1.1  christos   selecting revisions, and selecting rlog format.
    372  1.1  christos 
    373  1.1  christos   Add format options for finer control over the output of keyword strings.
    374  1.1  christos   E.g. there should be some way to prepend @(#), and there should be some
    375  1.1  christos   way to change $ to some other character to disable further substitution.
    376  1.1  christos   These options should make the resulting files uneditable, like -kv.
    377  1.1  christos 
    378  1.1  christos   Add long options, e.g. `--version'.  Unfortunately RCS's option syntax
    379  1.1  christos   is incompatible with getopt.  Perhaps the best way is to overload `rcs', e.g.
    380  1.1  christos   `rcs diff --keyword-substitution=old file' instead of `rcsdiff -ko file'.
    381  1.1  christos 
    382  1.1  christos   Add a way to put only the interesting part of the path into the $Header
    383  1.1  christos   keyword expansion.
    384  1.1  christos 
    385  1.1  christos   rlog -rM:N should work even if M and N have different numbers of fields,
    386  1.1  christos   so long as M is an ancestor of N or vice versa.
    387  1.1  christos 
    388  1.1  christos   rcs should evaluate options in order; this allows rcs -oS -nS.
    389  1.1  christos 
    390  1.1  christos   rcs should be able to fix minor mistakes in checkin dates and authors.
    391  1.1  christos 
    392  1.1  christos   Be able to redo your most recent checkin with minor changes.
    393  1.1  christos 
    394  1.1  christos   co -u shouldn't complain about a writable working file if it won't change
    395  1.1  christos   its contents.
    396  1.1  christos 
    397  1.1  christos   Configure the Makefile automatically, as well as conf.h.
    398  1.1  christos 
    399  1.1  christos   Add a new option to rcs that behaves like -o, but that doesn't lose the
    400  1.1  christos   nonempty log messages, but instead merges them with the next revision
    401  1.1  christos   if it exists, perhaps with a 1-line header containing author, date, etc.
    402  1.1  christos 
    403  1.1  christos   Add a `-' option to take the list of pathnames from standard input.
    404  1.1  christos   Perhaps the pathnames should be null-terminated, not newline-terminated,
    405  1.1  christos   so that pathnames that contain newlines are handled properly.
    406  1.1  christos 
    407  1.1  christos   Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b.
    408  1.1  christos 
    409  1.1  christos   Add options to allow arbitrary combinations of working file names
    410  1.1  christos   with RCS file names -- they shouldn't have to match.
    411  1.1  christos 
    412  1.1  christos   Add an option to break a symbolic link to an RCS file,
    413  1.1  christos   instead of breaking the hard link that it points to.
    414  1.1  christos 
    415  1.1  christos   Add ways to specify the earliest revision, the most recent revision,
    416  1.1  christos   the earliest or latest revision on a particular branch, and
    417  1.1  christos   the parent or child of some other revision.
    418  1.1  christos 
    419  1.1  christos   If a user has multiple locks, perhaps ci should fall back on ci -k's
    420  1.1  christos   method to figure out which revision to use.
    421  1.1  christos 
    422  1.1  christos   Symbolic names need not refer to existing branches and revisions.
    423  1.1  christos   rcs(1)'s BUGS section says this is a bug.  Is it?  If so, it should be fixed.
    424  1.1  christos 
    425  1.1  christos   Add an option to rcs -o so that old log messages are not deleted if
    426  1.1  christos   the next undeleted revision exists, but are merely appended to the log
    427  1.1  christos   message of that revision.
    428  1.1  christos 
    429  1.1  christos   ci -k should be able to get keyword values from the first `$Log' entry.
    430  1.1  christos 
    431  1.1  christos   Add an option to rcsclean to clean directories recursively.
    432  1.1  christos 
    433  1.1  christos   Write an rcsck program that repairs corrupted RCS files,
    434  1.1  christos   much as fsck repairs corrupted file systems.
    435  1.1  christos   For example, it should remove stale lock files.
    436  1.1  christos 
    437  1.1  christos   Clean up the source code with a consistent indenting style.
    438  1.1  christos 
    439  1.1  christos   Update the date parser to use the more modern getdate.y by Bellovin,
    440  1.1  christos   Salz, and Berets, or the even more modern getdate by Moraes.  None of
    441  1.1  christos   these getdate implementations are as robust as RCS's old warhorse in
    442  1.1  christos   avoiding problems like arithmetic overflow, so they'll have to be
    443  1.1  christos   fixed first.
    444  1.1  christos 
    445  1.1  christos   Break up the code into a library so that it's easier to write new programs
    446  1.1  christos   that manipulate RCS files, and so that useless code is removed from the
    447  1.1  christos   existing programs.  For example, the rcs command contains unnecessary
    448  1.1  christos   keyword substitution baggage, and the merge command can be greatly pruned.
    449  1.1  christos 
    450  1.1  christos   Make it easier to use your favorite text editor to edit log messages,
    451  1.1  christos   etc. instead of having to type them in irretrievably at the terminal.
    452  1.1  christos 
    453  1.1  christos   Let the user specify a search path for default branches,
    454  1.1  christos   e.g. to use L as the default branch if it works, and M otherwise.
    455  1.1  christos   Let the user require that at least one entry in the default branch path works.
    456  1.1  christos   Let the user say that later entries in the default branch path are read only,
    457  1.1  christos   i.e. one cannot check in changes to them.
    458  1.1  christos   This should be an option settable by RCSINIT.
    459  1.1  christos 
    460  1.1  christos   Add a way for a user to see which revisions affected which lines.
    461  1.1  christos 
    462  1.1  christos   Have `rlog -nN F' print just the revision number that N translates to.
    463  1.1  christos   E.g. `rlog -nB. F' would print the highest revision on the branch B.
    464  1.1  christos   Use this to add an option -bB to rcsbranch, to freeze the named branch.
    465  1.1  christos   This should interact well with default branches.
    466  1.1  christos 
    467  1.1  christos   Add a co option that prints the revision number before each line,
    468  1.1  christos   as SCCS's `get -m' does.
    469  1.1  christos 
    470  1.1  christos The following projects require a change to RCS file format.
    471  1.1  christos 
    472  1.1  christos   Allow keyword expansion to be changed on a per-revision basis,
    473  1.1  christos   not on a per-file basis as now.  This would allow -ko to be used
    474  1.1  christos   on imported revisions, with the default -kkv otherwise.
    475  1.1  christos 
    476  1.1  christos   When two or more branches are merged, record all the ancestors
    477  1.1  christos   of the new revision.  The hard part of this is keeping track of all
    478  1.1  christos   the ancestors of a working file while it's checked out.
    479  1.1  christos 
    480  1.1  christos   Add loose locking, which is like non-strict but applies to all users,
    481  1.1  christos   not just the owner of the RCS file.
    482  1.1  christos 
    483  1.1  christos   Be able to store RCS files in compressed format.
    484  1.1  christos   Don't bother to use a .Z extension that would exceed file name length limits;
    485  1.1  christos   just look at the magic number.
    486  1.1  christos 
    487  1.1  christos   Add locker commentary, e.g. `co -l -m"checkout to fix merge bug" foo'
    488  1.1  christos   to tell others why you checked out `foo'.
    489  1.1  christos   Also record the time when the revision was locked,
    490  1.1  christos   and perhaps the working pathname (if applicable).
    491  1.1  christos 
    492  1.1  christos   Let the user mark an RCS revision as deleted; checking out such a revision
    493  1.1  christos   would result in no working file.  Similarly, using `co -d' with a date either
    494  1.1  christos   before the initial revision or after the file was marked deleted should
    495  1.1  christos   remove the working file.  For extra credit, extend the notion of `deleted' to
    496  1.1  christos   include `renamed'.  RCS should support arbitrary combinations of renaming and
    497  1.1  christos   deletion, e.g. renaming A to B and B to A, checking in new revisions to both
    498  1.1  christos   files, and then renaming them back.
    499  1.1  christos 
    500  1.1  christos   Be able to check in an entire directory structure into a single RCS file.
    501  1.1  christos 
    502  1.1  christos   Use a better scheme for locking revisions; the current scheme requires
    503  1.1  christos   changing the RCS file just to lock or unlock a revision.
    504  1.1  christos   The new scheme should coexist as well as possible with older versions of RCS,
    505  1.1  christos   and should avoid the rare NFS bugs mentioned in rcsedit.c.
    506  1.1  christos   E.g. if there's a reliable lockd running, RCS should use it
    507  1.1  christos   instead of relying on NFS.
    508  1.1  christos 
    509  1.1  christos   Add rcs options for changing keyword names, e.g. XConsortium instead of Id.
    510  1.1  christos 
    511  1.1  christos   Add a `$Description' keyword; but this may be tricky, since descriptions can
    512  1.1  christos   contain newlines and $s.
    513  1.1  christos 
    514  1.1  christos   Add a `$Copyright' keyword that expands to a copyright notice.
    515  1.1  christos 
    516  1.1  christos   Add frozen branches a la SCCS.  In general, be able to emulate all of
    517  1.1  christos   SCCS, so that an SCCS-to-RCS program can be practical.  For example,
    518  1.1  christos   there should be an equivalent to the SCCS prt command.
    519  1.1  christos 
    520  1.1  christos   Add support for distributed RCS, where widely separated
    521  1.1  christos   users cannot easily access each others' RCS files,
    522  1.1  christos   and must periodically distribute and reconcile new revisions.
    523  1.1  christos 
    524  1.1  christos   Be able to create empty branches.
    525  1.1  christos 
    526  1.1  christos   Be able to store just deltas from a read-only principal copy,
    527  1.1  christos   e.g. from source on CD-ROM.
    528  1.1  christos 
    529  1.1  christos   Improve RCS's method for storing binary files.
    530  1.1  christos   Although it is more efficient than SCCS's,
    531  1.1  christos   the diff algorithm is still line oriented,
    532  1.1  christos   and often generates long output for minor changes to an executable file.
    533  1.1  christos 
    534  1.1  christos   From the user's point of view, it would be best if
    535  1.1  christos   RCS detected and handled binary files without human intervention,
    536  1.1  christos   switching expansion methods as needed from revision to revision.
    537  1.1  christos 
    538  1.1  christos   Allow RCS to determine automagically whether -ko or -kb should be the default
    539  1.1  christos   by inspecting the file's contents or name.  The magic should be optional
    540  1.1  christos   and user-programmable.
    541  1.1  christos 
    542  1.1  christos   Extend the grammar of RCS files so that keywords need not be in a fixed order.
    543  1.1  christos 
    544  1.1  christos   Internationalize messages; unfortunately, there's no common standard yet.
    545  1.1  christos   This requires a change in RCS file format because of the
    546  1.1  christos   `empty log message' and `checked in with -k' hacks inside RCS files.
    547  1.1  christos 
    548  1.1  christos   Add documentation in texinfo format.
    549