xref: /dflybsd-src/gnu/usr.bin/rcs/NEWS (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn MarinoRecent changes to RCS (and possible future changes)
286d7f5d3SJohn Marino
386d7f5d3SJohn Marino $FreeBSD: src/gnu/usr.bin/rcs/NEWS,v 1.5 1999/08/27 23:36:36 peter Exp $
486d7f5d3SJohn Marino $DragonFly: src/gnu/usr.bin/rcs/NEWS,v 1.2 2003/06/17 04:25:47 dillon Exp $
586d7f5d3SJohn Marino
686d7f5d3SJohn Marino	Copyright 1991, 1992, 1993, 1994, 1995 Paul Eggert
786d7f5d3SJohn Marino	Distributed under license by the Free Software Foundation, Inc.
886d7f5d3SJohn Marino
986d7f5d3SJohn Marino	This file is part of RCS.
1086d7f5d3SJohn Marino
1186d7f5d3SJohn Marino	RCS is free software; you can redistribute it and/or modify it
1286d7f5d3SJohn Marino	under the terms of the GNU General Public License as published
1386d7f5d3SJohn Marino	by the Free Software Foundation; either version 2, or (at your
1486d7f5d3SJohn Marino	option) any later version.
1586d7f5d3SJohn Marino
1686d7f5d3SJohn Marino	RCS is distributed in the hope that it will be useful, but
1786d7f5d3SJohn Marino	WITHOUT ANY WARRANTY; without even the implied warranty of
1886d7f5d3SJohn Marino	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1986d7f5d3SJohn Marino	GNU General Public License for more details.
2086d7f5d3SJohn Marino
2186d7f5d3SJohn Marino	You should have received a copy of the GNU General Public License
2286d7f5d3SJohn Marino	along with RCS; see the file COPYING.
2386d7f5d3SJohn Marino	If not, write to the Free Software Foundation,
2486d7f5d3SJohn Marino	59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2586d7f5d3SJohn Marino
2686d7f5d3SJohn Marino	Report problems and direct all questions to:
2786d7f5d3SJohn Marino
2886d7f5d3SJohn Marino		rcs-bugs@cs.purdue.edu
2986d7f5d3SJohn Marino
3086d7f5d3SJohn Marino
3186d7f5d3SJohn MarinoHere is a brief summary of user-visible changes since 5.6.
3286d7f5d3SJohn Marino
3386d7f5d3SJohn Marino  New options:
3486d7f5d3SJohn Marino    `-kb' supports binary files.
3586d7f5d3SJohn Marino    `-T' preserves the modification time of RCS files.
3686d7f5d3SJohn Marino    `-V' prints the version number.
3786d7f5d3SJohn Marino    `-zLT' causes RCS to use local time in working files and logs.
3886d7f5d3SJohn Marino    `rcsclean -n' outputs what rcsclean would do, without actually doing it.
3986d7f5d3SJohn Marino    `rlog -N' omits symbolic names.
4086d7f5d3SJohn Marino  There is a new keyword `Name'.
4186d7f5d3SJohn Marino  Inserted log lines now have the same prefix as the preceding `$Log' line.
4286d7f5d3SJohn Marino
4386d7f5d3SJohn MarinoMost changes for RCS version 5.7 are to fix bugs and improve portability.
4486d7f5d3SJohn MarinoRCS now conforms to GNU configuration standards and to Posix 1003.1b-1993.
4586d7f5d3SJohn Marino
4686d7f5d3SJohn Marino
4786d7f5d3SJohn MarinoFeatures new to RCS version 5.7, and possibly incompatible
4886d7f5d3SJohn Marinoin minor ways with previous practice, include:
4986d7f5d3SJohn Marino
5086d7f5d3SJohn Marino  Inserted log lines now have the same prefix as the preceding `$Log' line.
5186d7f5d3SJohn Marino  E.g. if a $Log line starts with `// $Log', log lines are prefixed with `// '.
5286d7f5d3SJohn Marino  RCS still records the (now obsolescent) comment leader inside RCS files,
5386d7f5d3SJohn Marino  but it ignores the comment leader unless it is emulating older RCS versions.
5486d7f5d3SJohn Marino  If you plan to access a file with both old and new versions of RCS,
5586d7f5d3SJohn Marino  make sure its comment leader matches its `$Log' line prefix.
5686d7f5d3SJohn Marino  For backwards compatibility with older versions of RCS,
5786d7f5d3SJohn Marino  if the log prefix is `/*' or `(*' surrounded by optional white space,
5886d7f5d3SJohn Marino  inserted log lines contain ` *' instead of `/*' or `(*';
5986d7f5d3SJohn Marino  however, this usage is obsolescent and should not be relied on.
6086d7f5d3SJohn Marino
6186d7f5d3SJohn Marino  $Log string `Revision' times now use the same format as other times.
6286d7f5d3SJohn Marino
6386d7f5d3SJohn Marino  Log lines are now inserted even if -kk is specified; this simplifies merging.
6486d7f5d3SJohn Marino
6586d7f5d3SJohn Marino  ci's -rR option (with a nonempty R) now just specifies a revision number R.
6686d7f5d3SJohn Marino  In some beta versions, it also reestablished the default behavior of
6786d7f5d3SJohn Marino  releasing a lock and removing the working file.
6886d7f5d3SJohn Marino  Now, only the bare -r option does this.
6986d7f5d3SJohn Marino
7086d7f5d3SJohn Marino  With an empty extension, any appearance of a directory named `RCS'
7186d7f5d3SJohn Marino  in a pathname identifies the pathname as being that of an RCS file.
7286d7f5d3SJohn Marino  For example, `a/RCS/b/c' is now an RCS file with an empty extension.
7386d7f5d3SJohn Marino  Formerly, `RCS' had to be the last directory in the pathname.
7486d7f5d3SJohn Marino
7586d7f5d3SJohn Marino  rlog's -d option by default now uses exclusive time ranges.
7686d7f5d3SJohn Marino  E.g. `rlog -d"<T"' now excludes revisions whose times equal T exactly.
7786d7f5d3SJohn Marino  Use `rlog -d"<=T"' to get the old behavior.
7886d7f5d3SJohn Marino
7986d7f5d3SJohn Marino  merge now takes up to three -L options, one for each input file.
8086d7f5d3SJohn Marino  Formerly, it took at most two -L options, for the 1st and 3rd input files.
8186d7f5d3SJohn Marino
8286d7f5d3SJohn Marino  `rcs' now requires at least one option; this is for future expansion.
8386d7f5d3SJohn Marino
8486d7f5d3SJohn MarinoOther features new to RCS version 5.7 include:
8586d7f5d3SJohn Marino
8686d7f5d3SJohn Marino  merge and rcsmerge now pass -A, -E, and -e options to the subsidiary diff3.
8786d7f5d3SJohn Marino
8886d7f5d3SJohn Marino  rcs -kb acts like rcs -ko, except it uses binary I/O on working files.
8986d7f5d3SJohn Marino  This makes no difference under Posix or Unix, but it does matter elsewhere.
9086d7f5d3SJohn Marino  With -kb in effect, rcsmerge refuses to merge;
9186d7f5d3SJohn Marino  this avoids common problems with CVS merging.
9286d7f5d3SJohn Marino
9386d7f5d3SJohn Marino  The following is for future use by GNU Emacs 19's version control package:
9486d7f5d3SJohn Marino
9586d7f5d3SJohn Marino    rcs's new -M option causes it to not send mail when you break somebody
9686d7f5d3SJohn Marino    else's lock.  This is not meant for casual use; see rcs(1).
9786d7f5d3SJohn Marino
9886d7f5d3SJohn Marino    ci's new -i option causes an error if the RCS file already exists.
9986d7f5d3SJohn Marino    Similarly, -j causes an error if the RCS file does not already exist.
10086d7f5d3SJohn Marino
10186d7f5d3SJohn Marino  The new keyword `Name' is supported; its value is the name, if any,
10286d7f5d3SJohn Marino  used to check out the revision.  E.g. `co -rN foo' causes foo's
10386d7f5d3SJohn Marino  $Name...$ keyword strings to end in `: N $'.
10486d7f5d3SJohn Marino
10586d7f5d3SJohn Marino  The new -zZONE option causes RCS to output dates and times using ISO 8601
10686d7f5d3SJohn Marino  format with ZONE as the time zone, and to use ZONE as the default time
10786d7f5d3SJohn Marino  zone for input.  Its most common use is the -zLT option, which causes RCS
10886d7f5d3SJohn Marino  to use local time externally.  You can also specify foreign time zones;
10986d7f5d3SJohn Marino  e.g. -z+05:30 causes RCS to use India time (5 hours 30 minutes east of UTC).
11086d7f5d3SJohn Marino  This option does not affect RCS files themselves, which always use UTC;
11186d7f5d3SJohn Marino  it affects only output (e.g. rlog output, keyword expansion, diff -c times)
11286d7f5d3SJohn Marino  and interpretation of options (e.g. the -d option of ci, co, and rlog).
11386d7f5d3SJohn Marino  Bare -z restores the default behavior of UTC with no time zone indication,
11486d7f5d3SJohn Marino  and the traditional RCS date separator `/' instead of the ISO 8601 `-'.
11586d7f5d3SJohn Marino  RCSINIT may contain a -z option.  ci -k parses UTC offsets.
11686d7f5d3SJohn Marino
11786d7f5d3SJohn Marino  The new -T option of ci, co, rcs, and rcsclean preserves the modification
11886d7f5d3SJohn Marino  time of the RCS file unless a revision is added or removed.
11986d7f5d3SJohn Marino  ci -T sets the RCS file's modification time to the new revision's time
12086d7f5d3SJohn Marino  if the former precedes the latter and there is a new revision;
12186d7f5d3SJohn Marino  otherwise, it preserves the RCS file's modification time.
12286d7f5d3SJohn Marino  Use this option with care, as it can confuse `make'; see ci(1).
12386d7f5d3SJohn Marino
12486d7f5d3SJohn Marino  The new -N option of rlog omits symbolic names from the output.
12586d7f5d3SJohn Marino
12686d7f5d3SJohn Marino  A revision number that starts with `.' is considered to be relative to
12786d7f5d3SJohn Marino  the default branch (normally the trunk).  A branch number followed by `.'
12886d7f5d3SJohn Marino  stands for the last revision on that branch.
12986d7f5d3SJohn Marino
13086d7f5d3SJohn Marino  If someone else already holds the lock, rcs -l now asks whether you want
13186d7f5d3SJohn Marino  to break it, instead of immediately reporting an error.
13286d7f5d3SJohn Marino
13386d7f5d3SJohn Marino  ci now always unlocks a revision like 3.5 if you check in a revision
13486d7f5d3SJohn Marino  like 3.5.2.1 that is the first of a new branch of that revision.
13586d7f5d3SJohn Marino  Formerly it was inconsistent.
13686d7f5d3SJohn Marino
13786d7f5d3SJohn Marino  File names may now contain tab, newline, space, and '$'.
13886d7f5d3SJohn Marino  They are represented in keyword strings with \t, \n, \040, and \044.
13986d7f5d3SJohn Marino  \ in a file name is now represented by \\ in a keyword string.
14086d7f5d3SJohn Marino
14186d7f5d3SJohn Marino  Identifiers may now start with a digit and (unless they are symbolic names)
14286d7f5d3SJohn Marino  may contain `.'.  This permits author names like `john.doe' and `4tran'.
14386d7f5d3SJohn Marino
14486d7f5d3SJohn Marino  A bare -V option now prints the current version number.
14586d7f5d3SJohn Marino
14686d7f5d3SJohn Marino  rcsdiff outputs more readable context diff headers if diff -L works.
14786d7f5d3SJohn Marino
14886d7f5d3SJohn Marino  rcsdiff -rN -rN now suppresses needless checkout and comparison
14986d7f5d3SJohn Marino  of identical revisions.
15086d7f5d3SJohn Marino
15186d7f5d3SJohn Marino  Error messages now contain the names of files to which they apply.
15286d7f5d3SJohn Marino
15386d7f5d3SJohn Marino  Mach style memory mapping is now supported.
15486d7f5d3SJohn Marino
15586d7f5d3SJohn Marino  The installation procedure now conforms to the GNU coding standards.
15686d7f5d3SJohn Marino
15786d7f5d3SJohn Marino  When properly configured, RCS now strictly conforms to Posix 1003.1b-1993.
15886d7f5d3SJohn Marino
15986d7f5d3SJohn Marino
16086d7f5d3SJohn MarinoFeatures new to RCS version 5.6 include:
16186d7f5d3SJohn Marino
16286d7f5d3SJohn Marino  Security holes have been plugged; setgid use is no longer supported.
16386d7f5d3SJohn Marino
16486d7f5d3SJohn Marino  co can retrieve old revisions much more efficiently.
16586d7f5d3SJohn Marino  To generate the Nth youngest revision on the trunk,
16686d7f5d3SJohn Marino  the old method used up to N passes through copies of the working file;
16786d7f5d3SJohn Marino  the new method uses a piece table to generate the working file in one pass.
16886d7f5d3SJohn Marino
16986d7f5d3SJohn Marino  When ci finds no changes in the working file,
17086d7f5d3SJohn Marino  it automatically reverts to the previous revision unless -f is given.
17186d7f5d3SJohn Marino
17286d7f5d3SJohn Marino  RCS follows symbolic links to RCS files instead of breaking them,
17386d7f5d3SJohn Marino  and warns when it breaks hard links to RCS files.
17486d7f5d3SJohn Marino
17586d7f5d3SJohn Marino  `$' stands for the revision number taken from working file keyword strings.
17686d7f5d3SJohn Marino  E.g. if F contains an Id keyword string,
17786d7f5d3SJohn Marino  `rcsdiff -r$ F' compares F to its checked-in revision, and
17886d7f5d3SJohn Marino  `rcs -nL:$ F' gives the symbolic name L to F's revision.
17986d7f5d3SJohn Marino
18086d7f5d3SJohn Marino  co and ci's new -M option sets the modification time
18186d7f5d3SJohn Marino  of the working file to be that of the revision.
18286d7f5d3SJohn Marino  Without -M, ci now tries to avoid changing the working file's
18386d7f5d3SJohn Marino  modification time if its contents are unchanged.
18486d7f5d3SJohn Marino
18586d7f5d3SJohn Marino  rcs's new -m option changes the log message of an old revision.
18686d7f5d3SJohn Marino
18786d7f5d3SJohn Marino  RCS is portable to hosts that do not permit `,' in filenames.
18886d7f5d3SJohn Marino  (`,' is not part of the Posix portable filename character set.)
18986d7f5d3SJohn Marino  A new -x option specifies extensions other than `,v' for RCS files.
19086d7f5d3SJohn Marino  The Unix default is `-x,v/', so that the working file `w' corresponds
19186d7f5d3SJohn Marino  to the first file in the list `RCS/w,v', `w,v', `RCS/w' that works.
19286d7f5d3SJohn Marino  The non-Unix default is `-x', so that only `RCS/w' is tried.
19386d7f5d3SJohn Marino  Eventually, the Unix default should change to `-x/,v'
19486d7f5d3SJohn Marino  to encourage interoperability among all Posix hosts.
19586d7f5d3SJohn Marino
19686d7f5d3SJohn Marino  A new RCSINIT environment variable specifies defaults for options like -x.
19786d7f5d3SJohn Marino
19886d7f5d3SJohn Marino  The separator for revision ranges has been changed from `-' to `:', because
19986d7f5d3SJohn Marino  the range `A-B' is ambiguous if `A', `B' and `A-B' are all symbolic names.
20086d7f5d3SJohn Marino  E.g. the old `rlog -r1.5-1.7' is now `rlog -r1.5:1.7'; ditto for `rcs -o'.
20186d7f5d3SJohn Marino  For a while RCS will still support (but warn about) the old `-' separator.
20286d7f5d3SJohn Marino
20386d7f5d3SJohn Marino  RCS manipulates its lock files using a method that is more reliable under NFS.
20486d7f5d3SJohn Marino
20586d7f5d3SJohn Marino
20686d7f5d3SJohn MarinoFeatures new to RCS version 5 include:
20786d7f5d3SJohn Marino
20886d7f5d3SJohn Marino  RCS can check in arbitrary files, not just text files, if diff -a works.
20986d7f5d3SJohn Marino  RCS can merge lines containing just a single `.' if diff3 -m works.
21086d7f5d3SJohn Marino  GNU diff supports the -a and -m options.
21186d7f5d3SJohn Marino
21286d7f5d3SJohn Marino  RCS can now be used as a setuid program.
21386d7f5d3SJohn Marino  See ci(1) for how users can employ setuid copies of ci, co, and rcsclean.
21486d7f5d3SJohn Marino  Setuid privileges yield extra security if the effective user owns RCS files
21586d7f5d3SJohn Marino  and directories, and if only the effective user can write RCS directories.
21686d7f5d3SJohn Marino  RCS uses the real user for all accesses other than writing RCS directories.
21786d7f5d3SJohn Marino  As described in ci(1), there are three levels of setuid support.
21886d7f5d3SJohn Marino
21986d7f5d3SJohn Marino    1.  Setuid works fully if the seteuid() system call lets any
22086d7f5d3SJohn Marino    process switch back and forth between real and effective users,
22186d7f5d3SJohn Marino    as specified in Posix 1003.1a Draft 5.
22286d7f5d3SJohn Marino
22386d7f5d3SJohn Marino    2.  On hosts with saved setuids (a Posix 1003.1-1990 option) and without
22486d7f5d3SJohn Marino    a modern seteuid(), setuid works unless the real or effective user is root.
22586d7f5d3SJohn Marino
22686d7f5d3SJohn Marino    3.  On hosts that lack both modern seteuid() and saved setuids,
22786d7f5d3SJohn Marino    setuid does not work, and RCS uses the effective user for all accesses;
22886d7f5d3SJohn Marino    formerly it was inconsistent.
22986d7f5d3SJohn Marino
23086d7f5d3SJohn Marino  New options to co, rcsdiff, and rcsmerge give more flexibility to keyword
23186d7f5d3SJohn Marino  substitution.
23286d7f5d3SJohn Marino
23386d7f5d3SJohn Marino    -kkv substitutes the default `$Keyword: value $' for keyword strings.
23486d7f5d3SJohn Marino    However, a locker's name is inserted only as a file is being locked,
23586d7f5d3SJohn Marino    i.e. by `ci -l' and `co -l'.  This is normally the default.
23686d7f5d3SJohn Marino
23786d7f5d3SJohn Marino    -kkvl acts like -kkv, except that a locker's name is always inserted
23886d7f5d3SJohn Marino    if the given revision is currently locked.  This was the default in
23986d7f5d3SJohn Marino    version 4.  It is now the default only with when using rcsdiff to
24086d7f5d3SJohn Marino    compare a revision to a working file whose mode is that of a file
24186d7f5d3SJohn Marino    checked out for changes.
24286d7f5d3SJohn Marino
24386d7f5d3SJohn Marino    -kk substitutes just `$Keyword$', which helps to ignore keyword values
24486d7f5d3SJohn Marino    when comparing revisions.
24586d7f5d3SJohn Marino
24686d7f5d3SJohn Marino    -ko retrieves the old revision's keyword string, thus bypassing keyword
24786d7f5d3SJohn Marino    substitution.
24886d7f5d3SJohn Marino
24986d7f5d3SJohn Marino    -kv retrieves just `value'.  This can ease the use of keyword values, but
25086d7f5d3SJohn Marino    it is dangerous because it causes RCS to lose track of where the keywords
25186d7f5d3SJohn Marino    are, so for safety the owner write permission of the working file is
25286d7f5d3SJohn Marino    turned off when -kv is used; to edit the file later, check it out again
25386d7f5d3SJohn Marino    without -kv.
25486d7f5d3SJohn Marino
25586d7f5d3SJohn Marino  rcs -ko sets the default keyword substitution to be in the style of co -ko,
25686d7f5d3SJohn Marino  and similarly for the other -k options.  This can be useful with file
25786d7f5d3SJohn Marino  formats that cannot tolerate changing the lengths of keyword strings.
25886d7f5d3SJohn Marino  However it also renders a RCS file readable only by RCS version 5 or later.
25986d7f5d3SJohn Marino  Use rcs -kkv to restore the usual default substitution.
26086d7f5d3SJohn Marino
26186d7f5d3SJohn Marino  RCS can now be used by development groups that span time zone boundaries.
26286d7f5d3SJohn Marino  All times are now displayed in UTC, and UTC is the default time zone.
26386d7f5d3SJohn Marino  To use local time with co -d, append ` LT' to the time.
26486d7f5d3SJohn Marino  When interchanging RCS files with sites running older versions of RCS,
26586d7f5d3SJohn Marino  time stamp discrepancies may prevent checkins; to work around this,
26686d7f5d3SJohn Marino  use `ci -d' with a time slightly in the future.
26786d7f5d3SJohn Marino
26886d7f5d3SJohn Marino  Dates are now displayed using four-digit years, not two-digit years.
26986d7f5d3SJohn Marino  Years given in -d options must now have four digits.
27086d7f5d3SJohn Marino  This change is required for RCS to continue to work after 1999/12/31.
27186d7f5d3SJohn Marino  The form of dates in version 5 RCS files will not change until 2000/01/01,
27286d7f5d3SJohn Marino  so in the meantime RCS files can still be interchanged with sites
27386d7f5d3SJohn Marino  running older versions of RCS.  To make room for the longer dates,
27486d7f5d3SJohn Marino  rlog now outputs `lines: +A -D' instead of `lines added/del: A/D'.
27586d7f5d3SJohn Marino
27686d7f5d3SJohn Marino  To help prevent diff programs that are broken or have run out of memory
27786d7f5d3SJohn Marino  from trashing an RCS file, ci now checks diff output more carefully.
27886d7f5d3SJohn Marino
27986d7f5d3SJohn Marino  ci -k now handles the Log keyword, so that checking in a file
28086d7f5d3SJohn Marino  with -k does not normally alter the file's contents.
28186d7f5d3SJohn Marino
28286d7f5d3SJohn Marino  RCS no longer outputs white space at the ends of lines
28386d7f5d3SJohn Marino  unless the original working file had it.
28486d7f5d3SJohn Marino  For consistency with other keywords,
28586d7f5d3SJohn Marino  a space, not a tab, is now output after `$Log:'.
28686d7f5d3SJohn Marino  Rlog now puts lockers and symbolic names on separate lines in the output
28786d7f5d3SJohn Marino  to avoid generating lines that are too long.
28886d7f5d3SJohn Marino  A similar fix has been made to lists in the RCS files themselves.
28986d7f5d3SJohn Marino
29086d7f5d3SJohn Marino  RCS no longer outputs the string `Locker: ' when expanding Header or Id
29186d7f5d3SJohn Marino  keywords.  This saves space and reverts back to version 3 behavior.
29286d7f5d3SJohn Marino
29386d7f5d3SJohn Marino  The default branch is not put into the RCS file unless it is nonempty.
29486d7f5d3SJohn Marino  Therefore, files generated by RCS version 5 can be read by RCS version 3
29586d7f5d3SJohn Marino  unless they use the default branch feature introduced in version 4.
29686d7f5d3SJohn Marino  This fixes a compatibility problem introduced by version 4.
29786d7f5d3SJohn Marino
29886d7f5d3SJohn Marino  RCS can now emulate older versions of RCS; see `co -V'.
29986d7f5d3SJohn Marino  This may be useful to overcome compatibility problems
30086d7f5d3SJohn Marino  due to the above changes.
30186d7f5d3SJohn Marino
30286d7f5d3SJohn Marino  Programs like Emacs can now interact with RCS commands via a pipe:
30386d7f5d3SJohn Marino  the new -I option causes ci, co, and rcs to run interactively,
30486d7f5d3SJohn Marino  even if standard input is not a terminal.
30586d7f5d3SJohn Marino  These commands now accept multiple inputs from stdin separated by `.' lines.
30686d7f5d3SJohn Marino
30786d7f5d3SJohn Marino  ci now silently ignores the -t option if the RCS file already exists.
30886d7f5d3SJohn Marino  This simplifies some shell scripts and improves security in setuid sites.
30986d7f5d3SJohn Marino
31086d7f5d3SJohn Marino  Descriptive text may be given directly in an argument of the form -t-string.
31186d7f5d3SJohn Marino
31286d7f5d3SJohn Marino  The character set for symbolic names has been upgraded
31386d7f5d3SJohn Marino  from Ascii to ISO 8859.
31486d7f5d3SJohn Marino
31586d7f5d3SJohn Marino  rcsdiff now passes through all options used by GNU diff;
31686d7f5d3SJohn Marino  this is a longer list than 4.3BSD diff.
31786d7f5d3SJohn Marino
31886d7f5d3SJohn Marino  merge's new -L option gives tags for merge's overlap report lines.
31986d7f5d3SJohn Marino  This ability used to be present in a different, undocumented form;
32086d7f5d3SJohn Marino  the new form is chosen for compatibility with GNU diff3's -L option.
32186d7f5d3SJohn Marino
32286d7f5d3SJohn Marino  rcsmerge and merge now have a -q option, just like their siblings do.
32386d7f5d3SJohn Marino
32486d7f5d3SJohn Marino  rcsclean's new -n option outputs what rcsclean would do,
32586d7f5d3SJohn Marino  without actually doing it.
32686d7f5d3SJohn Marino
32786d7f5d3SJohn Marino  RCS now attempts to ignore parts of an RCS file that look like they come
32886d7f5d3SJohn Marino  from a future version of RCS.
32986d7f5d3SJohn Marino
33086d7f5d3SJohn Marino  When properly configured, RCS now strictly conforms with Posix 1003.1-1990.
33186d7f5d3SJohn Marino  RCS can still be compiled in non-Posix traditional Unix environments,
33286d7f5d3SJohn Marino  and can use common BSD and USG extensions to Posix.
33386d7f5d3SJohn Marino  RCS is a conforming Standard C program, and also compiles under traditional C.
33486d7f5d3SJohn Marino
33586d7f5d3SJohn Marino  Arbitrary limits on internal table sizes have been removed.
33686d7f5d3SJohn Marino  The only limit now is the amount of memory available via malloc().
33786d7f5d3SJohn Marino
33886d7f5d3SJohn Marino  File temporaries, lock files, signals, and system call return codes
33986d7f5d3SJohn Marino  are now handled more cleanly, portably, and quickly.
34086d7f5d3SJohn Marino  Some race conditions have been removed.
34186d7f5d3SJohn Marino
34286d7f5d3SJohn Marino  A new compile-time option RCSPREFIX lets administrators avoid absolute path
34386d7f5d3SJohn Marino  names for subsidiary programs, trading speed for flexibility.
34486d7f5d3SJohn Marino
34586d7f5d3SJohn Marino  The configuration procedure is now more automatic.
34686d7f5d3SJohn Marino
34786d7f5d3SJohn Marino  Snooping has been removed.
34886d7f5d3SJohn Marino
34986d7f5d3SJohn Marino
35086d7f5d3SJohn MarinoVersion 4 was the first version distributed by FSF.
35186d7f5d3SJohn MarinoBeside bug fixes, features new to RCS version 4 include:
35286d7f5d3SJohn Marino
35386d7f5d3SJohn Marino  The notion of default branch has been added; see rcs -b.
35486d7f5d3SJohn Marino
35586d7f5d3SJohn Marino
35686d7f5d3SJohn MarinoVersion 3 was included in the 4.3BSD distribution.
35786d7f5d3SJohn Marino
35886d7f5d3SJohn Marino
35986d7f5d3SJohn MarinoHere are some possible future changes for RCS:
36086d7f5d3SJohn Marino
36186d7f5d3SJohn Marino  Bring back sccstorcs.
36286d7f5d3SJohn Marino
36386d7f5d3SJohn Marino  Add an option to `rcsmerge' so that it can use an arbitrary program
36486d7f5d3SJohn Marino  to do the 3-way merge, instead of the default `merge'.
36586d7f5d3SJohn Marino  Likewise for `rcsdiff' and `diff'.  It should be possible to pass
36686d7f5d3SJohn Marino  arbitrary options to these programs, and to the subsidiary `co's.
36786d7f5d3SJohn Marino
36886d7f5d3SJohn Marino  Add format options for finer control over the output of ident and rlog.
36986d7f5d3SJohn Marino  E.g. there should be an easy way for rlog to output lines like
37086d7f5d3SJohn Marino  `src/main.c 2.4 wft', one for each locked revision.
37186d7f5d3SJohn Marino  rlog options should have three orthogonal types: selecting files,
37286d7f5d3SJohn Marino  selecting revisions, and selecting rlog format.
37386d7f5d3SJohn Marino
37486d7f5d3SJohn Marino  Add format options for finer control over the output of keyword strings.
37586d7f5d3SJohn Marino  E.g. there should be some way to prepend @(#), and there should be some
37686d7f5d3SJohn Marino  way to change $ to some other character to disable further substitution.
37786d7f5d3SJohn Marino  These options should make the resulting files uneditable, like -kv.
37886d7f5d3SJohn Marino
37986d7f5d3SJohn Marino  Add long options, e.g. `--version'.  Unfortunately RCS's option syntax
38086d7f5d3SJohn Marino  is incompatible with getopt.  Perhaps the best way is to overload `rcs', e.g.
38186d7f5d3SJohn Marino  `rcs diff --keyword-substitution=old file' instead of `rcsdiff -ko file'.
38286d7f5d3SJohn Marino
38386d7f5d3SJohn Marino  Add a way to put only the interesting part of the path into the $Header
38486d7f5d3SJohn Marino  keyword expansion.
38586d7f5d3SJohn Marino
38686d7f5d3SJohn Marino  rlog -rM:N should work even if M and N have different numbers of fields,
38786d7f5d3SJohn Marino  so long as M is an ancestor of N or vice versa.
38886d7f5d3SJohn Marino
38986d7f5d3SJohn Marino  rcs should evaluate options in order; this allows rcs -oS -nS.
39086d7f5d3SJohn Marino
39186d7f5d3SJohn Marino  rcs should be able to fix minor mistakes in checkin dates and authors.
39286d7f5d3SJohn Marino
39386d7f5d3SJohn Marino  Be able to redo your most recent checkin with minor changes.
39486d7f5d3SJohn Marino
39586d7f5d3SJohn Marino  co -u shouldn't complain about a writable working file if it won't change
39686d7f5d3SJohn Marino  its contents.
39786d7f5d3SJohn Marino
39886d7f5d3SJohn Marino  Configure the Makefile automatically, as well as conf.h.
39986d7f5d3SJohn Marino
40086d7f5d3SJohn Marino  Add a new option to rcs that behaves like -o, but that doesn't lose the
40186d7f5d3SJohn Marino  nonempty log messages, but instead merges them with the next revision
40286d7f5d3SJohn Marino  if it exists, perhaps with a 1-line header containing author, date, etc.
40386d7f5d3SJohn Marino
40486d7f5d3SJohn Marino  Add a `-' option to take the list of pathnames from standard input.
40586d7f5d3SJohn Marino  Perhaps the pathnames should be null-terminated, not newline-terminated,
40686d7f5d3SJohn Marino  so that pathnames that contain newlines are handled properly.
40786d7f5d3SJohn Marino
40886d7f5d3SJohn Marino  Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b.
40986d7f5d3SJohn Marino
41086d7f5d3SJohn Marino  Add options to allow arbitrary combinations of working file names
41186d7f5d3SJohn Marino  with RCS file names -- they shouldn't have to match.
41286d7f5d3SJohn Marino
41386d7f5d3SJohn Marino  Add an option to break a symbolic link to an RCS file,
41486d7f5d3SJohn Marino  instead of breaking the hard link that it points to.
41586d7f5d3SJohn Marino
41686d7f5d3SJohn Marino  Add ways to specify the earliest revision, the most recent revision,
41786d7f5d3SJohn Marino  the earliest or latest revision on a particular branch, and
41886d7f5d3SJohn Marino  the parent or child of some other revision.
41986d7f5d3SJohn Marino
42086d7f5d3SJohn Marino  If a user has multiple locks, perhaps ci should fall back on ci -k's
42186d7f5d3SJohn Marino  method to figure out which revision to use.
42286d7f5d3SJohn Marino
42386d7f5d3SJohn Marino  Symbolic names need not refer to existing branches and revisions.
42486d7f5d3SJohn Marino  rcs(1)'s BUGS section says this is a bug.  Is it?  If so, it should be fixed.
42586d7f5d3SJohn Marino
42686d7f5d3SJohn Marino  Add an option to rcs -o so that old log messages are not deleted if
42786d7f5d3SJohn Marino  the next undeleted revision exists, but are merely appended to the log
42886d7f5d3SJohn Marino  message of that revision.
42986d7f5d3SJohn Marino
43086d7f5d3SJohn Marino  ci -k should be able to get keyword values from the first `$Log' entry.
43186d7f5d3SJohn Marino
43286d7f5d3SJohn Marino  Add an option to rcsclean to clean directories recursively.
43386d7f5d3SJohn Marino
43486d7f5d3SJohn Marino  Write an rcsck program that repairs corrupted RCS files,
43586d7f5d3SJohn Marino  much as fsck repairs corrupted file systems.
43686d7f5d3SJohn Marino  For example, it should remove stale lock files.
43786d7f5d3SJohn Marino
43886d7f5d3SJohn Marino  Clean up the source code with a consistent indenting style.
43986d7f5d3SJohn Marino
44086d7f5d3SJohn Marino  Update the date parser to use the more modern getdate.y by Bellovin,
44186d7f5d3SJohn Marino  Salz, and Berets, or the even more modern getdate by Moraes.  None of
44286d7f5d3SJohn Marino  these getdate implementations are as robust as RCS's old warhorse in
44386d7f5d3SJohn Marino  avoiding problems like arithmetic overflow, so they'll have to be
44486d7f5d3SJohn Marino  fixed first.
44586d7f5d3SJohn Marino
44686d7f5d3SJohn Marino  Break up the code into a library so that it's easier to write new programs
44786d7f5d3SJohn Marino  that manipulate RCS files, and so that useless code is removed from the
44886d7f5d3SJohn Marino  existing programs.  For example, the rcs command contains unnecessary
44986d7f5d3SJohn Marino  keyword substitution baggage, and the merge command can be greatly pruned.
45086d7f5d3SJohn Marino
45186d7f5d3SJohn Marino  Make it easier to use your favorite text editor to edit log messages,
45286d7f5d3SJohn Marino  etc. instead of having to type them in irretrievably at the terminal.
45386d7f5d3SJohn Marino
45486d7f5d3SJohn Marino  Let the user specify a search path for default branches,
45586d7f5d3SJohn Marino  e.g. to use L as the default branch if it works, and M otherwise.
45686d7f5d3SJohn Marino  Let the user require that at least one entry in the default branch path works.
45786d7f5d3SJohn Marino  Let the user say that later entries in the default branch path are read only,
45886d7f5d3SJohn Marino  i.e. one cannot check in changes to them.
45986d7f5d3SJohn Marino  This should be an option settable by RCSINIT.
46086d7f5d3SJohn Marino
46186d7f5d3SJohn Marino  Add a way for a user to see which revisions affected which lines.
46286d7f5d3SJohn Marino
46386d7f5d3SJohn Marino  Have `rlog -nN F' print just the revision number that N translates to.
46486d7f5d3SJohn Marino  E.g. `rlog -nB. F' would print the highest revision on the branch B.
46586d7f5d3SJohn Marino  Use this to add an option -bB to rcsbranch, to freeze the named branch.
46686d7f5d3SJohn Marino  This should interact well with default branches.
46786d7f5d3SJohn Marino
46886d7f5d3SJohn Marino  Add a co option that prints the revision number before each line,
46986d7f5d3SJohn Marino  as SCCS's `get -m' does.
47086d7f5d3SJohn Marino
47186d7f5d3SJohn MarinoThe following projects require a change to RCS file format.
47286d7f5d3SJohn Marino
47386d7f5d3SJohn Marino  Allow keyword expansion to be changed on a per-revision basis,
47486d7f5d3SJohn Marino  not on a per-file basis as now.  This would allow -ko to be used
47586d7f5d3SJohn Marino  on imported revisions, with the default -kkv otherwise.
47686d7f5d3SJohn Marino
47786d7f5d3SJohn Marino  When two or more branches are merged, record all the ancestors
47886d7f5d3SJohn Marino  of the new revision.  The hard part of this is keeping track of all
47986d7f5d3SJohn Marino  the ancestors of a working file while it's checked out.
48086d7f5d3SJohn Marino
48186d7f5d3SJohn Marino  Add loose locking, which is like non-strict but applies to all users,
48286d7f5d3SJohn Marino  not just the owner of the RCS file.
48386d7f5d3SJohn Marino
48486d7f5d3SJohn Marino  Be able to store RCS files in compressed format.
48586d7f5d3SJohn Marino  Don't bother to use a .Z extension that would exceed file name length limits;
48686d7f5d3SJohn Marino  just look at the magic number.
48786d7f5d3SJohn Marino
48886d7f5d3SJohn Marino  Add locker commentary, e.g. `co -l -m"checkout to fix merge bug" foo'
48986d7f5d3SJohn Marino  to tell others why you checked out `foo'.
49086d7f5d3SJohn Marino  Also record the time when the revision was locked,
49186d7f5d3SJohn Marino  and perhaps the working pathname (if applicable).
49286d7f5d3SJohn Marino
49386d7f5d3SJohn Marino  Let the user mark an RCS revision as deleted; checking out such a revision
49486d7f5d3SJohn Marino  would result in no working file.  Similarly, using `co -d' with a date either
49586d7f5d3SJohn Marino  before the initial revision or after the file was marked deleted should
49686d7f5d3SJohn Marino  remove the working file.  For extra credit, extend the notion of `deleted' to
49786d7f5d3SJohn Marino  include `renamed'.  RCS should support arbitrary combinations of renaming and
49886d7f5d3SJohn Marino  deletion, e.g. renaming A to B and B to A, checking in new revisions to both
49986d7f5d3SJohn Marino  files, and then renaming them back.
50086d7f5d3SJohn Marino
50186d7f5d3SJohn Marino  Be able to check in an entire directory structure into a single RCS file.
50286d7f5d3SJohn Marino
50386d7f5d3SJohn Marino  Use a better scheme for locking revisions; the current scheme requires
50486d7f5d3SJohn Marino  changing the RCS file just to lock or unlock a revision.
50586d7f5d3SJohn Marino  The new scheme should coexist as well as possible with older versions of RCS,
50686d7f5d3SJohn Marino  and should avoid the rare NFS bugs mentioned in rcsedit.c.
50786d7f5d3SJohn Marino  E.g. if there's a reliable lockd running, RCS should use it
50886d7f5d3SJohn Marino  instead of relying on NFS.
50986d7f5d3SJohn Marino
51086d7f5d3SJohn Marino  Add rcs options for changing keyword names, e.g. XConsortium instead of Id.
51186d7f5d3SJohn Marino
51286d7f5d3SJohn Marino  Add a `$Description' keyword; but this may be tricky, since descriptions can
51386d7f5d3SJohn Marino  contain newlines and $s.
51486d7f5d3SJohn Marino
51586d7f5d3SJohn Marino  Add a `$Copyright' keyword that expands to a copyright notice.
51686d7f5d3SJohn Marino
51786d7f5d3SJohn Marino  Add frozen branches a la SCCS.  In general, be able to emulate all of
51886d7f5d3SJohn Marino  SCCS, so that an SCCS-to-RCS program can be practical.  For example,
51986d7f5d3SJohn Marino  there should be an equivalent to the SCCS prt command.
52086d7f5d3SJohn Marino
52186d7f5d3SJohn Marino  Add support for distributed RCS, where widely separated
52286d7f5d3SJohn Marino  users cannot easily access each others' RCS files,
52386d7f5d3SJohn Marino  and must periodically distribute and reconcile new revisions.
52486d7f5d3SJohn Marino
52586d7f5d3SJohn Marino  Be able to create empty branches.
52686d7f5d3SJohn Marino
52786d7f5d3SJohn Marino  Be able to store just deltas from a read-only principal copy,
52886d7f5d3SJohn Marino  e.g. from source on CD-ROM.
52986d7f5d3SJohn Marino
53086d7f5d3SJohn Marino  Improve RCS's method for storing binary files.
53186d7f5d3SJohn Marino  Although it is more efficient than SCCS's,
53286d7f5d3SJohn Marino  the diff algorithm is still line oriented,
53386d7f5d3SJohn Marino  and often generates long output for minor changes to an executable file.
53486d7f5d3SJohn Marino
53586d7f5d3SJohn Marino  From the user's point of view, it would be best if
53686d7f5d3SJohn Marino  RCS detected and handled binary files without human intervention,
53786d7f5d3SJohn Marino  switching expansion methods as needed from revision to revision.
53886d7f5d3SJohn Marino
53986d7f5d3SJohn Marino  Allow RCS to determine automagically whether -ko or -kb should be the default
54086d7f5d3SJohn Marino  by inspecting the file's contents or name.  The magic should be optional
54186d7f5d3SJohn Marino  and user-programmable.
54286d7f5d3SJohn Marino
54386d7f5d3SJohn Marino  Extend the grammar of RCS files so that keywords need not be in a fixed order.
54486d7f5d3SJohn Marino
54586d7f5d3SJohn Marino  Internationalize messages; unfortunately, there's no common standard yet.
54686d7f5d3SJohn Marino  This requires a change in RCS file format because of the
54786d7f5d3SJohn Marino  `empty log message' and `checked in with -k' hacks inside RCS files.
54886d7f5d3SJohn Marino
54986d7f5d3SJohn Marino  Add documentation in texinfo format.
550