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