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