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