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