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