diff options
Diffstat (limited to 'gnu/usr.bin/rcs/NEWS')
-rw-r--r-- | gnu/usr.bin/rcs/NEWS | 548 |
1 files changed, 548 insertions, 0 deletions
diff --git a/gnu/usr.bin/rcs/NEWS b/gnu/usr.bin/rcs/NEWS new file mode 100644 index 0000000..9920806 --- /dev/null +++ b/gnu/usr.bin/rcs/NEWS @@ -0,0 +1,548 @@ +Recent changes to RCS (and possible future changes) + + $FreeBSD$ + + Copyright 1991, 1992, 1993, 1994, 1995 Paul Eggert + Distributed under license by the Free Software Foundation, Inc. + + This file is part of RCS. + + RCS is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 2, or (at your + option) any later version. + + RCS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with RCS; see the file COPYING. + If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Report problems and direct all questions to: + + rcs-bugs@cs.purdue.edu + + +Here is a brief summary of user-visible changes since 5.6. + + New options: + `-kb' supports binary files. + `-T' preserves the modification time of RCS files. + `-V' prints the version number. + `-zLT' causes RCS to use local time in working files and logs. + `rcsclean -n' outputs what rcsclean would do, without actually doing it. + `rlog -N' omits symbolic names. + There is a new keyword `Name'. + Inserted log lines now have the same prefix as the preceding `$Log' line. + +Most changes for RCS version 5.7 are to fix bugs and improve portability. +RCS now conforms to GNU configuration standards and to Posix 1003.1b-1993. + + +Features new to RCS version 5.7, and possibly incompatible +in minor ways with previous practice, include: + + Inserted log lines now have the same prefix as the preceding `$Log' line. + E.g. if a $Log line starts with `// $Log', log lines are prefixed with `// '. + RCS still records the (now obsolescent) comment leader inside RCS files, + but it ignores the comment leader unless it is emulating older RCS versions. + If you plan to access a file with both old and new versions of RCS, + make sure its comment leader matches its `$Log' line prefix. + For backwards compatibility with older versions of RCS, + if the log prefix is `/*' or `(*' surrounded by optional white space, + inserted log lines contain ` *' instead of `/*' or `(*'; + however, this usage is obsolescent and should not be relied on. + + $Log string `Revision' times now use the same format as other times. + + Log lines are now inserted even if -kk is specified; this simplifies merging. + + ci's -rR option (with a nonempty R) now just specifies a revision number R. + In some beta versions, it also reestablished the default behavior of + releasing a lock and removing the working file. + Now, only the bare -r option does this. + + With an empty extension, any appearance of a directory named `RCS' + in a pathname identifies the pathname as being that of an RCS file. + For example, `a/RCS/b/c' is now an RCS file with an empty extension. + Formerly, `RCS' had to be the last directory in the pathname. + + rlog's -d option by default now uses exclusive time ranges. + E.g. `rlog -d"<T"' now excludes revisions whose times equal T exactly. + Use `rlog -d"<=T"' to get the old behavior. + + merge now takes up to three -L options, one for each input file. + Formerly, it took at most two -L options, for the 1st and 3rd input files. + + `rcs' now requires at least one option; this is for future expansion. + +Other features new to RCS version 5.7 include: + + merge and rcsmerge now pass -A, -E, and -e options to the subsidiary diff3. + + rcs -kb acts like rcs -ko, except it uses binary I/O on working files. + This makes no difference under Posix or Unix, but it does matter elsewhere. + With -kb in effect, rcsmerge refuses to merge; + this avoids common problems with CVS merging. + + The following is for future use by GNU Emacs 19's version control package: + + rcs's new -M option causes it to not send mail when you break somebody + else's lock. This is not meant for casual use; see rcs(1). + + ci's new -i option causes an error if the RCS file already exists. + Similarly, -j causes an error if the RCS file does not already exist. + + The new keyword `Name' is supported; its value is the name, if any, + used to check out the revision. E.g. `co -rN foo' causes foo's + $Name...$ keyword strings to end in `: N $'. + + The new -zZONE option causes RCS to output dates and times using ISO 8601 + format with ZONE as the time zone, and to use ZONE as the default time + zone for input. Its most common use is the -zLT option, which causes RCS + to use local time externally. You can also specify foreign time zones; + e.g. -z+05:30 causes RCS to use India time (5 hours 30 minutes east of UTC). + This option does not affect RCS files themselves, which always use UTC; + it affects only output (e.g. rlog output, keyword expansion, diff -c times) + and interpretation of options (e.g. the -d option of ci, co, and rlog). + Bare -z restores the default behavior of UTC with no time zone indication, + and the traditional RCS date separator `/' instead of the ISO 8601 `-'. + RCSINIT may contain a -z option. ci -k parses UTC offsets. + + The new -T option of ci, co, rcs, and rcsclean preserves the modification + time of the RCS file unless a revision is added or removed. + ci -T sets the RCS file's modification time to the new revision's time + if the former precedes the latter and there is a new revision; + otherwise, it preserves the RCS file's modification time. + Use this option with care, as it can confuse `make'; see ci(1). + + The new -N option of rlog omits symbolic names from the output. + + A revision number that starts with `.' is considered to be relative to + the default branch (normally the trunk). A branch number followed by `.' + stands for the last revision on that branch. + + If someone else already holds the lock, rcs -l now asks whether you want + to break it, instead of immediately reporting an error. + + ci now always unlocks a revision like 3.5 if you check in a revision + like 3.5.2.1 that is the first of a new branch of that revision. + Formerly it was inconsistent. + + File names may now contain tab, newline, space, and '$'. + They are represented in keyword strings with \t, \n, \040, and \044. + \ in a file name is now represented by \\ in a keyword string. + + Identifiers may now start with a digit and (unless they are symbolic names) + may contain `.'. This permits author names like `john.doe' and `4tran'. + + A bare -V option now prints the current version number. + + rcsdiff outputs more readable context diff headers if diff -L works. + + rcsdiff -rN -rN now suppresses needless checkout and comparison + of identical revisions. + + Error messages now contain the names of files to which they apply. + + Mach style memory mapping is now supported. + + The installation procedure now conforms to the GNU coding standards. + + When properly configured, RCS now strictly conforms to Posix 1003.1b-1993. + + +Features new to RCS version 5.6 include: + + Security holes have been plugged; setgid use is no longer supported. + + co can retrieve old revisions much more efficiently. + To generate the Nth youngest revision on the trunk, + the old method used up to N passes through copies of the working file; + the new method uses a piece table to generate the working file in one pass. + + When ci finds no changes in the working file, + it automatically reverts to the previous revision unless -f is given. + + RCS follows symbolic links to RCS files instead of breaking them, + and warns when it breaks hard links to RCS files. + + `$' stands for the revision number taken from working file keyword strings. + E.g. if F contains an Id keyword string, + `rcsdiff -r$ F' compares F to its checked-in revision, and + `rcs -nL:$ F' gives the symbolic name L to F's revision. + + co and ci's new -M option sets the modification time + of the working file to be that of the revision. + Without -M, ci now tries to avoid changing the working file's + modification time if its contents are unchanged. + + rcs's new -m option changes the log message of an old revision. + + RCS is portable to hosts that do not permit `,' in filenames. + (`,' is not part of the Posix portable filename character set.) + A new -x option specifies extensions other than `,v' for RCS files. + The Unix default is `-x,v/', so that the working file `w' corresponds + to the first file in the list `RCS/w,v', `w,v', `RCS/w' that works. + The non-Unix default is `-x', so that only `RCS/w' is tried. + Eventually, the Unix default should change to `-x/,v' + to encourage interoperability among all Posix hosts. + + A new RCSINIT environment variable specifies defaults for options like -x. + + The separator for revision ranges has been changed from `-' to `:', because + the range `A-B' is ambiguous if `A', `B' and `A-B' are all symbolic names. + E.g. the old `rlog -r1.5-1.7' is now `rlog -r1.5:1.7'; ditto for `rcs -o'. + For a while RCS will still support (but warn about) the old `-' separator. + + RCS manipulates its lock files using a method that is more reliable under NFS. + + +Features new to RCS version 5 include: + + RCS can check in arbitrary files, not just text files, if diff -a works. + RCS can merge lines containing just a single `.' if diff3 -m works. + GNU diff supports the -a and -m options. + + RCS can now be used as a setuid program. + See ci(1) for how users can employ setuid copies of ci, co, and rcsclean. + Setuid privileges yield extra security if the effective user owns RCS files + and directories, and if only the effective user can write RCS directories. + RCS uses the real user for all accesses other than writing RCS directories. + As described in ci(1), there are three levels of setuid support. + + 1. Setuid works fully if the seteuid() system call lets any + process switch back and forth between real and effective users, + as specified in Posix 1003.1a Draft 5. + + 2. On hosts with saved setuids (a Posix 1003.1-1990 option) and without + a modern seteuid(), setuid works unless the real or effective user is root. + + 3. On hosts that lack both modern seteuid() and saved setuids, + setuid does not work, and RCS uses the effective user for all accesses; + formerly it was inconsistent. + + New options to co, rcsdiff, and rcsmerge give more flexibility to keyword + substitution. + + -kkv substitutes the default `$Keyword: value $' for keyword strings. + However, a locker's name is inserted only as a file is being locked, + i.e. by `ci -l' and `co -l'. This is normally the default. + + -kkvl acts like -kkv, except that a locker's name is always inserted + if the given revision is currently locked. This was the default in + version 4. It is now the default only with when using rcsdiff to + compare a revision to a working file whose mode is that of a file + checked out for changes. + + -kk substitutes just `$Keyword$', which helps to ignore keyword values + when comparing revisions. + + -ko retrieves the old revision's keyword string, thus bypassing keyword + substitution. + + -kv retrieves just `value'. This can ease the use of keyword values, but + it is dangerous because it causes RCS to lose track of where the keywords + are, so for safety the owner write permission of the working file is + turned off when -kv is used; to edit the file later, check it out again + without -kv. + + rcs -ko sets the default keyword substitution to be in the style of co -ko, + and similarly for the other -k options. This can be useful with file + formats that cannot tolerate changing the lengths of keyword strings. + However it also renders a RCS file readable only by RCS version 5 or later. + Use rcs -kkv to restore the usual default substitution. + + RCS can now be used by development groups that span time zone boundaries. + All times are now displayed in UTC, and UTC is the default time zone. + To use local time with co -d, append ` LT' to the time. + When interchanging RCS files with sites running older versions of RCS, + time stamp discrepancies may prevent checkins; to work around this, + use `ci -d' with a time slightly in the future. + + Dates are now displayed using four-digit years, not two-digit years. + Years given in -d options must now have four digits. + This change is required for RCS to continue to work after 1999/12/31. + The form of dates in version 5 RCS files will not change until 2000/01/01, + so in the meantime RCS files can still be interchanged with sites + running older versions of RCS. To make room for the longer dates, + rlog now outputs `lines: +A -D' instead of `lines added/del: A/D'. + + To help prevent diff programs that are broken or have run out of memory + from trashing an RCS file, ci now checks diff output more carefully. + + ci -k now handles the Log keyword, so that checking in a file + with -k does not normally alter the file's contents. + + RCS no longer outputs white space at the ends of lines + unless the original working file had it. + For consistency with other keywords, + a space, not a tab, is now output after `$Log:'. + Rlog now puts lockers and symbolic names on separate lines in the output + to avoid generating lines that are too long. + A similar fix has been made to lists in the RCS files themselves. + + RCS no longer outputs the string `Locker: ' when expanding Header or Id + keywords. This saves space and reverts back to version 3 behavior. + + The default branch is not put into the RCS file unless it is nonempty. + Therefore, files generated by RCS version 5 can be read by RCS version 3 + unless they use the default branch feature introduced in version 4. + This fixes a compatibility problem introduced by version 4. + + RCS can now emulate older versions of RCS; see `co -V'. + This may be useful to overcome compatibility problems + due to the above changes. + + Programs like Emacs can now interact with RCS commands via a pipe: + the new -I option causes ci, co, and rcs to run interactively, + even if standard input is not a terminal. + These commands now accept multiple inputs from stdin separated by `.' lines. + + ci now silently ignores the -t option if the RCS file already exists. + This simplifies some shell scripts and improves security in setuid sites. + + Descriptive text may be given directly in an argument of the form -t-string. + + The character set for symbolic names has been upgraded + from Ascii to ISO 8859. + + rcsdiff now passes through all options used by GNU diff; + this is a longer list than 4.3BSD diff. + + merge's new -L option gives tags for merge's overlap report lines. + This ability used to be present in a different, undocumented form; + the new form is chosen for compatibility with GNU diff3's -L option. + + rcsmerge and merge now have a -q option, just like their siblings do. + + rcsclean's new -n option outputs what rcsclean would do, + without actually doing it. + + RCS now attempts to ignore parts of an RCS file that look like they come + from a future version of RCS. + + When properly configured, RCS now strictly conforms with Posix 1003.1-1990. + RCS can still be compiled in non-Posix traditional Unix environments, + and can use common BSD and USG extensions to Posix. + RCS is a conforming Standard C program, and also compiles under traditional C. + + Arbitrary limits on internal table sizes have been removed. + The only limit now is the amount of memory available via malloc(). + + File temporaries, lock files, signals, and system call return codes + are now handled more cleanly, portably, and quickly. + Some race conditions have been removed. + + A new compile-time option RCSPREFIX lets administrators avoid absolute path + names for subsidiary programs, trading speed for flexibility. + + The configuration procedure is now more automatic. + + Snooping has been removed. + + +Version 4 was the first version distributed by FSF. +Beside bug fixes, features new to RCS version 4 include: + + The notion of default branch has been added; see rcs -b. + + +Version 3 was included in the 4.3BSD distribution. + + +Here are some possible future changes for RCS: + + Bring back sccstorcs. + + Add an option to `rcsmerge' so that it can use an arbitrary program + to do the 3-way merge, instead of the default `merge'. + Likewise for `rcsdiff' and `diff'. It should be possible to pass + arbitrary options to these programs, and to the subsidiary `co's. + + Add format options for finer control over the output of ident and rlog. + E.g. there should be an easy way for rlog to output lines like + `src/main.c 2.4 wft', one for each locked revision. + rlog options should have three orthogonal types: selecting files, + selecting revisions, and selecting rlog format. + + Add format options for finer control over the output of keyword strings. + E.g. there should be some way to prepend @(#), and there should be some + way to change $ to some other character to disable further substitution. + These options should make the resulting files uneditable, like -kv. + + Add long options, e.g. `--version'. Unfortunately RCS's option syntax + is incompatible with getopt. Perhaps the best way is to overload `rcs', e.g. + `rcs diff --keyword-substitution=old file' instead of `rcsdiff -ko file'. + + Add a way to put only the interesting part of the path into the $Header + keyword expansion. + + rlog -rM:N should work even if M and N have different numbers of fields, + so long as M is an ancestor of N or vice versa. + + rcs should evaluate options in order; this allows rcs -oS -nS. + + rcs should be able to fix minor mistakes in checkin dates and authors. + + Be able to redo your most recent checkin with minor changes. + + co -u shouldn't complain about a writable working file if it won't change + its contents. + + Configure the Makefile automatically, as well as conf.h. + + Add a new option to rcs that behaves like -o, but that doesn't lose the + nonempty log messages, but instead merges them with the next revision + if it exists, perhaps with a 1-line header containing author, date, etc. + + Add a `-' option to take the list of pathnames from standard input. + Perhaps the pathnames should be null-terminated, not newline-terminated, + so that pathnames that contain newlines are handled properly. + + Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b. + + Add options to allow arbitrary combinations of working file names + with RCS file names -- they shouldn't have to match. + + Add an option to break a symbolic link to an RCS file, + instead of breaking the hard link that it points to. + + Add ways to specify the earliest revision, the most recent revision, + the earliest or latest revision on a particular branch, and + the parent or child of some other revision. + + If a user has multiple locks, perhaps ci should fall back on ci -k's + method to figure out which revision to use. + + Symbolic names need not refer to existing branches and revisions. + rcs(1)'s BUGS section says this is a bug. Is it? If so, it should be fixed. + + Add an option to rcs -o so that old log messages are not deleted if + the next undeleted revision exists, but are merely appended to the log + message of that revision. + + ci -k should be able to get keyword values from the first `$Log' entry. + + Add an option to rcsclean to clean directories recursively. + + Write an rcsck program that repairs corrupted RCS files, + much as fsck repairs corrupted file systems. + For example, it should remove stale lock files. + + Clean up the source code with a consistent indenting style. + + Update the date parser to use the more modern getdate.y by Bellovin, + Salz, and Berets, or the even more modern getdate by Moraes. None of + these getdate implementations are as robust as RCS's old warhorse in + avoiding problems like arithmetic overflow, so they'll have to be + fixed first. + + Break up the code into a library so that it's easier to write new programs + that manipulate RCS files, and so that useless code is removed from the + existing programs. For example, the rcs command contains unnecessary + keyword substitution baggage, and the merge command can be greatly pruned. + + Make it easier to use your favorite text editor to edit log messages, + etc. instead of having to type them in irretrievably at the terminal. + + Let the user specify a search path for default branches, + e.g. to use L as the default branch if it works, and M otherwise. + Let the user require that at least one entry in the default branch path works. + Let the user say that later entries in the default branch path are read only, + i.e. one cannot check in changes to them. + This should be an option settable by RCSINIT. + + Add a way for a user to see which revisions affected which lines. + + Have `rlog -nN F' print just the revision number that N translates to. + E.g. `rlog -nB. F' would print the highest revision on the branch B. + Use this to add an option -bB to rcsbranch, to freeze the named branch. + This should interact well with default branches. + + Add a co option that prints the revision number before each line, + as SCCS's `get -m' does. + +The following projects require a change to RCS file format. + + Allow keyword expansion to be changed on a per-revision basis, + not on a per-file basis as now. This would allow -ko to be used + on imported revisions, with the default -kkv otherwise. + + When two or more branches are merged, record all the ancestors + of the new revision. The hard part of this is keeping track of all + the ancestors of a working file while it's checked out. + + Add loose locking, which is like non-strict but applies to all users, + not just the owner of the RCS file. + + Be able to store RCS files in compressed format. + Don't bother to use a .Z extension that would exceed file name length limits; + just look at the magic number. + + Add locker commentary, e.g. `co -l -m"checkout to fix merge bug" foo' + to tell others why you checked out `foo'. + Also record the time when the revision was locked, + and perhaps the working pathname (if applicable). + + Let the user mark an RCS revision as deleted; checking out such a revision + would result in no working file. Similarly, using `co -d' with a date either + before the initial revision or after the file was marked deleted should + remove the working file. For extra credit, extend the notion of `deleted' to + include `renamed'. RCS should support arbitrary combinations of renaming and + deletion, e.g. renaming A to B and B to A, checking in new revisions to both + files, and then renaming them back. + + Be able to check in an entire directory structure into a single RCS file. + + Use a better scheme for locking revisions; the current scheme requires + changing the RCS file just to lock or unlock a revision. + The new scheme should coexist as well as possible with older versions of RCS, + and should avoid the rare NFS bugs mentioned in rcsedit.c. + E.g. if there's a reliable lockd running, RCS should use it + instead of relying on NFS. + + Add rcs options for changing keyword names, e.g. XConsortium instead of Id. + + Add a `$Description' keyword; but this may be tricky, since descriptions can + contain newlines and $s. + + Add a `$Copyright' keyword that expands to a copyright notice. + + Add frozen branches a la SCCS. In general, be able to emulate all of + SCCS, so that an SCCS-to-RCS program can be practical. For example, + there should be an equivalent to the SCCS prt command. + + Add support for distributed RCS, where widely separated + users cannot easily access each others' RCS files, + and must periodically distribute and reconcile new revisions. + + Be able to create empty branches. + + Be able to store just deltas from a read-only principal copy, + e.g. from source on CD-ROM. + + Improve RCS's method for storing binary files. + Although it is more efficient than SCCS's, + the diff algorithm is still line oriented, + and often generates long output for minor changes to an executable file. + + From the user's point of view, it would be best if + RCS detected and handled binary files without human intervention, + switching expansion methods as needed from revision to revision. + + Allow RCS to determine automagically whether -ko or -kb should be the default + by inspecting the file's contents or name. The magic should be optional + and user-programmable. + + Extend the grammar of RCS files so that keywords need not be in a fixed order. + + Internationalize messages; unfortunately, there's no common standard yet. + This requires a change in RCS file format because of the + `empty log message' and `checked in with -k' hacks inside RCS files. + + Add documentation in texinfo format. |