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