NEWS revision 11891
1309576SglebiusRecent changes to RCS (and possible future changes)
2309576Sglebius
3309576Sglebius	$Id: NEWS,v 1.5 1995/06/16 06:19:24 eggert Exp $
4309576Sglebius
5309576Sglebius	Copyright 1991, 1992, 1993, 1994, 1995 Paul Eggert
6309576Sglebius	Distributed under license by the Free Software Foundation, Inc.
7309576Sglebius
8309576Sglebius	This file is part of RCS.
9309576Sglebius
10309576Sglebius	RCS is free software; you can redistribute it and/or modify it
11309576Sglebius	under the terms of the GNU General Public License as published
12309576Sglebius	by the Free Software Foundation; either version 2, or (at your
13309576Sglebius	option) any later version.
14309576Sglebius
15309576Sglebius	RCS is distributed in the hope that it will be useful, but
16309576Sglebius	WITHOUT ANY WARRANTY; without even the implied warranty of
17309576Sglebius	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18309576Sglebius	GNU General Public License for more details.
19309576Sglebius
20309576Sglebius	You should have received a copy of the GNU General Public License
21309576Sglebius	along with RCS; see the file COPYING.
22309576Sglebius	If not, write to the Free Software Foundation,
23309576Sglebius	59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24309576Sglebius
25309576Sglebius	Report problems and direct all questions to:
26309576Sglebius
27309576Sglebius		rcs-bugs@cs.purdue.edu
28309576Sglebius
29309576Sglebius
30309576SglebiusHere is a brief summary of user-visible changes since 5.6.
31309576Sglebius
32309576Sglebius  New options:
33309576Sglebius    `-kb' supports binary files.
34309576Sglebius    `-T' preserves the modification time of RCS files.
35309576Sglebius    `-V' prints the version number.
36309576Sglebius    `-zLT' causes RCS to use local time in working files and logs.
37309576Sglebius    `rcsclean -n' outputs what rcsclean would do, without actually doing it.
38309576Sglebius    `rlog -N' omits symbolic names.
39309576Sglebius  There is a new keyword `Name'.
40309576Sglebius  Inserted log lines now have the same prefix as the preceding `$Log' line.
41309576Sglebius
42309576SglebiusMost changes for RCS version 5.7 are to fix bugs and improve portability.
43309576SglebiusRCS now conforms to GNU configuration standards and to Posix 1003.1b-1993.
44309576Sglebius
45309576Sglebius
46309576SglebiusFeatures new to RCS version 5.7, and possibly incompatible
47309576Sglebiusin minor ways with previous practice, include:
48309576Sglebius
49309576Sglebius  Inserted log lines now have the same prefix as the preceding `$Log' line.
50309576Sglebius  E.g. if a $Log line starts with `// $Log', log lines are prefixed with `// '.
51309576Sglebius  RCS still records the (now obsolescent) comment leader inside RCS files,
52309576Sglebius  but it ignores the comment leader unless it is emulating older RCS versions.
53309576Sglebius  If you plan to access a file with both old and new versions of RCS,
54309576Sglebius  make sure its comment leader matches its `$Log' line prefix.
55309576Sglebius  For backwards compatibility with older versions of RCS,
56309576Sglebius  if the log prefix is `/*' or `(*' surrounded by optional white space,
57309576Sglebius  inserted log lines contain ` *' instead of `/*' or `(*';
58309576Sglebius  however, this usage is obsolescent and should not be relied on.
59309576Sglebius
60309576Sglebius  $Log string `Revision' times now use the same format as other times.
61309576Sglebius
62309576Sglebius  Log lines are now inserted even if -kk is specified; this simplifies merging.
63309576Sglebius
64309576Sglebius  ci's -rR option (with a nonempty R) now just specifies a revision number R.
65309576Sglebius  In some beta versions, it also reestablished the default behavior of
66309576Sglebius  releasing a lock and removing the working file.
67309576Sglebius  Now, only the bare -r option does this.
68309576Sglebius
69309576Sglebius  With an empty extension, any appearance of a directory named `RCS'
70309576Sglebius  in a pathname identifies the pathname as being that of an RCS file.
71309576Sglebius  For example, `a/RCS/b/c' is now an RCS file with an empty extension.
72309576Sglebius  Formerly, `RCS' had to be the last directory in the pathname.
73309576Sglebius
74309576Sglebius  rlog's -d option by default now uses exclusive time ranges.
75309576Sglebius  E.g. `rlog -d"<T"' now excludes revisions whose times equal T exactly.
76309576Sglebius  Use `rlog -d"<=T"' to get the old behavior.
77309576Sglebius
78309576Sglebius  merge now takes up to three -L options, one for each input file.
79309576Sglebius  Formerly, it took at most two -L options, for the 1st and 3rd input files.
80309576Sglebius
81309576Sglebius  `rcs' now requires at least one option; this is for future expansion.
82309576Sglebius
83309576SglebiusOther features new to RCS version 5.7 include:
84309576Sglebius
85309576Sglebius  merge and rcsmerge now pass -A, -E, and -e options to the subsidiary diff3.
86309576Sglebius
87309576Sglebius  rcs -kb acts like rcs -ko, except it uses binary I/O on working files.
88309576Sglebius  This makes no difference under Posix or Unix, but it does matter elsewhere.
89309576Sglebius  With -kb in effect, rcsmerge refuses to merge;
90309576Sglebius  this avoids common problems with CVS merging.
91309576Sglebius
92309576Sglebius  The following is for future use by GNU Emacs 19's version control package:
93309576Sglebius
94309576Sglebius    rcs's new -M option causes it to not send mail when you break somebody
95309576Sglebius    else's lock.  This is not meant for casual use; see rcs(1).
96309576Sglebius
97309576Sglebius    ci's new -i option causes an error if the RCS file already exists.
98309576Sglebius    Similarly, -j causes an error if the RCS file does not already exist.
99309576Sglebius
100309576Sglebius  The new keyword `Name' is supported; its value is the name, if any,
101309576Sglebius  used to check out the revision.  E.g. `co -rN foo' causes foo's
102309576Sglebius  $Name...$ keyword strings to end in `: N $'.
103309576Sglebius
104309576Sglebius  The new -zZONE option causes RCS to output dates and times using ISO 8601
105309576Sglebius  format with ZONE as the time zone, and to use ZONE as the default time
106309576Sglebius  zone for input.  Its most common use is the -zLT option, which causes RCS
107309576Sglebius  to use local time externally.  You can also specify foreign time zones;
108309576Sglebius  e.g. -z+05:30 causes RCS to use India time (5 hours 30 minutes east of UTC).
109309576Sglebius  This option does not affect RCS files themselves, which always use UTC;
110309576Sglebius  it affects only output (e.g. rlog output, keyword expansion, diff -c times)
111309576Sglebius  and interpretation of options (e.g. the -d option of ci, co, and rlog).
112309576Sglebius  Bare -z restores the default behavior of UTC with no time zone indication,
113309576Sglebius  and the traditional RCS date separator `/' instead of the ISO 8601 `-'.
114309576Sglebius  RCSINIT may contain a -z option.  ci -k parses UTC offsets.
115309576Sglebius
116309576Sglebius  The new -T option of ci, co, rcs, and rcsclean preserves the modification
117309576Sglebius  time of the RCS file unless a revision is added or removed.
118309576Sglebius  ci -T sets the RCS file's modification time to the new revision's time
119309576Sglebius  if the former precedes the latter and there is a new revision;
120309576Sglebius  otherwise, it preserves the RCS file's modification time.
121309576Sglebius  Use this option with care, as it can confuse `make'; see ci(1).
122309576Sglebius
123309576Sglebius  The new -N option of rlog omits symbolic names from the output.
124309576Sglebius
125309576Sglebius  A revision number that starts with `.' is considered to be relative to
126309576Sglebius  the default branch (normally the trunk).  A branch number followed by `.'
127309576Sglebius  stands for the last revision on that branch.
128309576Sglebius
129309576Sglebius  If someone else already holds the lock, rcs -l now asks whether you want
130309576Sglebius  to break it, instead of immediately reporting an error.
131309576Sglebius
132309576Sglebius  ci now always unlocks a revision like 3.5 if you check in a revision
133309576Sglebius  like 3.5.2.1 that is the first of a new branch of that revision.
134309576Sglebius  Formerly it was inconsistent.
135309576Sglebius
136309576Sglebius  File names may now contain tab, newline, space, and '$'.
137309576Sglebius  They are represented in keyword strings with \t, \n, \040, and \044.
138309576Sglebius  \ in a file name is now represented by \\ in a keyword string.
139309576Sglebius
140309576Sglebius  Identifiers may now start with a digit and (unless they are symbolic names)
141309576Sglebius  may contain `.'.  This permits author names like `john.doe' and `4tran'.
142309576Sglebius
143309576Sglebius  A bare -V option now prints the current version number.
144309576Sglebius
145309576Sglebius  rcsdiff outputs more readable context diff headers if diff -L works.
146309576Sglebius
147309576Sglebius  rcsdiff -rN -rN now suppresses needless checkout and comparison
148309576Sglebius  of identical revisions.
149309576Sglebius
150309576Sglebius  Error messages now contain the names of files to which they apply.
151309576Sglebius
152309576Sglebius  Mach style memory mapping is now supported.
153309576Sglebius
154309576Sglebius  The installation procedure now conforms to the GNU coding standards.
155309576Sglebius
156309576Sglebius  When properly configured, RCS now strictly conforms to Posix 1003.1b-1993.
157309576Sglebius
158309576Sglebius
159309576SglebiusFeatures new to RCS version 5.6 include:
160309576Sglebius
161309576Sglebius  Security holes have been plugged; setgid use is no longer supported.
162309576Sglebius
163309576Sglebius  co can retrieve old revisions much more efficiently.
164309576Sglebius  To generate the Nth youngest revision on the trunk,
165309576Sglebius  the old method used up to N passes through copies of the working file;
166309576Sglebius  the new method uses a piece table to generate the working file in one pass.
167309576Sglebius
168309576Sglebius  When ci finds no changes in the working file,
169309576Sglebius  it automatically reverts to the previous revision unless -f is given.
170309576Sglebius
171309576Sglebius  RCS follows symbolic links to RCS files instead of breaking them,
172309576Sglebius  and warns when it breaks hard links to RCS files.
173309576Sglebius
174309576Sglebius  `$' stands for the revision number taken from working file keyword strings.
175309576Sglebius  E.g. if F contains an Id keyword string,
176309576Sglebius  `rcsdiff -r$ F' compares F to its checked-in revision, and
177309576Sglebius  `rcs -nL:$ F' gives the symbolic name L to F's revision.
178309576Sglebius
179309576Sglebius  co and ci's new -M option sets the modification time
180309576Sglebius  of the working file to be that of the revision.
181309576Sglebius  Without -M, ci now tries to avoid changing the working file's
182309576Sglebius  modification time if its contents are unchanged.
183309576Sglebius
184309576Sglebius  rcs's new -m option changes the log message of an old revision.
185309576Sglebius
186309576Sglebius  RCS is portable to hosts that do not permit `,' in filenames.
187309576Sglebius  (`,' is not part of the Posix portable filename character set.)
188309576Sglebius  A new -x option specifies extensions other than `,v' for RCS files.
189309576Sglebius  The Unix default is `-x,v/', so that the working file `w' corresponds
190309576Sglebius  to the first file in the list `RCS/w,v', `w,v', `RCS/w' that works.
191309576Sglebius  The non-Unix default is `-x', so that only `RCS/w' is tried.
192309576Sglebius  Eventually, the Unix default should change to `-x/,v'
193309576Sglebius  to encourage interoperability among all Posix hosts.
194309576Sglebius
195309576Sglebius  A new RCSINIT environment variable specifies defaults for options like -x.
196309576Sglebius
197309576Sglebius  The separator for revision ranges has been changed from `-' to `:', because
198309576Sglebius  the range `A-B' is ambiguous if `A', `B' and `A-B' are all symbolic names.
199309576Sglebius  E.g. the old `rlog -r1.5-1.7' is now `rlog -r1.5:1.7'; ditto for `rcs -o'.
200309576Sglebius  For a while RCS will still support (but warn about) the old `-' separator.
201309576Sglebius
202309576Sglebius  RCS manipulates its lock files using a method that is more reliable under NFS.
203309576Sglebius
204309576Sglebius
205309576SglebiusFeatures new to RCS version 5 include:
206309576Sglebius
207309576Sglebius  RCS can check in arbitrary files, not just text files, if diff -a works.
208309576Sglebius  RCS can merge lines containing just a single `.' if diff3 -m works.
209309576Sglebius  GNU diff supports the -a and -m options.
210309576Sglebius
211309576Sglebius  RCS can now be used as a setuid program.
212309576Sglebius  See ci(1) for how users can employ setuid copies of ci, co, and rcsclean.
213309576Sglebius  Setuid privileges yield extra security if the effective user owns RCS files
214309576Sglebius  and directories, and if only the effective user can write RCS directories.
215309576Sglebius  RCS uses the real user for all accesses other than writing RCS directories.
216309576Sglebius  As described in ci(1), there are three levels of setuid support.
217309576Sglebius
218309576Sglebius    1.  Setuid works fully if the seteuid() system call lets any
219309576Sglebius    process switch back and forth between real and effective users,
220309576Sglebius    as specified in Posix 1003.1a Draft 5.
221309576Sglebius
222309576Sglebius    2.  On hosts with saved setuids (a Posix 1003.1-1990 option) and without
223309576Sglebius    a modern seteuid(), setuid works unless the real or effective user is root.
224309576Sglebius
225309576Sglebius    3.  On hosts that lack both modern seteuid() and saved setuids,
226309576Sglebius    setuid does not work, and RCS uses the effective user for all accesses;
227309576Sglebius    formerly it was inconsistent.
228309576Sglebius
229309576Sglebius  New options to co, rcsdiff, and rcsmerge give more flexibility to keyword
230309576Sglebius  substitution.
231309576Sglebius
232309576Sglebius    -kkv substitutes the default `$Keyword: value $' for keyword strings.
233309576Sglebius    However, a locker's name is inserted only as a file is being locked,
234309576Sglebius    i.e. by `ci -l' and `co -l'.  This is normally the default.
235309576Sglebius
236309576Sglebius    -kkvl acts like -kkv, except that a locker's name is always inserted
237309576Sglebius    if the given revision is currently locked.  This was the default in
238309576Sglebius    version 4.  It is now the default only with when using rcsdiff to
239309576Sglebius    compare a revision to a working file whose mode is that of a file
240309576Sglebius    checked out for changes.
241309576Sglebius
242309576Sglebius    -kk substitutes just `$Keyword$', which helps to ignore keyword values
243309576Sglebius    when comparing revisions.
244309576Sglebius
245309576Sglebius    -ko retrieves the old revision's keyword string, thus bypassing keyword
246309576Sglebius    substitution.
247309576Sglebius
248309576Sglebius    -kv retrieves just `value'.  This can ease the use of keyword values, but
249309576Sglebius    it is dangerous because it causes RCS to lose track of where the keywords
250309576Sglebius    are, so for safety the owner write permission of the working file is
251309576Sglebius    turned off when -kv is used; to edit the file later, check it out again
252309576Sglebius    without -kv.
253309576Sglebius
254309576Sglebius  rcs -ko sets the default keyword substitution to be in the style of co -ko,
255309576Sglebius  and similarly for the other -k options.  This can be useful with file
256309576Sglebius  formats that cannot tolerate changing the lengths of keyword strings.
257309576Sglebius  However it also renders a RCS file readable only by RCS version 5 or later.
258309576Sglebius  Use rcs -kkv to restore the usual default substitution.
259309576Sglebius
260309576Sglebius  RCS can now be used by development groups that span time zone boundaries.
261309576Sglebius  All times are now displayed in UTC, and UTC is the default time zone.
262309576Sglebius  To use local time with co -d, append ` LT' to the time.
263309576Sglebius  When interchanging RCS files with sites running older versions of RCS,
264309576Sglebius  time stamp discrepancies may prevent checkins; to work around this,
265309576Sglebius  use `ci -d' with a time slightly in the future.
266309576Sglebius
267309576Sglebius  Dates are now displayed using four-digit years, not two-digit years.
268309576Sglebius  Years given in -d options must now have four digits.
269309576Sglebius  This change is required for RCS to continue to work after 1999/12/31.
270309576Sglebius  The form of dates in version 5 RCS files will not change until 2000/01/01,
271309576Sglebius  so in the meantime RCS files can still be interchanged with sites
272309576Sglebius  running older versions of RCS.  To make room for the longer dates,
273309576Sglebius  rlog now outputs `lines: +A -D' instead of `lines added/del: A/D'.
274309576Sglebius
275309576Sglebius  To help prevent diff programs that are broken or have run out of memory
276309576Sglebius  from trashing an RCS file, ci now checks diff output more carefully.
277309576Sglebius
278309576Sglebius  ci -k now handles the Log keyword, so that checking in a file
279309576Sglebius  with -k does not normally alter the file's contents.
280309576Sglebius
281309576Sglebius  RCS no longer outputs white space at the ends of lines
282309576Sglebius  unless the original working file had it.
283309576Sglebius  For consistency with other keywords,
284309576Sglebius  a space, not a tab, is now output after `$Log:'.
285309576Sglebius  Rlog now puts lockers and symbolic names on separate lines in the output
286309576Sglebius  to avoid generating lines that are too long.
287309576Sglebius  A similar fix has been made to lists in the RCS files themselves.
288309576Sglebius
289309576Sglebius  RCS no longer outputs the string `Locker: ' when expanding Header or Id
290309576Sglebius  keywords.  This saves space and reverts back to version 3 behavior.
291309576Sglebius
292309576Sglebius  The default branch is not put into the RCS file unless it is nonempty.
293309576Sglebius  Therefore, files generated by RCS version 5 can be read by RCS version 3
294309576Sglebius  unless they use the default branch feature introduced in version 4.
295309576Sglebius  This fixes a compatibility problem introduced by version 4.
296309576Sglebius
297309576Sglebius  RCS can now emulate older versions of RCS; see `co -V'.
298309576Sglebius  This may be useful to overcome compatibility problems
299309576Sglebius  due to the above changes.
300309576Sglebius
301309576Sglebius  Programs like Emacs can now interact with RCS commands via a pipe:
302309576Sglebius  the new -I option causes ci, co, and rcs to run interactively,
303309576Sglebius  even if standard input is not a terminal.
304309576Sglebius  These commands now accept multiple inputs from stdin separated by `.' lines.
305309576Sglebius
306309576Sglebius  ci now silently ignores the -t option if the RCS file already exists.
307309576Sglebius  This simplifies some shell scripts and improves security in setuid sites.
308309576Sglebius
309309576Sglebius  Descriptive text may be given directly in an argument of the form -t-string.
310309576Sglebius
311309576Sglebius  The character set for symbolic names has been upgraded
312309576Sglebius  from Ascii to ISO 8859.
313309576Sglebius
314309576Sglebius  rcsdiff now passes through all options used by GNU diff;
315309576Sglebius  this is a longer list than 4.3BSD diff.
316309576Sglebius
317309576Sglebius  merge's new -L option gives tags for merge's overlap report lines.
318309576Sglebius  This ability used to be present in a different, undocumented form;
319309576Sglebius  the new form is chosen for compatibility with GNU diff3's -L option.
320309576Sglebius
321309576Sglebius  rcsmerge and merge now have a -q option, just like their siblings do.
322309576Sglebius
323309576Sglebius  rcsclean's new -n option outputs what rcsclean would do,
324309576Sglebius  without actually doing it.
325309576Sglebius
326309576Sglebius  RCS now attempts to ignore parts of an RCS file that look like they come
327309576Sglebius  from a future version of RCS.
328309576Sglebius
329309576Sglebius  When properly configured, RCS now strictly conforms with Posix 1003.1-1990.
330309576Sglebius  RCS can still be compiled in non-Posix traditional Unix environments,
331309576Sglebius  and can use common BSD and USG extensions to Posix.
332309576Sglebius  RCS is a conforming Standard C program, and also compiles under traditional C.
333309576Sglebius
334309576Sglebius  Arbitrary limits on internal table sizes have been removed.
335309576Sglebius  The only limit now is the amount of memory available via malloc().
336309576Sglebius
337309576Sglebius  File temporaries, lock files, signals, and system call return codes
338309576Sglebius  are now handled more cleanly, portably, and quickly.
339309576Sglebius  Some race conditions have been removed.
340309576Sglebius
341309576Sglebius  A new compile-time option RCSPREFIX lets administrators avoid absolute path
342309576Sglebius  names for subsidiary programs, trading speed for flexibility.
343309576Sglebius
344309576Sglebius  The configuration procedure is now more automatic.
345309576Sglebius
346309576Sglebius  Snooping has been removed.
347309576Sglebius
348309576Sglebius
349309576SglebiusVersion 4 was the first version distributed by FSF.
350309576SglebiusBeside bug fixes, features new to RCS version 4 include:
351309576Sglebius
352309576Sglebius  The notion of default branch has been added; see rcs -b.
353309576Sglebius
354309576Sglebius
355309576SglebiusVersion 3 was included in the 4.3BSD distribution.
356309576Sglebius
357309576Sglebius
358309576SglebiusHere are some possible future changes for RCS:
359309576Sglebius
360309576Sglebius  Bring back sccstorcs.
361309576Sglebius
362309576Sglebius  Add an option to `rcsmerge' so that it can use an arbitrary program
363309576Sglebius  to do the 3-way merge, instead of the default `merge'.
364309576Sglebius  Likewise for `rcsdiff' and `diff'.  It should be possible to pass
365309576Sglebius  arbitrary options to these programs, and to the subsidiary `co's.
366309576Sglebius
367309576Sglebius  Add format options for finer control over the output of ident and rlog.
368309576Sglebius  E.g. there should be an easy way for rlog to output lines like
369309576Sglebius  `src/main.c 2.4 wft', one for each locked revision.
370309576Sglebius  rlog options should have three orthogonal types: selecting files,
371309576Sglebius  selecting revisions, and selecting rlog format.
372309576Sglebius
373309576Sglebius  Add format options for finer control over the output of keyword strings.
374309576Sglebius  E.g. there should be some way to prepend @(#), and there should be some
375309576Sglebius  way to change $ to some other character to disable further substitution.
376309576Sglebius  These options should make the resulting files uneditable, like -kv.
377309576Sglebius
378309576Sglebius  Add long options, e.g. `--version'.  Unfortunately RCS's option syntax
379309576Sglebius  is incompatible with getopt.  Perhaps the best way is to overload `rcs', e.g.
380309576Sglebius  `rcs diff --keyword-substitution=old file' instead of `rcsdiff -ko file'.
381309576Sglebius
382309576Sglebius  Add a way to put only the interesting part of the path into the $Header
383309576Sglebius  keyword expansion.
384309576Sglebius
385309576Sglebius  rlog -rM:N should work even if M and N have different numbers of fields,
386309576Sglebius  so long as M is an ancestor of N or vice versa.
387309576Sglebius
388309576Sglebius  rcs should evaluate options in order; this allows rcs -oS -nS.
389309576Sglebius
390309576Sglebius  rcs should be able to fix minor mistakes in checkin dates and authors.
391309576Sglebius
392309576Sglebius  Be able to redo your most recent checkin with minor changes.
393309576Sglebius
394309576Sglebius  co -u shouldn't complain about a writable working file if it won't change
395309576Sglebius  its contents.
396309576Sglebius
397309576Sglebius  Configure the Makefile automatically, as well as conf.h.
398309576Sglebius
399309576Sglebius  Add a new option to rcs that behaves like -o, but that doesn't lose the
400309576Sglebius  nonempty log messages, but instead merges them with the next revision
401309576Sglebius  if it exists, perhaps with a 1-line header containing author, date, etc.
402309576Sglebius
403309576Sglebius  Add a `-' option to take the list of pathnames from standard input.
404309576Sglebius  Perhaps the pathnames should be null-terminated, not newline-terminated,
405309576Sglebius  so that pathnames that contain newlines are handled properly.
406309576Sglebius
407309576Sglebius  Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b.
408309576Sglebius
409309576Sglebius  Add options to allow arbitrary combinations of working file names
410309576Sglebius  with RCS file names -- they shouldn't have to match.
411309576Sglebius
412309576Sglebius  Add an option to break a symbolic link to an RCS file,
413309576Sglebius  instead of breaking the hard link that it points to.
414309576Sglebius
415309576Sglebius  Add ways to specify the earliest revision, the most recent revision,
416309576Sglebius  the earliest or latest revision on a particular branch, and
417309576Sglebius  the parent or child of some other revision.
418309576Sglebius
419309576Sglebius  If a user has multiple locks, perhaps ci should fall back on ci -k's
420309576Sglebius  method to figure out which revision to use.
421309576Sglebius
422309576Sglebius  Symbolic names need not refer to existing branches and revisions.
423309576Sglebius  rcs(1)'s BUGS section says this is a bug.  Is it?  If so, it should be fixed.
424309576Sglebius
425309576Sglebius  Add an option to rcs -o so that old log messages are not deleted if
426309576Sglebius  the next undeleted revision exists, but are merely appended to the log
427309576Sglebius  message of that revision.
428309576Sglebius
429309576Sglebius  ci -k should be able to get keyword values from the first `$Log' entry.
430309576Sglebius
431309576Sglebius  Add an option to rcsclean to clean directories recursively.
432309576Sglebius
433309576Sglebius  Write an rcsck program that repairs corrupted RCS files,
434309576Sglebius  much as fsck repairs corrupted file systems.
435309576Sglebius  For example, it should remove stale lock files.
436309576Sglebius
437309576Sglebius  Clean up the source code with a consistent indenting style.
438309576Sglebius
439309576Sglebius  Update the date parser to use the more modern getdate.y by Bellovin,
440309576Sglebius  Salz, and Berets, or the even more modern getdate by Moraes.  None of
441309576Sglebius  these getdate implementations are as robust as RCS's old warhorse in
442309576Sglebius  avoiding problems like arithmetic overflow, so they'll have to be
443309576Sglebius  fixed first.
444309576Sglebius
445309576Sglebius  Break up the code into a library so that it's easier to write new programs
446309576Sglebius  that manipulate RCS files, and so that useless code is removed from the
447309576Sglebius  existing programs.  For example, the rcs command contains unnecessary
448309576Sglebius  keyword substitution baggage, and the merge command can be greatly pruned.
449309576Sglebius
450309576Sglebius  Make it easier to use your favorite text editor to edit log messages,
451309576Sglebius  etc. instead of having to type them in irretrievably at the terminal.
452309576Sglebius
453309576Sglebius  Let the user specify a search path for default branches,
454309576Sglebius  e.g. to use L as the default branch if it works, and M otherwise.
455309576Sglebius  Let the user require that at least one entry in the default branch path works.
456309576Sglebius  Let the user say that later entries in the default branch path are read only,
457309576Sglebius  i.e. one cannot check in changes to them.
458309576Sglebius  This should be an option settable by RCSINIT.
459309576Sglebius
460309576Sglebius  Add a way for a user to see which revisions affected which lines.
461309576Sglebius
462309576Sglebius  Have `rlog -nN F' print just the revision number that N translates to.
463309576Sglebius  E.g. `rlog -nB. F' would print the highest revision on the branch B.
464309576Sglebius  Use this to add an option -bB to rcsbranch, to freeze the named branch.
465309576Sglebius  This should interact well with default branches.
466309576Sglebius
467309576Sglebius  Add a co option that prints the revision number before each line,
468309576Sglebius  as SCCS's `get -m' does.
469309576Sglebius
470309576SglebiusThe following projects require a change to RCS file format.
471309576Sglebius
472309576Sglebius  Allow keyword expansion to be changed on a per-revision basis,
473309576Sglebius  not on a per-file basis as now.  This would allow -ko to be used
474309576Sglebius  on imported revisions, with the default -kkv otherwise.
475309576Sglebius
476309576Sglebius  When two or more branches are merged, record all the ancestors
477309576Sglebius  of the new revision.  The hard part of this is keeping track of all
478309576Sglebius  the ancestors of a working file while it's checked out.
479309576Sglebius
480309576Sglebius  Add loose locking, which is like non-strict but applies to all users,
481309576Sglebius  not just the owner of the RCS file.
482309576Sglebius
483309576Sglebius  Be able to store RCS files in compressed format.
484309576Sglebius  Don't bother to use a .Z extension that would exceed file name length limits;
485309576Sglebius  just look at the magic number.
486309576Sglebius
487309576Sglebius  Add locker commentary, e.g. `co -l -m"checkout to fix merge bug" foo'
488309576Sglebius  to tell others why you checked out `foo'.
489309576Sglebius  Also record the time when the revision was locked,
490309576Sglebius  and perhaps the working pathname (if applicable).
491309576Sglebius
492309576Sglebius  Let the user mark an RCS revision as deleted; checking out such a revision
493309576Sglebius  would result in no working file.  Similarly, using `co -d' with a date either
494309576Sglebius  before the initial revision or after the file was marked deleted should
495309576Sglebius  remove the working file.  For extra credit, extend the notion of `deleted' to
496309576Sglebius  include `renamed'.  RCS should support arbitrary combinations of renaming and
497309576Sglebius  deletion, e.g. renaming A to B and B to A, checking in new revisions to both
498309576Sglebius  files, and then renaming them back.
499309576Sglebius
500309576Sglebius  Be able to check in an entire directory structure into a single RCS file.
501309576Sglebius
502309576Sglebius  Use a better scheme for locking revisions; the current scheme requires
503309576Sglebius  changing the RCS file just to lock or unlock a revision.
504309576Sglebius  The new scheme should coexist as well as possible with older versions of RCS,
505309576Sglebius  and should avoid the rare NFS bugs mentioned in rcsedit.c.
506309576Sglebius  E.g. if there's a reliable lockd running, RCS should use it
507309576Sglebius  instead of relying on NFS.
508309576Sglebius
509309576Sglebius  Add rcs options for changing keyword names, e.g. XConsortium instead of Id.
510309576Sglebius
511309576Sglebius  Add a `$Description' keyword; but this may be tricky, since descriptions can
512309576Sglebius  contain newlines and $s.
513309576Sglebius
514309576Sglebius  Add a `$Copyright' keyword that expands to a copyright notice.
515309576Sglebius
516309576Sglebius  Add frozen branches a la SCCS.  In general, be able to emulate all of
517309576Sglebius  SCCS, so that an SCCS-to-RCS program can be practical.  For example,
518309576Sglebius  there should be an equivalent to the SCCS prt command.
519309576Sglebius
520309576Sglebius  Add support for distributed RCS, where widely separated
521309576Sglebius  users cannot easily access each others' RCS files,
522309576Sglebius  and must periodically distribute and reconcile new revisions.
523309576Sglebius
524309576Sglebius  Be able to create empty branches.
525309576Sglebius
526309576Sglebius  Be able to store just deltas from a read-only principal copy,
527309576Sglebius  e.g. from source on CD-ROM.
528309576Sglebius
529309576Sglebius  Improve RCS's method for storing binary files.
530309576Sglebius  Although it is more efficient than SCCS's,
531309576Sglebius  the diff algorithm is still line oriented,
532309576Sglebius  and often generates long output for minor changes to an executable file.
533309576Sglebius
534309576Sglebius  From the user's point of view, it would be best if
535309576Sglebius  RCS detected and handled binary files without human intervention,
536309576Sglebius  switching expansion methods as needed from revision to revision.
537309576Sglebius
538309576Sglebius  Allow RCS to determine automagically whether -ko or -kb should be the default
539309576Sglebius  by inspecting the file's contents or name.  The magic should be optional
540309576Sglebius  and user-programmable.
541309576Sglebius
542309576Sglebius  Extend the grammar of RCS files so that keywords need not be in a fixed order.
543309576Sglebius
544309576Sglebius  Internationalize messages; unfortunately, there's no common standard yet.
545309576Sglebius  This requires a change in RCS file format because of the
546309576Sglebius  `empty log message' and `checked in with -k' hacks inside RCS files.
547309576Sglebius
548309576Sglebius  Add documentation in texinfo format.
549309576Sglebius