source: trunk/third/rcs/NEWS @ 9047

Revision 9047, 24.2 KB checked in by ghudson, 28 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r9046, which included commits to RCS files with non-trunk default branches.
1Recent changes to RCS (and possible future changes)
3        $Id: NEWS,v 1996-10-04 05:52:41 ghudson Exp $
5        Copyright 1991, 1992, 1993, 1994, 1995 Paul Eggert
6        Distributed under license by the Free Software Foundation, Inc.
8        This file is part of RCS.
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.
15        RCS is distributed in the hope that it will be useful, but
16        WITHOUT ANY WARRANTY; without even the implied warranty of
18        GNU General Public License for more details.
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.
25        Report problems and direct all questions to:
30Here is a brief summary of user-visible changes since 5.6.
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.
42Most changes for RCS version 5.7 are to fix bugs and improve portability.
43RCS now conforms to GNU configuration standards and to Posix 1003.1b-1993.
46Features new to RCS version 5.7, and possibly incompatible
47in minor ways with previous practice, include:
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.
60  $Log string `Revision' times now use the same format as other times.
62  Log lines are now inserted even if -kk is specified; this simplifies merging.
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.
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.
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.
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.
81  `rcs' now requires at least one option; this is for future expansion.
83Other features new to RCS version 5.7 include:
85  merge and rcsmerge now pass -A, -E, and -e options to the subsidiary diff3.
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.
92  The following is for future use by GNU Emacs 19's version control package:
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).
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.
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 $'.
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.
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).
123  The new -N option of rlog omits symbolic names from the output.
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.
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.
132  ci now always unlocks a revision like 3.5 if you check in a revision
133  like that is the first of a new branch of that revision.
134  Formerly it was inconsistent.
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.
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'.
143  A bare -V option now prints the current version number.
145  rcsdiff outputs more readable context diff headers if diff -L works.
147  rcsdiff -rN -rN now suppresses needless checkout and comparison
148  of identical revisions.
150  Error messages now contain the names of files to which they apply.
152  Mach style memory mapping is now supported.
154  The installation procedure now conforms to the GNU coding standards.
156  When properly configured, RCS now strictly conforms to Posix 1003.1b-1993.
159Features new to RCS version 5.6 include:
161  Security holes have been plugged; setgid use is no longer supported.
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.
168  When ci finds no changes in the working file,
169  it automatically reverts to the previous revision unless -f is given.
171  RCS follows symbolic links to RCS files instead of breaking them,
172  and warns when it breaks hard links to RCS files.
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.
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.
184  rcs's new -m option changes the log message of an old revision.
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.
195  A new RCSINIT environment variable specifies defaults for options like -x.
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.
202  RCS manipulates its lock files using a method that is more reliable under NFS.
205Features new to RCS version 5 include:
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.
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.
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.
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.
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.
229  New options to co, rcsdiff, and rcsmerge give more flexibility to keyword
230  substitution.
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.
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.
242    -kk substitutes just `$Keyword$', which helps to ignore keyword values
243    when comparing revisions.
245    -ko retrieves the old revision's keyword string, thus bypassing keyword
246    substitution.
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.
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.
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.
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'.
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.
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.
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.
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.
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.
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.
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.
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.
309  Descriptive text may be given directly in an argument of the form -t-string.
311  The character set for symbolic names has been upgraded
312  from Ascii to ISO 8859.
314  rcsdiff now passes through all options used by GNU diff;
315  this is a longer list than 4.3BSD diff.
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.
321  rcsmerge and merge now have a -q option, just like their siblings do.
323  rcsclean's new -n option outputs what rcsclean would do,
324  without actually doing it.
326  RCS now attempts to ignore parts of an RCS file that look like they come
327  from a future version of RCS.
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.
334  Arbitrary limits on internal table sizes have been removed.
335  The only limit now is the amount of memory available via malloc().
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.
341  A new compile-time option RCSPREFIX lets administrators avoid absolute path
342  names for subsidiary programs, trading speed for flexibility.
344  The configuration procedure is now more automatic.
346  Snooping has been removed.
349Version 4 was the first version distributed by FSF.
350Beside bug fixes, features new to RCS version 4 include:
352  The notion of default branch has been added; see rcs -b.
355Version 3 was included in the 4.3BSD distribution.
358Here are some possible future changes for RCS:
360  Bring back sccstorcs.
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.
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.
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.
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'.
382  Add a way to put only the interesting part of the path into the $Header
383  keyword expansion.
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.
388  rcs should evaluate options in order; this allows rcs -oS -nS.
390  rcs should be able to fix minor mistakes in checkin dates and authors.
392  Be able to redo your most recent checkin with minor changes.
394  co -u shouldn't complain about a writable working file if it won't change
395  its contents.
397  Configure the Makefile automatically, as well as conf.h.
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.
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.
407  Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b.
409  Add options to allow arbitrary combinations of working file names
410  with RCS file names -- they shouldn't have to match.
412  Add an option to break a symbolic link to an RCS file,
413  instead of breaking the hard link that it points to.
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.
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.
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.
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.
429  ci -k should be able to get keyword values from the first `$Log' entry.
431  Add an option to rcsclean to clean directories recursively.
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.
437  Clean up the source code with a consistent indenting style.
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.
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.
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.
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.
460  Add a way for a user to see which revisions affected which lines.
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.
467  Add a co option that prints the revision number before each line,
468  as SCCS's `get -m' does.
470The following projects require a change to RCS file format.
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.
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.
480  Add loose locking, which is like non-strict but applies to all users,
481  not just the owner of the RCS file.
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.
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).
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.
500  Be able to check in an entire directory structure into a single RCS file.
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.
509  Add rcs options for changing keyword names, e.g. XConsortium instead of Id.
511  Add a `$Description' keyword; but this may be tricky, since descriptions can
512  contain newlines and $s.
514  Add a `$Copyright' keyword that expands to a copyright notice.
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.
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.
524  Be able to create empty branches.
526  Be able to store just deltas from a read-only principal copy,
527  e.g. from source on CD-ROM.
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.
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.
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.
542  Extend the grammar of RCS files so that keywords need not be in a fixed order.
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.
548  Add documentation in texinfo format.
Note: See TracBrowser for help on using the repository browser.