111891SpeterRecent changes to RCS (and possible future changes)
211891Speter
350472Speter $FreeBSD$
411891Speter
511891Speter	Copyright 1991, 1992, 1993, 1994, 1995 Paul Eggert
611891Speter	Distributed under license by the Free Software Foundation, Inc.
711891Speter
811891Speter	This file is part of RCS.
911891Speter
1011891Speter	RCS is free software; you can redistribute it and/or modify it
1111891Speter	under the terms of the GNU General Public License as published
1211891Speter	by the Free Software Foundation; either version 2, or (at your
1311891Speter	option) any later version.
1411891Speter
1511891Speter	RCS is distributed in the hope that it will be useful, but
1611891Speter	WITHOUT ANY WARRANTY; without even the implied warranty of
1711891Speter	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1811891Speter	GNU General Public License for more details.
1911891Speter
2011891Speter	You should have received a copy of the GNU General Public License
2111891Speter	along with RCS; see the file COPYING.
2211891Speter	If not, write to the Free Software Foundation,
2311891Speter	59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2411891Speter
2511891Speter	Report problems and direct all questions to:
2611891Speter
2711891Speter		rcs-bugs@cs.purdue.edu
2811891Speter
2911891Speter
3011891SpeterHere is a brief summary of user-visible changes since 5.6.
3111891Speter
3211891Speter  New options:
3311891Speter    `-kb' supports binary files.
3411891Speter    `-T' preserves the modification time of RCS files.
3511891Speter    `-V' prints the version number.
3611891Speter    `-zLT' causes RCS to use local time in working files and logs.
3711891Speter    `rcsclean -n' outputs what rcsclean would do, without actually doing it.
3811891Speter    `rlog -N' omits symbolic names.
3911891Speter  There is a new keyword `Name'.
4011891Speter  Inserted log lines now have the same prefix as the preceding `$Log' line.
4111891Speter
4211891SpeterMost changes for RCS version 5.7 are to fix bugs and improve portability.
4311891SpeterRCS now conforms to GNU configuration standards and to Posix 1003.1b-1993.
4411891Speter
4511891Speter
4611891SpeterFeatures new to RCS version 5.7, and possibly incompatible
4711891Speterin minor ways with previous practice, include:
4811891Speter
4911891Speter  Inserted log lines now have the same prefix as the preceding `$Log' line.
5011891Speter  E.g. if a $Log line starts with `// $Log', log lines are prefixed with `// '.
5111891Speter  RCS still records the (now obsolescent) comment leader inside RCS files,
5211891Speter  but it ignores the comment leader unless it is emulating older RCS versions.
5311891Speter  If you plan to access a file with both old and new versions of RCS,
5411891Speter  make sure its comment leader matches its `$Log' line prefix.
5511891Speter  For backwards compatibility with older versions of RCS,
5611891Speter  if the log prefix is `/*' or `(*' surrounded by optional white space,
5711891Speter  inserted log lines contain ` *' instead of `/*' or `(*';
5811891Speter  however, this usage is obsolescent and should not be relied on.
5911891Speter
6011891Speter  $Log string `Revision' times now use the same format as other times.
6111891Speter
6211891Speter  Log lines are now inserted even if -kk is specified; this simplifies merging.
6311891Speter
6411891Speter  ci's -rR option (with a nonempty R) now just specifies a revision number R.
6511891Speter  In some beta versions, it also reestablished the default behavior of
6611891Speter  releasing a lock and removing the working file.
6711891Speter  Now, only the bare -r option does this.
6811891Speter
6911891Speter  With an empty extension, any appearance of a directory named `RCS'
7011891Speter  in a pathname identifies the pathname as being that of an RCS file.
7111891Speter  For example, `a/RCS/b/c' is now an RCS file with an empty extension.
7211891Speter  Formerly, `RCS' had to be the last directory in the pathname.
7311891Speter
7411891Speter  rlog's -d option by default now uses exclusive time ranges.
7511891Speter  E.g. `rlog -d"<T"' now excludes revisions whose times equal T exactly.
7611891Speter  Use `rlog -d"<=T"' to get the old behavior.
7711891Speter
7811891Speter  merge now takes up to three -L options, one for each input file.
7911891Speter  Formerly, it took at most two -L options, for the 1st and 3rd input files.
8011891Speter
8111891Speter  `rcs' now requires at least one option; this is for future expansion.
8211891Speter
8311891SpeterOther features new to RCS version 5.7 include:
8411891Speter
8511891Speter  merge and rcsmerge now pass -A, -E, and -e options to the subsidiary diff3.
8611891Speter
8711891Speter  rcs -kb acts like rcs -ko, except it uses binary I/O on working files.
8811891Speter  This makes no difference under Posix or Unix, but it does matter elsewhere.
8911891Speter  With -kb in effect, rcsmerge refuses to merge;
9011891Speter  this avoids common problems with CVS merging.
9111891Speter
9211891Speter  The following is for future use by GNU Emacs 19's version control package:
9311891Speter
9411891Speter    rcs's new -M option causes it to not send mail when you break somebody
9511891Speter    else's lock.  This is not meant for casual use; see rcs(1).
9611891Speter
9711891Speter    ci's new -i option causes an error if the RCS file already exists.
9811891Speter    Similarly, -j causes an error if the RCS file does not already exist.
9911891Speter
10011891Speter  The new keyword `Name' is supported; its value is the name, if any,
10111891Speter  used to check out the revision.  E.g. `co -rN foo' causes foo's
10211891Speter  $Name...$ keyword strings to end in `: N $'.
10311891Speter
10411891Speter  The new -zZONE option causes RCS to output dates and times using ISO 8601
10511891Speter  format with ZONE as the time zone, and to use ZONE as the default time
10611891Speter  zone for input.  Its most common use is the -zLT option, which causes RCS
10711891Speter  to use local time externally.  You can also specify foreign time zones;
10811891Speter  e.g. -z+05:30 causes RCS to use India time (5 hours 30 minutes east of UTC).
10911891Speter  This option does not affect RCS files themselves, which always use UTC;
11011891Speter  it affects only output (e.g. rlog output, keyword expansion, diff -c times)
11111891Speter  and interpretation of options (e.g. the -d option of ci, co, and rlog).
11211891Speter  Bare -z restores the default behavior of UTC with no time zone indication,
11311891Speter  and the traditional RCS date separator `/' instead of the ISO 8601 `-'.
11411891Speter  RCSINIT may contain a -z option.  ci -k parses UTC offsets.
11511891Speter
11611891Speter  The new -T option of ci, co, rcs, and rcsclean preserves the modification
11711891Speter  time of the RCS file unless a revision is added or removed.
11811891Speter  ci -T sets the RCS file's modification time to the new revision's time
11911891Speter  if the former precedes the latter and there is a new revision;
12011891Speter  otherwise, it preserves the RCS file's modification time.
12111891Speter  Use this option with care, as it can confuse `make'; see ci(1).
12211891Speter
12311891Speter  The new -N option of rlog omits symbolic names from the output.
12411891Speter
12511891Speter  A revision number that starts with `.' is considered to be relative to
12611891Speter  the default branch (normally the trunk).  A branch number followed by `.'
12711891Speter  stands for the last revision on that branch.
12811891Speter
12911891Speter  If someone else already holds the lock, rcs -l now asks whether you want
13011891Speter  to break it, instead of immediately reporting an error.
13111891Speter
13211891Speter  ci now always unlocks a revision like 3.5 if you check in a revision
13311891Speter  like 3.5.2.1 that is the first of a new branch of that revision.
13411891Speter  Formerly it was inconsistent.
13511891Speter
13611891Speter  File names may now contain tab, newline, space, and '$'.
13711891Speter  They are represented in keyword strings with \t, \n, \040, and \044.
13811891Speter  \ in a file name is now represented by \\ in a keyword string.
13911891Speter
14011891Speter  Identifiers may now start with a digit and (unless they are symbolic names)
14111891Speter  may contain `.'.  This permits author names like `john.doe' and `4tran'.
14211891Speter
14311891Speter  A bare -V option now prints the current version number.
14411891Speter
14511891Speter  rcsdiff outputs more readable context diff headers if diff -L works.
14611891Speter
14711891Speter  rcsdiff -rN -rN now suppresses needless checkout and comparison
14811891Speter  of identical revisions.
14911891Speter
15011891Speter  Error messages now contain the names of files to which they apply.
15111891Speter
15211891Speter  Mach style memory mapping is now supported.
15311891Speter
15411891Speter  The installation procedure now conforms to the GNU coding standards.
15511891Speter
15611891Speter  When properly configured, RCS now strictly conforms to Posix 1003.1b-1993.
15711891Speter
15811891Speter
15911891SpeterFeatures new to RCS version 5.6 include:
16011891Speter
16111891Speter  Security holes have been plugged; setgid use is no longer supported.
16211891Speter
16311891Speter  co can retrieve old revisions much more efficiently.
16411891Speter  To generate the Nth youngest revision on the trunk,
16511891Speter  the old method used up to N passes through copies of the working file;
16611891Speter  the new method uses a piece table to generate the working file in one pass.
16711891Speter
16811891Speter  When ci finds no changes in the working file,
16911891Speter  it automatically reverts to the previous revision unless -f is given.
17011891Speter
17111891Speter  RCS follows symbolic links to RCS files instead of breaking them,
17211891Speter  and warns when it breaks hard links to RCS files.
17311891Speter
17411891Speter  `$' stands for the revision number taken from working file keyword strings.
17511891Speter  E.g. if F contains an Id keyword string,
17611891Speter  `rcsdiff -r$ F' compares F to its checked-in revision, and
17711891Speter  `rcs -nL:$ F' gives the symbolic name L to F's revision.
17811891Speter
17911891Speter  co and ci's new -M option sets the modification time
18011891Speter  of the working file to be that of the revision.
18111891Speter  Without -M, ci now tries to avoid changing the working file's
18211891Speter  modification time if its contents are unchanged.
18311891Speter
18411891Speter  rcs's new -m option changes the log message of an old revision.
18511891Speter
18611891Speter  RCS is portable to hosts that do not permit `,' in filenames.
18711891Speter  (`,' is not part of the Posix portable filename character set.)
18811891Speter  A new -x option specifies extensions other than `,v' for RCS files.
18911891Speter  The Unix default is `-x,v/', so that the working file `w' corresponds
19011891Speter  to the first file in the list `RCS/w,v', `w,v', `RCS/w' that works.
19111891Speter  The non-Unix default is `-x', so that only `RCS/w' is tried.
19211891Speter  Eventually, the Unix default should change to `-x/,v'
19311891Speter  to encourage interoperability among all Posix hosts.
19411891Speter
19511891Speter  A new RCSINIT environment variable specifies defaults for options like -x.
19611891Speter
19711891Speter  The separator for revision ranges has been changed from `-' to `:', because
19811891Speter  the range `A-B' is ambiguous if `A', `B' and `A-B' are all symbolic names.
19911891Speter  E.g. the old `rlog -r1.5-1.7' is now `rlog -r1.5:1.7'; ditto for `rcs -o'.
20011891Speter  For a while RCS will still support (but warn about) the old `-' separator.
20111891Speter
20211891Speter  RCS manipulates its lock files using a method that is more reliable under NFS.
20311891Speter
20411891Speter
20511891SpeterFeatures new to RCS version 5 include:
20611891Speter
20711891Speter  RCS can check in arbitrary files, not just text files, if diff -a works.
20811891Speter  RCS can merge lines containing just a single `.' if diff3 -m works.
20911891Speter  GNU diff supports the -a and -m options.
21011891Speter
21111891Speter  RCS can now be used as a setuid program.
21211891Speter  See ci(1) for how users can employ setuid copies of ci, co, and rcsclean.
21311891Speter  Setuid privileges yield extra security if the effective user owns RCS files
21411891Speter  and directories, and if only the effective user can write RCS directories.
21511891Speter  RCS uses the real user for all accesses other than writing RCS directories.
21611891Speter  As described in ci(1), there are three levels of setuid support.
21711891Speter
21811891Speter    1.  Setuid works fully if the seteuid() system call lets any
21911891Speter    process switch back and forth between real and effective users,
22011891Speter    as specified in Posix 1003.1a Draft 5.
22111891Speter
22211891Speter    2.  On hosts with saved setuids (a Posix 1003.1-1990 option) and without
22311891Speter    a modern seteuid(), setuid works unless the real or effective user is root.
22411891Speter
22511891Speter    3.  On hosts that lack both modern seteuid() and saved setuids,
22611891Speter    setuid does not work, and RCS uses the effective user for all accesses;
22711891Speter    formerly it was inconsistent.
22811891Speter
22911891Speter  New options to co, rcsdiff, and rcsmerge give more flexibility to keyword
23011891Speter  substitution.
23111891Speter
23211891Speter    -kkv substitutes the default `$Keyword: value $' for keyword strings.
23311891Speter    However, a locker's name is inserted only as a file is being locked,
23411891Speter    i.e. by `ci -l' and `co -l'.  This is normally the default.
23511891Speter
23611891Speter    -kkvl acts like -kkv, except that a locker's name is always inserted
23711891Speter    if the given revision is currently locked.  This was the default in
23811891Speter    version 4.  It is now the default only with when using rcsdiff to
23911891Speter    compare a revision to a working file whose mode is that of a file
24011891Speter    checked out for changes.
24111891Speter
24211891Speter    -kk substitutes just `$Keyword$', which helps to ignore keyword values
24311891Speter    when comparing revisions.
24411891Speter
24511891Speter    -ko retrieves the old revision's keyword string, thus bypassing keyword
24611891Speter    substitution.
24711891Speter
24811891Speter    -kv retrieves just `value'.  This can ease the use of keyword values, but
24911891Speter    it is dangerous because it causes RCS to lose track of where the keywords
25011891Speter    are, so for safety the owner write permission of the working file is
25111891Speter    turned off when -kv is used; to edit the file later, check it out again
25211891Speter    without -kv.
25311891Speter
25411891Speter  rcs -ko sets the default keyword substitution to be in the style of co -ko,
25511891Speter  and similarly for the other -k options.  This can be useful with file
25611891Speter  formats that cannot tolerate changing the lengths of keyword strings.
25711891Speter  However it also renders a RCS file readable only by RCS version 5 or later.
25811891Speter  Use rcs -kkv to restore the usual default substitution.
25911891Speter
26011891Speter  RCS can now be used by development groups that span time zone boundaries.
26111891Speter  All times are now displayed in UTC, and UTC is the default time zone.
26211891Speter  To use local time with co -d, append ` LT' to the time.
26311891Speter  When interchanging RCS files with sites running older versions of RCS,
26411891Speter  time stamp discrepancies may prevent checkins; to work around this,
26511891Speter  use `ci -d' with a time slightly in the future.
26611891Speter
26711891Speter  Dates are now displayed using four-digit years, not two-digit years.
26811891Speter  Years given in -d options must now have four digits.
26911891Speter  This change is required for RCS to continue to work after 1999/12/31.
27011891Speter  The form of dates in version 5 RCS files will not change until 2000/01/01,
27111891Speter  so in the meantime RCS files can still be interchanged with sites
27211891Speter  running older versions of RCS.  To make room for the longer dates,
27311891Speter  rlog now outputs `lines: +A -D' instead of `lines added/del: A/D'.
27411891Speter
27511891Speter  To help prevent diff programs that are broken or have run out of memory
27611891Speter  from trashing an RCS file, ci now checks diff output more carefully.
27711891Speter
27811891Speter  ci -k now handles the Log keyword, so that checking in a file
27911891Speter  with -k does not normally alter the file's contents.
28011891Speter
28111891Speter  RCS no longer outputs white space at the ends of lines
28211891Speter  unless the original working file had it.
28311891Speter  For consistency with other keywords,
28411891Speter  a space, not a tab, is now output after `$Log:'.
28511891Speter  Rlog now puts lockers and symbolic names on separate lines in the output
28611891Speter  to avoid generating lines that are too long.
28711891Speter  A similar fix has been made to lists in the RCS files themselves.
28811891Speter
28911891Speter  RCS no longer outputs the string `Locker: ' when expanding Header or Id
29011891Speter  keywords.  This saves space and reverts back to version 3 behavior.
29111891Speter
29211891Speter  The default branch is not put into the RCS file unless it is nonempty.
29311891Speter  Therefore, files generated by RCS version 5 can be read by RCS version 3
29411891Speter  unless they use the default branch feature introduced in version 4.
29511891Speter  This fixes a compatibility problem introduced by version 4.
29611891Speter
29711891Speter  RCS can now emulate older versions of RCS; see `co -V'.
29811891Speter  This may be useful to overcome compatibility problems
29911891Speter  due to the above changes.
30011891Speter
30111891Speter  Programs like Emacs can now interact with RCS commands via a pipe:
30211891Speter  the new -I option causes ci, co, and rcs to run interactively,
30311891Speter  even if standard input is not a terminal.
30411891Speter  These commands now accept multiple inputs from stdin separated by `.' lines.
30511891Speter
30611891Speter  ci now silently ignores the -t option if the RCS file already exists.
30711891Speter  This simplifies some shell scripts and improves security in setuid sites.
30811891Speter
30911891Speter  Descriptive text may be given directly in an argument of the form -t-string.
31011891Speter
31111891Speter  The character set for symbolic names has been upgraded
31211891Speter  from Ascii to ISO 8859.
31311891Speter
31411891Speter  rcsdiff now passes through all options used by GNU diff;
31511891Speter  this is a longer list than 4.3BSD diff.
31611891Speter
31711891Speter  merge's new -L option gives tags for merge's overlap report lines.
31811891Speter  This ability used to be present in a different, undocumented form;
31911891Speter  the new form is chosen for compatibility with GNU diff3's -L option.
32011891Speter
32111891Speter  rcsmerge and merge now have a -q option, just like their siblings do.
32211891Speter
32311891Speter  rcsclean's new -n option outputs what rcsclean would do,
32411891Speter  without actually doing it.
32511891Speter
32611891Speter  RCS now attempts to ignore parts of an RCS file that look like they come
32711891Speter  from a future version of RCS.
32811891Speter
32911891Speter  When properly configured, RCS now strictly conforms with Posix 1003.1-1990.
33011891Speter  RCS can still be compiled in non-Posix traditional Unix environments,
33111891Speter  and can use common BSD and USG extensions to Posix.
33211891Speter  RCS is a conforming Standard C program, and also compiles under traditional C.
33311891Speter
33411891Speter  Arbitrary limits on internal table sizes have been removed.
33511891Speter  The only limit now is the amount of memory available via malloc().
33611891Speter
33711891Speter  File temporaries, lock files, signals, and system call return codes
33811891Speter  are now handled more cleanly, portably, and quickly.
33911891Speter  Some race conditions have been removed.
34011891Speter
34111891Speter  A new compile-time option RCSPREFIX lets administrators avoid absolute path
34211891Speter  names for subsidiary programs, trading speed for flexibility.
34311891Speter
34411891Speter  The configuration procedure is now more automatic.
34511891Speter
34611891Speter  Snooping has been removed.
34711891Speter
34811891Speter
34911891SpeterVersion 4 was the first version distributed by FSF.
35011891SpeterBeside bug fixes, features new to RCS version 4 include:
35111891Speter
35211891Speter  The notion of default branch has been added; see rcs -b.
35311891Speter
35411891Speter
35511891SpeterVersion 3 was included in the 4.3BSD distribution.
35611891Speter
35711891Speter
35811891SpeterHere are some possible future changes for RCS:
35911891Speter
36011891Speter  Bring back sccstorcs.
36111891Speter
36211891Speter  Add an option to `rcsmerge' so that it can use an arbitrary program
36311891Speter  to do the 3-way merge, instead of the default `merge'.
36411891Speter  Likewise for `rcsdiff' and `diff'.  It should be possible to pass
36511891Speter  arbitrary options to these programs, and to the subsidiary `co's.
36611891Speter
36711891Speter  Add format options for finer control over the output of ident and rlog.
36811891Speter  E.g. there should be an easy way for rlog to output lines like
36911891Speter  `src/main.c 2.4 wft', one for each locked revision.
37011891Speter  rlog options should have three orthogonal types: selecting files,
37111891Speter  selecting revisions, and selecting rlog format.
37211891Speter
37311891Speter  Add format options for finer control over the output of keyword strings.
37411891Speter  E.g. there should be some way to prepend @(#), and there should be some
37511891Speter  way to change $ to some other character to disable further substitution.
37611891Speter  These options should make the resulting files uneditable, like -kv.
37711891Speter
37811891Speter  Add long options, e.g. `--version'.  Unfortunately RCS's option syntax
37911891Speter  is incompatible with getopt.  Perhaps the best way is to overload `rcs', e.g.
38011891Speter  `rcs diff --keyword-substitution=old file' instead of `rcsdiff -ko file'.
38111891Speter
38211891Speter  Add a way to put only the interesting part of the path into the $Header
38311891Speter  keyword expansion.
38411891Speter
38511891Speter  rlog -rM:N should work even if M and N have different numbers of fields,
38611891Speter  so long as M is an ancestor of N or vice versa.
38711891Speter
38811891Speter  rcs should evaluate options in order; this allows rcs -oS -nS.
38911891Speter
39011891Speter  rcs should be able to fix minor mistakes in checkin dates and authors.
39111891Speter
39211891Speter  Be able to redo your most recent checkin with minor changes.
39311891Speter
39411891Speter  co -u shouldn't complain about a writable working file if it won't change
39511891Speter  its contents.
39611891Speter
39711891Speter  Configure the Makefile automatically, as well as conf.h.
39811891Speter
39911891Speter  Add a new option to rcs that behaves like -o, but that doesn't lose the
40011891Speter  nonempty log messages, but instead merges them with the next revision
40111891Speter  if it exists, perhaps with a 1-line header containing author, date, etc.
40211891Speter
40311891Speter  Add a `-' option to take the list of pathnames from standard input.
40411891Speter  Perhaps the pathnames should be null-terminated, not newline-terminated,
40511891Speter  so that pathnames that contain newlines are handled properly.
40611891Speter
40711891Speter  Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b.
40811891Speter
40911891Speter  Add options to allow arbitrary combinations of working file names
41011891Speter  with RCS file names -- they shouldn't have to match.
41111891Speter
41211891Speter  Add an option to break a symbolic link to an RCS file,
41311891Speter  instead of breaking the hard link that it points to.
41411891Speter
41511891Speter  Add ways to specify the earliest revision, the most recent revision,
41611891Speter  the earliest or latest revision on a particular branch, and
41711891Speter  the parent or child of some other revision.
41811891Speter
41911891Speter  If a user has multiple locks, perhaps ci should fall back on ci -k's
42011891Speter  method to figure out which revision to use.
42111891Speter
42211891Speter  Symbolic names need not refer to existing branches and revisions.
42311891Speter  rcs(1)'s BUGS section says this is a bug.  Is it?  If so, it should be fixed.
42411891Speter
42511891Speter  Add an option to rcs -o so that old log messages are not deleted if
42611891Speter  the next undeleted revision exists, but are merely appended to the log
42711891Speter  message of that revision.
42811891Speter
42911891Speter  ci -k should be able to get keyword values from the first `$Log' entry.
43011891Speter
43111891Speter  Add an option to rcsclean to clean directories recursively.
43211891Speter
43311891Speter  Write an rcsck program that repairs corrupted RCS files,
43411891Speter  much as fsck repairs corrupted file systems.
43511891Speter  For example, it should remove stale lock files.
43611891Speter
43711891Speter  Clean up the source code with a consistent indenting style.
43811891Speter
43911891Speter  Update the date parser to use the more modern getdate.y by Bellovin,
44011891Speter  Salz, and Berets, or the even more modern getdate by Moraes.  None of
44111891Speter  these getdate implementations are as robust as RCS's old warhorse in
44211891Speter  avoiding problems like arithmetic overflow, so they'll have to be
44311891Speter  fixed first.
44411891Speter
44511891Speter  Break up the code into a library so that it's easier to write new programs
44611891Speter  that manipulate RCS files, and so that useless code is removed from the
44711891Speter  existing programs.  For example, the rcs command contains unnecessary
44811891Speter  keyword substitution baggage, and the merge command can be greatly pruned.
44911891Speter
45011891Speter  Make it easier to use your favorite text editor to edit log messages,
45111891Speter  etc. instead of having to type them in irretrievably at the terminal.
45211891Speter
45311891Speter  Let the user specify a search path for default branches,
45411891Speter  e.g. to use L as the default branch if it works, and M otherwise.
45511891Speter  Let the user require that at least one entry in the default branch path works.
45611891Speter  Let the user say that later entries in the default branch path are read only,
45711891Speter  i.e. one cannot check in changes to them.
45811891Speter  This should be an option settable by RCSINIT.
45911891Speter
46011891Speter  Add a way for a user to see which revisions affected which lines.
46111891Speter
46211891Speter  Have `rlog -nN F' print just the revision number that N translates to.
46311891Speter  E.g. `rlog -nB. F' would print the highest revision on the branch B.
46411891Speter  Use this to add an option -bB to rcsbranch, to freeze the named branch.
46511891Speter  This should interact well with default branches.
46611891Speter
46711891Speter  Add a co option that prints the revision number before each line,
46811891Speter  as SCCS's `get -m' does.
46911891Speter
47011891SpeterThe following projects require a change to RCS file format.
47111891Speter
47211891Speter  Allow keyword expansion to be changed on a per-revision basis,
47311891Speter  not on a per-file basis as now.  This would allow -ko to be used
47411891Speter  on imported revisions, with the default -kkv otherwise.
47511891Speter
47611891Speter  When two or more branches are merged, record all the ancestors
47711891Speter  of the new revision.  The hard part of this is keeping track of all
47811891Speter  the ancestors of a working file while it's checked out.
47911891Speter
48011891Speter  Add loose locking, which is like non-strict but applies to all users,
48111891Speter  not just the owner of the RCS file.
48211891Speter
48311891Speter  Be able to store RCS files in compressed format.
48411891Speter  Don't bother to use a .Z extension that would exceed file name length limits;
48511891Speter  just look at the magic number.
48611891Speter
48711891Speter  Add locker commentary, e.g. `co -l -m"checkout to fix merge bug" foo'
48811891Speter  to tell others why you checked out `foo'.
48911891Speter  Also record the time when the revision was locked,
49011891Speter  and perhaps the working pathname (if applicable).
49111891Speter
49211891Speter  Let the user mark an RCS revision as deleted; checking out such a revision
49311891Speter  would result in no working file.  Similarly, using `co -d' with a date either
49411891Speter  before the initial revision or after the file was marked deleted should
49511891Speter  remove the working file.  For extra credit, extend the notion of `deleted' to
49611891Speter  include `renamed'.  RCS should support arbitrary combinations of renaming and
49711891Speter  deletion, e.g. renaming A to B and B to A, checking in new revisions to both
49811891Speter  files, and then renaming them back.
49911891Speter
50011891Speter  Be able to check in an entire directory structure into a single RCS file.
50111891Speter
50211891Speter  Use a better scheme for locking revisions; the current scheme requires
50311891Speter  changing the RCS file just to lock or unlock a revision.
50411891Speter  The new scheme should coexist as well as possible with older versions of RCS,
50511891Speter  and should avoid the rare NFS bugs mentioned in rcsedit.c.
50611891Speter  E.g. if there's a reliable lockd running, RCS should use it
50711891Speter  instead of relying on NFS.
50811891Speter
50911891Speter  Add rcs options for changing keyword names, e.g. XConsortium instead of Id.
51011891Speter
51111891Speter  Add a `$Description' keyword; but this may be tricky, since descriptions can
51211891Speter  contain newlines and $s.
51311891Speter
51411891Speter  Add a `$Copyright' keyword that expands to a copyright notice.
51511891Speter
51611891Speter  Add frozen branches a la SCCS.  In general, be able to emulate all of
51711891Speter  SCCS, so that an SCCS-to-RCS program can be practical.  For example,
51811891Speter  there should be an equivalent to the SCCS prt command.
51911891Speter
52011891Speter  Add support for distributed RCS, where widely separated
52111891Speter  users cannot easily access each others' RCS files,
52211891Speter  and must periodically distribute and reconcile new revisions.
52311891Speter
52411891Speter  Be able to create empty branches.
52511891Speter
52611891Speter  Be able to store just deltas from a read-only principal copy,
52711891Speter  e.g. from source on CD-ROM.
52811891Speter
52911891Speter  Improve RCS's method for storing binary files.
53011891Speter  Although it is more efficient than SCCS's,
53111891Speter  the diff algorithm is still line oriented,
53211891Speter  and often generates long output for minor changes to an executable file.
53311891Speter
53411891Speter  From the user's point of view, it would be best if
53511891Speter  RCS detected and handled binary files without human intervention,
53611891Speter  switching expansion methods as needed from revision to revision.
53711891Speter
53811891Speter  Allow RCS to determine automagically whether -ko or -kb should be the default
53911891Speter  by inspecting the file's contents or name.  The magic should be optional
54011891Speter  and user-programmable.
54111891Speter
54211891Speter  Extend the grammar of RCS files so that keywords need not be in a fixed order.
54311891Speter
54411891Speter  Internationalize messages; unfortunately, there's no common standard yet.
54511891Speter  This requires a change in RCS file format because of the
54611891Speter  `empty log message' and `checked in with -k' hacks inside RCS files.
54711891Speter
54811891Speter  Add documentation in texinfo format.
549