From 4c007b3e0e077ac205288175f7e52ba10ff5c7a8 Mon Sep 17 00:00:00 2001 From: CSRG Date: Wed, 30 Dec 1992 02:03:53 -0800 Subject: [PATCH] BSD 4_4 development Work on file usr/src/contrib/rcs-V5.6/man/ci.1 Work on file usr/src/contrib/rcs-V5.6/man/co.1 Work on file usr/src/contrib/rcs-V5.6/man/ident.1 Work on file usr/src/contrib/rcs-V5.6/man/merge.1 Work on file usr/src/contrib/rcs-V5.6/man/rcs.1 Work on file usr/src/contrib/rcs-V5.6/man/rcsdiff.1 Work on file usr/src/contrib/rcs-V5.6/man/rcsfile.5 Work on file usr/src/contrib/rcs-V5.6/man/rcsfreeze.1 Work on file usr/src/contrib/rcs-V5.6/man/rcsintro.1 Work on file usr/src/contrib/rcs-V5.6/man/rlog.1 Work on file usr/src/contrib/rcs-V5.6/man/rcsmerge.1 Work on file usr/src/contrib/rcs-V5.6/man/rcsclean.1 Work on file usr/src/contrib/rcs-V5.6/COPYING Work on file usr/src/contrib/rcs-V5.6/README Work on file usr/src/contrib/rcs-V5.6/rcs_func.ms Work on file usr/src/contrib/rcs-V5.6/rcs.ps Work on file usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps Work on file usr/src/contrib/rcs-V5.6/Makefile Synthesized-from: CSRG/cd3/4.4 --- usr/src/contrib/rcs-V5.6/COPYING | 339 + usr/src/contrib/rcs-V5.6/Makefile | 20 + usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps | 1 + usr/src/contrib/rcs-V5.6/README | 407 + usr/src/contrib/rcs-V5.6/man/ci.1 | 772 ++ usr/src/contrib/rcs-V5.6/man/co.1 | 569 ++ usr/src/contrib/rcs-V5.6/man/ident.1 | 76 + usr/src/contrib/rcs-V5.6/man/merge.1 | 102 + usr/src/contrib/rcs-V5.6/man/rcs.1 | 397 + usr/src/contrib/rcs-V5.6/man/rcsclean.1 | 177 + usr/src/contrib/rcs-V5.6/man/rcsdiff.1 | 152 + usr/src/contrib/rcs-V5.6/man/rcsfile.5 | 224 + usr/src/contrib/rcs-V5.6/man/rcsfreeze.1 | 68 + usr/src/contrib/rcs-V5.6/man/rcsintro.1 | 292 + usr/src/contrib/rcs-V5.6/man/rcsmerge.1 | 140 + usr/src/contrib/rcs-V5.6/man/rlog.1 | 260 + usr/src/contrib/rcs-V5.6/rcs.ps | 11236 +++++++++++++++++++++ usr/src/contrib/rcs-V5.6/rcs_func.ms | 95 + 18 files changed, 15327 insertions(+) create mode 100644 usr/src/contrib/rcs-V5.6/COPYING create mode 100644 usr/src/contrib/rcs-V5.6/Makefile create mode 120000 usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps create mode 100644 usr/src/contrib/rcs-V5.6/README create mode 100644 usr/src/contrib/rcs-V5.6/man/ci.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/co.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/ident.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/merge.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/rcs.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/rcsclean.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/rcsdiff.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/rcsfile.5 create mode 100644 usr/src/contrib/rcs-V5.6/man/rcsfreeze.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/rcsintro.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/rcsmerge.1 create mode 100644 usr/src/contrib/rcs-V5.6/man/rlog.1 create mode 100644 usr/src/contrib/rcs-V5.6/rcs.ps create mode 100644 usr/src/contrib/rcs-V5.6/rcs_func.ms diff --git a/usr/src/contrib/rcs-V5.6/COPYING b/usr/src/contrib/rcs-V5.6/COPYING new file mode 100644 index 0000000000..a43ea2126f --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program 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 of the License, or + (at your option) any later version. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/usr/src/contrib/rcs-V5.6/Makefile b/usr/src/contrib/rcs-V5.6/Makefile new file mode 100644 index 0000000000..fd0724aba0 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/Makefile @@ -0,0 +1,20 @@ +SUBDIR= src man +DESTDIR= + +all: ${SUBDIR} + +${SUBDIR}: FRC + cd $@; make ${MFLAGS} DESTDIR=${DESTDIR} + +install: + for i in ${SUBDIR}; do \ + (cd $$i; make ${MFLAGS} DESTDIR=${DESTDIR} install); \ + done + +clean: + for i in ${SUBDIR}; do \ + (cd $$i; make ${MFLAGS} DESTDIR=${DESTDIR} clean); \ + done + +FRC: + diff --git a/usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps b/usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps new file mode 120000 index 0000000000..a6cc96ba48 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/PSD.doc/rcs.ps @@ -0,0 +1 @@ +../rcs.ps \ No newline at end of file diff --git a/usr/src/contrib/rcs-V5.6/README b/usr/src/contrib/rcs-V5.6/README new file mode 100644 index 0000000000..c320e09787 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/README @@ -0,0 +1,407 @@ +This directory contains complete sources for RCS version 5.6. + +RCS, the Revision Control System, manages multiple revisions of files. +RCS can store, retrieve, log, identify, and merge revisions. +It is useful for files that are revised frequently, +e.g. programs, documentation, graphics, and papers. + +/* Copyright (C) 1982, 1988, 1989 Walter Tichy + Copyright 1990, 1991 by 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, 675 Mass Ave, Cambridge, MA 02139, USA. + +Report problems and direct all questions to: + + rcs-bugs@cs.purdue.edu + +*/ + +$Id: README,v 5.16 1991/11/03 01:09:19 eggert Exp $ + + +Installation notes: + + RCS requires a diff that supports the -n option. + Get GNU diff (version 1.15 or later) if your diff lacks -n. + + RCS works best with a diff that supports -a and -L, + and a diff3 that supports -E and -m. + GNU diff supports these options. + + Sources for RCS are in the src directory. + Read the directions in src/README to build RCS on your system. + + Manual entries reside in man. + + Troff source for the paper `RCS--A System for Version Control', which + appeared in _Software--Practice & Experience_, is in rcs.ms. + + If you don't have troff, you can get GNU groff to format the documentation. + + +RCS compatibility notes: + + RCS version 5 reads RCS files written by any RCS version released since 1982. + It also writes RCS files that these older versions of RCS can read, + unless you use one of the following new features: + + checkin times after 1999/12/31 23:59:59 GMT + checking in non-text files + non-Ascii symbolic names + rcs -bX, where X is nonempty + rcs -kX, where X is not `kv' + RCS files that exceed hardcoded limits in older RCS versions + + A working file written by RCS 5.5 or later contains four-digit years in its + keyword strings. If you check out a working file with RCS 5.5 or later, + an older RCS version's `ci -k' may insist on two-digit years. + Fix this with `co -V4', or by editing the working file. + + +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. + + Experimental support for MS-DOS and OS/2 is available as part of a separate + software distribution. + + +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 binary 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 timezone boundaries. + All times are now displayed in GMT, and GMT is the default timezone. + 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. + + 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. + + +Further projects: + + Add format options for finer control over the output of ident and rlog. + + Be able to redo the most recent checkin with minor changes. + + 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. + + Add general options so that rcsdiff and rcsmerge can pass arbitrary options + to its subsidiary co and diff processes. E.g. + + -.OPTION to pass OPTION to the subsidiary `co' + -/OPTION to pass OPTION to the subsidiary `diff' (for rcsdiff only) + + For example: + + rcsdiff -.-d"1991/02/09 18:09" -.-sRel -/+unified -/-C -/5 -/-d foo.c + + invokes `co -d"1991/02/09 18:09" -sRel ...' and `diff +unified -C 5 -d ...'. + To pass an option to just one subsidiary `co', put the -. option + after the corresponding -r option. For example: + + rcsmerge -r1.4 -.-ko -r1.8 -.-kkv foo.c + + passes `-ko' to the first subsidiary `co', and `-kkv' to the second one. + + + Permit multiple option-pathname pairs, e.g. co -r1.4 a -r1.5 b. + + 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. + + Write an rcsck program that repairs corrupted RCS files, + much as fsck repairs corrupted file systems. + + 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. + +The following projects require a change to RCS file format, +and thus must wait until at least RCS version 6. + + 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. + + 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. + + Add rcs options for changing keyword names, e.g. XConsortium instead of Id. + + 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. + + 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. + + 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. + + Add a new `-kb' expansion for binary files on non-Posix hosts + that distinguish between text and binary I/O. + The current `text_work_stdio' compile-time switch is too inflexible. + This fix either requires nonstandard primitives like DOS's setmode(), + or requires that `-kb' be specified on initial checkin and never changed. + 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. + + 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. + + +Credits: + + RCS was designed and built by Walter F. Tichy of Purdue University. + RCS version 3 was released in 1983. + + Adam Hammer, Thomas Narten, and Dan Trinkle of Purdue supported RCS through + version 4.3, released in 1990. Guy Harris of Sun contributed many porting + fixes. Paul Eggert of System Development Corporation contributed bug fixes + and tuneups. Jay Lepreau contributed 4.3BSD support. + + Paul Eggert of Twin Sun wrote the changes for RCS version 5, released in 1991. + Rich Braun of Kronos and Andy Glew of Intel contributed ideas for new options. + Bill Hahn of Stratus contributed ideas for setuid support. + Ideas for piece tables came from Joe Berkovitz of Stratus and Walter F. Tichy. + Matt Cross of Stratus contributed test case ideas. + Adam Hammer of Purdue QAed. diff --git a/usr/src/contrib/rcs-V5.6/man/ci.1 b/usr/src/contrib/rcs-V5.6/man/ci.1 new file mode 100644 index 0000000000..5736dc95a0 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/ci.1 @@ -0,0 +1,772 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: ci.1,v 5.9 1991/10/07 17:32:46 eggert Exp $ +.ds r \&\s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH CI 1 \*(Dt GNU +.SH NAME +ci \- check in RCS revisions +.SH SYNOPSIS +.B ci +.RI [ options ] " file " .\|.\|. +.SH DESCRIPTION +.B ci +stores new revisions into \*r files. +Each pathname matching an \*r suffix +is taken to be an \*r file. +All others +are assumed to be working files containing new revisions. +.B ci +deposits the contents of each working file +into the corresponding \*r file. +If only a working file is given, +.B ci +tries to find the corresponding \*r file in an \*r subdirectory +and then in the working file's directory. +For more details, see +.SM "FILE NAMING" +below. +.PP +For +.B ci +to work, the caller's login must be on the access list, +except if the access list is empty or the caller is the superuser or the +owner of the file. +To append a new revision to an existing branch, the tip revision on +that branch must be locked by the caller. Otherwise, only a +new branch can be created. This restriction is not enforced +for the owner of the file if non-strict locking is used +(see +.BR rcs (1)). +A lock held by someone else may be broken with the +.B rcs +command. +.PP +Unless the +.B \-f +option is given, +.B ci +checks whether the revision to be deposited differs from the preceding one. +If not, instead of creating a new revision +.B ci +reverts to the preceding one. +To revert, ordinary +.B ci +removes the working file and any lock; +.B "ci\ \-l" +keeps and +.B "ci\ \-u" +removes any lock, and then they both generate a new working file much as if +.B "co\ \-l" +or +.B "co\ \-u" +had been applied to the preceding revision. +When reverting, any +.B \-n +and +.B \-s +options apply to the preceding revision. +.PP +For each revision deposited, +.B ci +prompts for a log message. +The log message should summarize the change and must be terminated by +end-of-file or by a line containing +.BR \&. "\ by" +itself. +If several files are checked in +.B ci +asks whether to reuse the +previous log message. +If the standard input is not a terminal, +.B ci +suppresses the prompt +and uses the same log message for all files. +See also +.BR \-m . +.PP +If the \*r file does not exist, +.B ci +creates it and +deposits the contents of the working file as the initial revision +(default number: +.BR 1.1 ). +The access list is initialized to empty. +Instead of the log message, +.B ci +requests descriptive text (see +.B \-t +below). +.PP +The number +.I rev +of the deposited revision can be given by any of the options +.BR \-f , +.BR \-I , +.BR \-k , +.BR \-l , +.BR \-M , +.BR \-q , +.BR \-r , +or +.BR \-u . +.I rev +may be symbolic, numeric, or mixed. +If +.I rev +is +.BR $ , +.B ci +determines the revision number from keyword values in the working file. +.PP +If +.I rev +is a revision number, it must be higher than the latest +one on the branch to which +.I rev +belongs, or must start a new branch. +.PP +If +.I rev +is a branch rather than a revision number, +the new revision is appended to that branch. The level number is obtained +by incrementing the tip revision number of that branch. +If +.I rev +indicates a non-existing branch, +that branch is created with the initial revision numbered +.IB rev .1\f1.\fP +.br +.ne 8 +.PP +If +.I rev +is omitted, +.B ci +tries to derive the new revision number from +the caller's last lock. If the caller has locked the tip revision of a branch, +the new revision is appended to that branch. +The new revision number is obtained +by incrementing the tip revision number. +If the caller locked a non-tip revision, a new branch is started at +that revision by incrementing the highest branch number at that revision. +The default initial branch and level numbers are +.BR 1 . +.PP +If +.I rev +is omitted and the caller has no lock, but owns +the file and locking +is not set to +.IR strict , +then the revision is appended to the +default branch (normally the trunk; see the +.B \-b +option of +.BR rcs (1)). +.PP +Exception: On the trunk, revisions can be appended to the end, but +not inserted. +.SH OPTIONS +.TP +.BR \-r [\f2rev\fP] +checks in a revision, releases the corresponding lock, and +removes the working file. This is the default. +.RS +.PP +The +.B \-r +option has an unusual meaning in +.BR ci . +In other \*r commands, +.B \-r +merely specifies a revision number, +but in +.B ci +it also releases a lock and removes the working file. +See +.B \-u +for a tricky example. +.RE +.TP +.BR \-l [\f2rev\fP] +works like +.BR \-r , +except it performs an additional +.B "co\ \-l" +for the +deposited revision. Thus, the deposited revision is immediately +checked out again and locked. +This is useful for saving a revision although one wants to continue +editing it after the checkin. +.TP +.BR \-u [\f2rev\fP] +works like +.BR \-l , +except that the deposited revision is not locked. +This lets one read the working file +immediately after checkin. +.RS +.PP +The +.BR \-l , +.BR \-r , +and +.B \-u +options are mutually exclusive and silently override each other. +For example, +.B "ci\ \-u\ \-r" +is equivalent to +.B "ci\ \-r" +because +.B \-r +overrides +.BR \-u . +.RE +.TP +.BR \-f [\f2rev\fP] +forces a deposit; the new revision is deposited even it is not different +from the preceding one. +.TP +.BR \-k [\f2rev\fP] +searches the working file for keyword values to determine its revision number, +creation date, state, and author (see +.BR co (1)), +and assigns these +values to the deposited revision, rather than computing them locally. +It also generates a default login message noting the login of the caller +and the actual checkin date. +This option is useful for software distribution. A revision that is sent to +several sites should be checked in with the +.B \-k +option at these sites to +preserve the original number, date, author, and state. +The extracted keyword values and the default log message may be overridden +with the options +.BR \-d , +.BR \-m , +.BR \-s , +.BR \-w , +and any option that carries a revision number. +.TP +.BR \-q [\f2rev\fP] +quiet mode; diagnostic output is not printed. +A revision that is not different from the preceding one is not deposited, +unless +.B \-f +is given. +.TP +.BR \-I [\f2rev\fP] +interactive mode; +the user is prompted and questioned +even if the standard input is not a terminal. +.TP +.BR \-d "[\f2date\fP]" +uses +.I date +for the checkin date and time. +The +.I date +is specified in free format as explained in +.BR co (1). +This is useful for lying about the checkin date, and for +.B \-k +if no date is available. +If +.I date +is empty, the working file's time of last modification is used. +.TP +.BR \-M [\f2rev\fP] +Set the modification time on any new working file +to be the date of the retrieved revision. +For example, +.BI "ci\ \-d\ \-M\ \-u" "\ f" +does not alter +.IR f 's +modification time, even if +.IR f 's +contents change due to keyword substitution. +Use this option with care; it can confuse +.BR make (1). +.TP +.BI \-m "msg" +uses the string +.I msg +as the log message for all revisions checked in. +.TP +.BI \-n "name" +assigns the symbolic name +.I name +to the number of the checked-in revision. +.B ci +prints an error message if +.I name +is already assigned to another +number. +.TP +.BI \-N "name" +same as +.BR \-n , +except that it overrides a previous assignment of +.IR name . +.TP +.BI \-s "state" +sets the state of the checked-in revision to the identifier +.IR state . +The default state is +.BR Exp . +.TP +.BI \-t file +writes descriptive text from the contents of the named +.I file +into the \*r file, +deleting the existing text. +The +.I file +may not begin with +.BR \- . +.TP +.BI \-t\- string +Write descriptive text from the +.I string +into the \*r file, deleting the existing text. +.RS +.PP +The +.B \-t +option, in both its forms, has effect only during an initial checkin; +it is silently ignored otherwise. +.PP +During the initial checkin, if +.B \-t +is not given, +.B ci +obtains the text from standard input, +terminated by end-of-file or by a line containing +.BR \&. "\ by" +itself. +The user is prompted for the text if interaction is possible; see +.BR \-I . +.PP +For backward compatibility with older versions of \*r, a bare +.B \-t +option is ignored. +.RE +.TP +.BI \-w "login" +uses +.I login +for the author field of the deposited revision. +Useful for lying about the author, and for +.B \-k +if no author is available. +.TP +.BI \-V n +Emulate \*r version +.IR n . +See +.BR co (1) +for details. +.TP +.BI \-x "suffixes" +specifies the suffixes for \*r files. +A nonempty suffix matches any pathname ending in the suffix. +An empty suffix matches any pathname of the form +.BI RCS/ file +or +.IB path /RCS/ file. +The +.B \-x +option can specify a list of suffixes +separated by +.BR / . +For example, +.B \-x,v/ +specifies two suffixes: +.B ,v +and the empty suffix. +If two or more suffixes are specified, +they are tried in order when looking for an \*r file; +the first one that works is used for that file. +If no \*r file is found but an \*r file can be created, +the suffixes are tried in order +to determine the new \*r file's name. +The default for +.IR suffixes +is installation-dependent; normally it is +.B ,v/ +for hosts like Unix that permit commas in file names, +and is empty (i.e. just the empty suffix) for other hosts. +.SH "FILE NAMING" +Pairs of \*r files and working files may be specified in three ways +(see also the +example section). +.PP +1) Both the \*r file and the working file are given. The \*r pathname is of +the form +.IB path1 / workfileX +and the working pathname is of the form +.IB path2 / workfile +where +.IB path1 / +and +.IB path2 / +are (possibly different or empty) paths, +.I workfile +is a filename, and +.I X +is an \*r suffix. +If +.I X +is empty, +.IB path1 / +must be +.B RCS/ +or must end in +.BR /RCS/ . +.PP +2) Only the \*r file is given. Then the working file is created in the current +directory and its name is derived from the name of the \*r file +by removing +.IB path1 / +and the suffix +.IR X . +.PP +3) Only the working file is given. +Then +.B ci +considers each \*r suffix +.I X +in turn, looking for an \*r file of the form +.IB path2 /RCS/ workfileX +or (if the former is not found and +.I X +is nonempty) +.IB path2 / workfileX. +.PP +If the \*r file is specified without a path in 1) and 2), +.B ci +looks for the \*r file first in the directory +.B ./RCS +and then in the current +directory. +.PP +.B ci +reports an error if an attempt to open an \*r file fails for an unusual reason, +even if the \*r file's pathname is just one of several possibilities. +For example, to suppress use of \*r commands in a directory +.IR d , +create a regular file named +.IB d /RCS +so that casual attempts to use \*r commands in +.I d +fail because +.IB d /RCS +is not a directory. +.SH EXAMPLES +Suppose +.B ,v +is an \*r suffix and the current directory contains a subdirectory +.B RCS +with an \*r file +.BR io.c,v . +Then each of the following commands check in a copy of +.B io.c +into +.B RCS/io.c,v +as the latest revision, removing +.BR io.c . +.LP +.RS +.nf +.ft 3 +ci io.c; ci RCS/io.c,v; ci io.c,v; +ci io.c RCS/io.c,v; ci io.c io.c,v; +ci RCS/io.c,v io.c; ci io.c,v io.c; +.ft +.fi +.RE +.PP +Suppose instead that the empty suffix +is an \*r suffix and the current directory contains a subdirectory +.B RCS +with an \*r file +.BR io.c . +The each of the following commands checks in a new revision. +.LP +.RS +.nf +.ft 3 +ci io.c; ci RCS/io.c; +ci io.c RCS/io.c; +ci RCS/io.c io.c; +.ft +.fi +.RE +.SH "FILE MODES" +An \*r file created by +.B ci +inherits the read and execute permissions +from the working file. If the \*r file exists already, +.B ci +preserves its read and execute permissions. +.B ci +always turns off all write permissions of \*r files. +.SH FILES +Several temporary files may be created in the directory containing +the working file, and also in the temporary directory (see +.B \s-1TMPDIR\s0 +under +.BR \s-1ENVIRONMENT\s0 ). +A semaphore file or files are created in the directory containing the \*r file. +With a nonempty suffix, the semaphore names begin with +the first character of the suffix; therefore, do not specify an suffix +whose first character could be that of a working filename. +With an empty suffix, the semaphore names end with +.B _ +so working filenames should not end in +.BR _ . +.PP +.B ci +never changes an \*r or working file. +Normally, +.B ci +unlinks the file and creates a new one; +but instead of breaking a chain of one or more symbolic links to an \*r file, +it unlinks the destination file instead. +Therefore, +.B ci +breaks any hard or symbolic links to any working file it changes; +and hard links to \*r files are ineffective, +but symbolic links to \*r files are preserved. +.PP +The effective user must be able to +search and write the directory containing the \*r file. +Normally, the real user must be able to +read the \*r and working files +and to search and write the directory containing the working file; +however, some older hosts +cannot easily switch between real and effective users, +so on these hosts the effective user is used for all accesses. +The effective user is the same as the real user +unless your copies of +.B ci +and +.B co +have setuid privileges. +As described in the next section, +these privileges yield extra security if +the effective user owns all \*r files and directories, +and if only the effective user can write \*r directories. +.PP +Users can control access to \*r files by setting the permissions +of the directory containing the files; only users with write access +to the directory can use \*r commands to change its \*r files. +For example, in hosts that allow a user to belong to several groups, +one can make a group's \*r directories writable to that group only. +This approach suffices for informal projects, +but it means that any group member can arbitrarily change the group's \*r files, +and can even remove them entirely. +Hence more formal projects sometimes distinguish between an \*r administrator, +who can change the \*r files at will, and other project members, +who can check in new revisions but cannot otherwise change the \*r files. +.SH "SETUID USE" +To prevent anybody but their \*r administrator from deleting revisions, +a set of users can employ setuid privileges as follows. +.nr n \w'\(bu '+1n-1/1n +.IP \(bu \nn +Check that the host supports \*r setuid use. +Consult a trustworthy expert if there are any doubts. +It is best if the +.B seteuid() +system call works as described in Posix 1003.1a Draft 5, +because \*r can switch back and forth easily +between real and effective users, even if the real user is +.BR root . +If not, the second best is if the +.B setuid() +system call supports saved setuid +(the {\s-1_POSIX_SAVED_IDS\s0} behavior of Posix 1003.1-1990); +this fails only if the real user is +.BR root . +If \*r detects any failure in setuid, it quits immediately. +.IP \(bu \nn +Choose a user +.I A +to serve as \*r administrator for the set of users. +Only +.I A +will be able to invoke the +.B rcs +command on the users' \*r files. +.I A +should not be +.B root +or any other user with special powers. +Mutually suspicious sets of users should use different administrators. +.IP \(bu \nn +Choose a path name +.I B +that will be a directory of files to be executed by the users. +.IP \(bu \nn +Have +.I A +set up +.I B +to contain copies of +.B ci +and +.B co +that are setuid to +.I A +by copying the commands from their standard installation directory +.I D +as follows: +.LP +.RS +.nf +.ne 3 +\f3mkdir\fP \f2B\fP +\f3cp\fP \f2D\fP\^\f3/c[io]\fP \f2B\fP +\f3chmod go\-w,u+s\fP \f2B\fP\f3/c[io]\fP +.fi +.RE +.IP \(bu \nn +Have each user prepend +.I B +to their path as follows: +.LP +.RS +.nf +.ne 2 +\f3PATH=\fP\f2B\fP\f3:$PATH; export PATH\fP # ordinary shell +\f3set path=(\fP\f2B\fP \f3$path)\fP # C shell +.fi +.RE +.IP \(bu \nn +Have +.I A +create each \*r directory +.I R +with write access only to +.I A +as follows: +.LP +.RS +.nf +.ne 2 +\f3mkdir\fP \f2R\fP +\f3chmod go\-w\fP \f2R\fP +.fi +.RE +.IP \(bu \nn +If you want to let only certain users read the \*r files, +put the users into a group +.IR G , +and have +.I A +further protect the \*r directory as follows: +.LP +.RS +.nf +.ne 2 +\f3chgrp\fP \f2G R\fP +\f3chmod g\-w,o\-rwx\fP \f2R\fP +.fi +.RE +.IP \(bu \nn +Have +.I A +copy old \*r files (if any) into +.IR R , +to ensure that +.I A +owns them. +.IP \(bu \nn +An \*r file's access list limits who can check in and lock revisions. +The default access list is empty, +which grants checkin access to anyone who can read the \*r file. +If you want limit checkin access, +have +.I A +invoke +.B "rcs\ \-a" +on the file; see +.BR rcs (1). +In particular, +.BI "rcs\ \-e\ \-a" A +limits access to just +.IR A . +.IP \(bu \nn +Have +.I A +initialize any new \*r files with +.B "rcs\ \-i" +before initial checkin, adding the +.B \-a +option if you want to limit checkin access. +.IP \(bu \nn +Give setuid privileges only to +.BR ci , +.BR co , +and +.BR rcsclean ; +do not give them to +.B rcs +or to any other command. +.IP \(bu \nn +Do not use other setuid commands to invoke \*r commands; +setuid is trickier than you think! +.SH ENVIRONMENT +.TP +.B \s-1RCSINIT\s0 +options prepended to the argument list, separated by spaces. +A backslash escapes spaces within an option. +The +.B \s-1RCSINIT\s0 +options are prepended to the argument lists of most \*r commands. +Useful +.B \s-1RCSINIT\s0 +options include +.BR \-q , +.BR \-V , +and +.BR \-x . +.TP +.B \s-1TMPDIR\s0 +Name of the temporary directory. +If not set, the environment variables +.B \s-1TMP\s0 +and +.B \s-1TEMP\s0 +are inspected instead and the first value found is taken; +if none of them are set, +a host-dependent default is used, typically +.BR /tmp . +.SH DIAGNOSTICS +For each revision, +.B ci +prints the \*r file, the working file, and the number +of both the deposited and the preceding revision. +The exit status is zero if and only if all operations were successful. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH "SEE ALSO" +co(1), ident(1), make(1), rcs(1), rcsclean(1), rcsdiff(1), +rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. +.br diff --git a/usr/src/contrib/rcs-V5.6/man/co.1 b/usr/src/contrib/rcs-V5.6/man/co.1 new file mode 100644 index 0000000000..d9ce65e3d1 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/co.1 @@ -0,0 +1,569 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: co.1,v 5.7 1991/08/19 03:13:55 eggert Exp $ +.ds g \&\s-1UTC\s0 +.ds r \&\s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH CO 1 \*(Dt GNU +.SH NAME +co \- check out RCS revisions +.SH SYNOPSIS +.B co +.RI [ options ] " file " .\|.\|. +.SH DESCRIPTION +.B co +retrieves a revision from each \*r file and stores it into +the corresponding working file. +.PP +Pathnames matching an \*r suffix denote \*r files; +all others denote working files. +Names are paired as explained in +.BR ci (1). +.PP +Revisions of an \*r file may be checked out locked or unlocked. Locking a +revision prevents overlapping updates. A revision checked out for reading or +processing (e.g., compiling) need not be locked. A revision checked out +for editing and later checkin must normally be locked. Checkout with locking +fails if the revision to be checked out is currently locked by another user. +(A lock may be broken with +.BR rcs "(1).)\ \&" +Checkout with locking also requires the caller to be on the access list of +the \*r file, unless he is the owner of the +file or the superuser, or the access list is empty. +Checkout without locking is not subject to accesslist restrictions, and is +not affected by the presence of locks. +.PP +A revision is selected by options for revision or branch number, +checkin date/time, author, or state. +When the selection options +are applied in combination, +.B co +retrieves the latest revision +that satisfies all of them. +If none of the selection options +is specified, +.B co +retrieves the latest revision +on the default branch (normally the trunk, see the +.B \-b +option of +.BR rcs (1)). +A revision or branch number may be attached +to any of the options +.BR \-f , +.BR \-I , +.BR \-l , +.BR \-M , +.BR \-p , +.BR \-q , +.BR \-r , +or +.BR \-u . +The options +.B \-d +(date), +.B \-s +(state), and +.B \-w +(author) +retrieve from a single branch, the +.I selected +branch, +which is either specified by one of +.BR \-f, +\&.\|.\|., +.BR \-u , +or the default branch. +.PP +A +.B co +command applied to an \*r +file with no revisions creates a zero-length working file. +.B co +always performs keyword substitution (see below). +.SH OPTIONS +.TP +.BR \-r [\f2rev\fP] +retrieves the latest revision whose number is less than or equal to +.I rev. +If +.I rev +indicates a branch rather than a revision, +the latest revision on that branch is retrieved. +If +.I rev +is omitted, the latest revision on the default branch +(see the +.B \-b +option of +.BR rcs (1)) +is retrieved. +If +.I rev +is +.BR $ , +.B co +determines the revision number from keyword values in the working file. +Otherwise, a revision is composed of one or more numeric or symbolic fields +separated by periods. The numeric equivalent of a symbolic field +is specified with the +.B \-n +option of the commands +.BR ci (1) +and +.BR rcs (1). +.TP +.BR \-l [\f2rev\fP] +same as +.BR \-r , +except that it also locks the retrieved revision for +the caller. +.TP +.BR \-u [\f2rev\fP] +same as +.BR \-r , +except that it unlocks the retrieved revision if it was +locked by the caller. If +.I rev +is omitted, +.B \-u +retrieves the revision locked by the caller, if there is one; otherwise, +it retrieves the latest revision on the default branch. +.TP +.BR \-f [\f2rev\fP] +forces the overwriting of the working file; +useful in connection with +.BR \-q . +See also +.SM "FILE MODES" +below. +.TP +.B \-kkv +Generate keyword strings using the default form, e.g.\& +.B "$\&Revision: \*(Rv $" +for the +.B Revision +keyword. +A locker's name is inserted in the value of the +.BR Header , +.BR Id , +and +.B Locker +keyword strings +only as a file is being locked, +i.e. by +.B "ci\ \-l" +and +.BR "co\ \-l". +This is the default. +.TP +.B \-kkvl +Like +.BR \-kkv , +except that a locker's name is always inserted +if the given revision is currently locked. +.TP +.BR \-kk +Generate only keyword names in keyword strings; omit their values. +See +.SM "KEYWORD SUBSTITUTION" +below. +For example, for the +.B Revision +keyword, generate the string +.B $\&Revision$ +instead of +.BR "$\&Revision: \*(Rv $". +This option is useful to ignore differences due to keyword substitution +when comparing different revisions of a file. +.TP +.BR \-ko +Generate the old keyword string, +present in the working file just before it was checked in. +For example, for the +.B Revision +keyword, generate the string +.B "$\&Revision: 1.1 $" +instead of +.B "$\&Revision: \*(Rv $" +if that is how the string appeared when the file was checked in. +This can be useful for binary file formats +that cannot tolerate any changes to substrings +that happen to take the form of keyword strings. +.TP +.BR \-kv +Generate only keyword values for keyword strings. +For example, for the +.B Revision +keyword, generate the string +.B \*(Rv +instead of +.BR "$\&Revision: \*(Rv $". +This can help generate files in programming languages where it is hard to +strip keyword delimiters like +.B "$\&Revision:\ $" +from a string. +However, further keyword substitution cannot be performed once the +keyword names are removed, so this option should be used with care. +Because of this danger of losing keywords, +this option cannot be combined with +.BR \-l , +and the owner write permission of the working file is turned off; +to edit the file later, check it out again without +.BR \-kv . +.TP +.BR \-p [\f2rev\fP] +prints the retrieved revision on the standard output rather than storing it +in the working file. +This option is useful when +.B co +is part of a pipe. +.TP +.BR \-q [\f2rev\fP] +quiet mode; diagnostics are not printed. +.TP +.BR \-I [\f2rev\fP] +interactive mode; +the user is prompted and questioned +even if the standard input is not a terminal. +.TP +.BI \-d date +retrieves the latest revision on the selected branch whose checkin date/time is +less than or equal to +.I date. +The date and time may be given in free format. +The time zone +.B LT +stands for local time; +other common time zone names are understood. +For example, the following +.IR date s +are equivalent +if local time is January 11, 1990, 8pm Pacific Standard Time, +eight hours west of Coordinated Universal Time (\*g): +.RS +.LP +.RS +.nf +.ta \w'\f3Thu, 11 Jan 1990 20:00:00 \-0800\fP 'u +.ne 9 +\f38:00 pm lt\fP +\f34:00 AM, Jan. 12, 1990\fP note: default is \*g +\f31990/01/12 04:00:00\fP \*r date format +\f3Thu Jan 11 20:00:00 1990 LT\fP output of \f3ctime\fP(3) + \f3LT\fP +\f3Thu Jan 11 20:00:00 PST 1990\fP output of \f3date\fP(1) +\f3Fri Jan 12 04:00:00 GMT 1990\fP +\f3Thu, 11 Jan 1990 20:00:00 \-0800\fP +\f3Fri-JST, 1990, 1pm Jan 12\fP +\f312-January-1990, 04:00-WET\fP +.ta 4n +4n +4n +4n +.fi +.RE +.LP +Most fields in the date and time may be defaulted. +The default time zone is \*g. +The other defaults are determined in the order year, month, day, +hour, minute, and second (most to least significant). At least one of these +fields must be provided. For omitted fields that are of higher significance +than the highest provided field, the time zone's current values are assumed. +For all other omitted fields, +the lowest possible values are assumed. +For example, the date +.B "20, 10:30" +defaults to +10:30:00 \*g of the 20th of the \*g time zone's current month and year. +The date/time must be quoted if it contains spaces. +.RE +.TP +.BR \-M [\f2rev\fP] +Set the modification time on the new working file +to be the date of the retrieved revision. +Use this option with care; it can confuse +.BR make (1). +.TP +.BI \-s state +retrieves the latest revision on the selected branch whose state is set to +.I state. +.TP +.BR \-w [\f2login\fP] +retrieves the latest revision on the selected branch which was checked in +by the user with login name +.I login. +If the argument +.I login +is +omitted, the caller's login is assumed. +.TP +.BI \-j joinlist +generates a new revision which is the join of the revisions on +.I joinlist. +This option is largely obsoleted by +.BR rcsmerge (1) +but is retained for backwards compatibility. +.RS +.PP +The +.I joinlist +is a comma-separated list of pairs of the form +.IB rev2 : rev3, +where +.I rev2 +and +.I rev3 +are (symbolic or numeric) +revision numbers. +For the initial such pair, +.I rev1 +denotes the revision selected +by the above options +.BR \-f, +\&.\|.\|., +.BR \-w . +For all other pairs, +.I rev1 +denotes the revision generated by the previous pair. +(Thus, the output +of one join becomes the input to the next.) +.PP +For each pair, +.B co +joins revisions +.I rev1 +and +.I rev3 +with respect to +.I rev2. +This means that all changes that transform +.I rev2 +into +.I rev1 +are applied to a copy of +.I rev3. +This is particularly useful if +.I rev1 +and +.I rev3 +are the ends of two branches that have +.I rev2 +as a common ancestor. If +.IR rev1 < rev2 < rev3 +on the same branch, +joining generates a new revision which is like +.I rev3, +but with all changes that lead from +.I rev1 +to +.I rev2 +undone. +If changes from +.I rev2 +to +.I rev1 +overlap with changes from +.I rev2 +to +.I rev3, +.B co +reports overlaps as described in +.BR merge (1). +.PP +For the initial pair, +.I rev2 +may be omitted. The default is the common +ancestor. +If any of the arguments indicate branches, the latest revisions +on those branches are assumed. +The options +.B \-l +and +.B \-u +lock or unlock +.I rev1. +.RE +.TP +.BI \-V n +Emulate \*r version +.I n, +where +.I n +may be +.BR 3 , +.BR 4 , +or +.BR 5 . +This may be useful when interchanging \*r files with others who are +running older versions of \*r. +To see which version of \*r your correspondents are running, have them invoke +.B rlog +on an \*r file; +if none of the first few lines of output contain the string +.B branch: +it is version 3; +if the dates' years have just two digits, it is version 4; +otherwise, it is version 5. +An \*r file generated while emulating version 3 will lose its default branch. +An \*r revision generated while emulating version 4 or earlier will have +a timestamp that is off by up to 13 hours. +A revision extracted while emulating version 4 or earlier will contain +dates of the form +.IB yy / mm / dd +instead of +.IB yyyy / mm / dd +and may also contain different white space in the substitution for +.BR $\&Log$ . +.TP +.BI \-x "suffixes" +Use +.I suffixes +to characterize \*r files. +See +.BR ci (1) +for details. +.SH "KEYWORD SUBSTITUTION" +Strings of the form +.BI $ keyword $ +and +.BI $ keyword : .\|.\|. $ +embedded in +the text are replaced +with strings of the form +.BI $ keyword : value $ +where +.I keyword +and +.I value +are pairs listed below. +Keywords may be embedded in literal strings +or comments to identify a revision. +.PP +Initially, the user enters strings of the form +.BI $ keyword $ . +On checkout, +.B co +replaces these strings with strings of the form +.BI $ keyword : value $ . +If a revision containing strings of the latter form +is checked back in, the value fields will be replaced during the next +checkout. +Thus, the keyword values are automatically updated on checkout. +This automatic substitution can be modified by the +.B \-k +options. +.PP +Keywords and their corresponding values: +.TP +.B $\&Author$ +The login name of the user who checked in the revision. +.TP +.B $\&Date$ +The date and time (\*g) the revision was checked in. +.TP +.B $\&Header$ +A standard header containing the full pathname of the \*r file, the +revision number, the date (\*g), the author, the state, +and the locker (if locked). +.TP +.B $\&Id$ +Same as +.BR $\&Header$ , +except that the \*r filename is without a path. +.TP +.B $\&Locker$ +The login name of the user who locked the revision (empty if not locked). +.TP +.B $\&Log$ +The log message supplied during checkin, preceded by a header +containing the \*r filename, the revision number, the author, and the date +(\*g). +Existing log messages are +.I not +replaced. +Instead, the new log message is inserted after +.BR $\&Log: .\|.\|. $ . +This is useful for +accumulating a complete change log in a source file. +.TP +.B $\&RCSfile$ +The name of the \*r file without a path. +.TP +.B $\&Revision$ +The revision number assigned to the revision. +.TP +.B $\&Source$ +The full pathname of the \*r file. +.TP +.B $\&State$ +The state assigned to the revision with the +.B \-s +option of +.BR rcs (1) +or +.BR ci (1). +.SH "FILE MODES" +The working file inherits the read and execute permissions from the \*r +file. In addition, the owner write permission is turned on, unless +.B \-kv +is set or the file +is checked out unlocked and locking is set to strict (see +.BR rcs (1)). +.PP +If a file with the name of the working file exists already and has write +permission, +.B co +aborts the checkout, +asking beforehand if possible. +If the existing working file is +not writable or +.B \-f +is given, the working file is deleted without asking. +.SH FILES +.B co +accesses files much as +.BR ci (1) +does, except that it does not need to read the working file. +.SH ENVIRONMENT +.TP +.B \s-1RCSINIT\s0 +options prepended to the argument list, separated by spaces. +See +.BR ci (1) +for details. +.SH DIAGNOSTICS +The \*r pathname, the working pathname, +and the revision number retrieved are +written to the diagnostic output. +The exit status is zero if and only if all operations were successful. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH "SEE ALSO" +ci(1), ctime(3), date(1), ident(1), make(1), +rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), +rcsfile(5) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. +.SH LIMITS +Links to the \*r and working files are not preserved. +.PP +There is no way to selectively suppress the expansion of keywords, except +by writing them differently. In nroff and troff, this is done by embedding the +null-character +.B \e& +into the keyword. +.SH BUGS +The +.B \-d +option sometimes gets confused, and accepts no date before 1970. +.br diff --git a/usr/src/contrib/rcs-V5.6/man/ident.1 b/usr/src/contrib/rcs-V5.6/man/ident.1 new file mode 100644 index 0000000000..37c8eda202 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/ident.1 @@ -0,0 +1,76 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.ds iD \\$3 \\$4 \\$5 \\$6 \\$7 +.. +.Id $Id: ident.1,v 5.0 1990/08/22 09:09:36 eggert Exp $ +.ds r \s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH IDENT 1 \*(Dt GNU +.SH NAME +ident \- identify files +.SH SYNOPSIS +.B ident +[ +.B \-q +] [ +.I file +\&.\|.\|. ] +.SH DESCRIPTION +.B ident +searches for all occurrences of the pattern +.BI $ keyword : .\|.\|. $ +in the named files or, if no file name appears, the standard input. +.PP +These patterns are normally inserted automatically by the \*r command +.BR co (1), +but can also be inserted manually. +The option +.B \-q +suppresses +the warning given if there are no patterns in a file. +.PP +.B ident +works on text files as well as object files and dumps. +For example, if the C program in +.B f.c +contains +.IP +\f3char rcsid[] = \&"$\&Id: f.c,v \*(iD $\&";\fP +.LP +and +.B f.c +is compiled into +.BR f.o , +then the command +.IP +.B "ident f.c f.o" +.LP +will output +.nf +.IP +.ft 3 +f.c: + $\&Id: f.c,v \*(iD $ +f.o: + $\&Id: f.c,v \*(iD $ +.ft +.fi +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990 by Paul Eggert. +.SH "SEE ALSO" +ci(1), co(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), +rcsfile(5) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. diff --git a/usr/src/contrib/rcs-V5.6/man/merge.1 b/usr/src/contrib/rcs-V5.6/man/merge.1 new file mode 100644 index 0000000000..8b1957fca0 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/merge.1 @@ -0,0 +1,102 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: merge.1,v 5.3 1991/02/28 19:18:45 eggert Exp $ +.TH MERGE 1 \*(Dt GNU +.SH NAME +merge \- three-way file merge +.SH SYNOPSIS +.B merge +[ +.B \-L +.I label1 +[ +.B \-L +.I label3 +] ] [ +.B \-p +] [ +.B \-q +] +.I "file1 file2 file3" +.SH DESCRIPTION +.B merge +incorporates all changes that lead from +.I file2 +to +.I file3 +into +.IR file1 . +The result goes to standard output if +.B \-p +is present, into +.I file1 +otherwise. +.B merge +is useful for combining separate changes to an original. Suppose +.I file2 +is the original, and both +.I file1 +and +.I file3 +are modifications of +.IR file2 . +Then +.B merge +combines both changes. +.PP +An overlap occurs if both +.I file1 +and +.I file3 +have changes in a common segment of lines. +On a few older hosts where +.B diff3 +does not support the +.B \-E +option, +.B merge +does not detect overlaps, and merely supplies the changed lines from +.I file3. +On most hosts, if overlaps occur, +.B merge +outputs a message (unless the +.B \-q +option is given), +and includes both alternatives +in the result. The alternatives are delimited as follows: +.LP +.RS +.nf +.BI <<<<<<< " file1" +.I "lines in file1" +.B "=======" +.I "lines in file3" +.BI >>>>>>> " file3" +.RE +.fi +.LP +If there are overlaps, the user should edit the result and delete one of the +alternatives. +If the +.BI \-L "\ label1" +and +.BI \-L "\ label3" +options are given, the labels are output in place of the names +.I file1 +and +.I file3 +in overlap reports. +.SH DIAGNOSTICS +Exit status is 0 for no overlaps, 1 for some overlaps, 2 for trouble. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH SEE ALSO +diff3(1), diff(1), rcsmerge(1), co(1). diff --git a/usr/src/contrib/rcs-V5.6/man/rcs.1 b/usr/src/contrib/rcs-V5.6/man/rcs.1 new file mode 100644 index 0000000000..9866a9c005 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/rcs.1 @@ -0,0 +1,397 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: rcs.1,v 5.6 1991/09/26 23:16:17 eggert Exp $ +.ds r \&\s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH RCS 1 \*(Dt GNU +.SH NAME +rcs \- change RCS file attributes +.SH SYNOPSIS +.B rcs +.RI [ " options " ] " file " .\|.\|. +.SH DESCRIPTION +.B rcs +creates new \*r files or changes attributes of existing ones. +An \*r file contains multiple revisions of text, +an access list, a change log, +descriptive text, +and some control attributes. +For +.B rcs +to work, the caller's login name must be on the access list, +except if the access list is empty, the caller is the owner of the file +or the superuser, or +the +.B \-i +option is present. +.PP +Pathnames matching an \*r suffix denote \*r files; +all others denote working files. +Names are paired as explained in +.BR ci (1). +Revision numbers use the syntax described in +.BR ci (1). +.SH OPTIONS +.TP +.B \-i +Create and initialize a new \*r file, but do not deposit any revision. +If the \*r file has no path prefix, try to place it +first into the subdirectory +.BR ./RCS , +and then into the current directory. +If the \*r file +already exists, print an error message. +.TP +.BI \-a "logins" +Append the login names appearing in the comma-separated list +.I logins +to the access list of the \*r file. +.TP +.BI \-A "oldfile" +Append the access list of +.I oldfile +to the access list of the \*r file. +.TP +.BR \-e [\f2logins\fP] +Erase the login names appearing in the comma-separated list +.I logins +from the access list of the \*r file. +If +.I logins +is omitted, erase the entire access list. +.TP +.BR \-b [\f2rev\fP] +Set the default branch to +.IR rev . +If +.I rev +is omitted, the default +branch is reset to the (dynamically) highest branch on the trunk. +.TP +.BI \-c string +sets the comment leader to +.IR string . +The comment leader +is printed before every log message line generated by the keyword +.B $\&Log$ +during checkout (see +.BR co (1)). +This is useful for programming +languages without multi-line comments. +An initial +.B ci , +or an +.B "rcs\ \-i" +without +.BR \-c , +guesses the comment leader from the suffix of the working file. +.TP +.BI \-k subst +Set the default keyword substitution to +.IR subst . +The effect of keyword substitution is described in +.BR co (1). +Giving an explicit +.B \-k +option to +.BR co , +.BR rcsdiff , +and +.B rcsmerge +overrides this default. +Beware +.BR "rcs\ \-kv", +because +.B \-kv +is incompatible with +.BR "co\ \-l". +Use +.B "rcs\ \-kkv" +to restore the normal default keyword substitution. +.TP +.BR \-l [\f2rev\fP] +Lock the revision with number +.IR rev . +If a branch is given, lock the latest revision on that branch. +If +.I rev +is omitted, lock the latest revision on the default branch. +Locking prevents overlapping changes. +A lock is removed with +.B ci +or +.B "rcs\ \-u" +(see below). +.TP +.BR \-u [\f2rev\fP] +Unlock the revision with number +.IR rev . +If a branch is given, unlock the latest revision on that branch. +If +.I rev +is omitted, remove the latest lock held by the caller. +Normally, only the locker of a revision may unlock it. +Somebody else unlocking a revision breaks the lock. +This causes a mail message to be sent to the original locker. +The message contains a commentary solicited from the breaker. +The commentary is terminated by end-of-file or by a line containing +.BR \&. "\ by" +itself. +.TP +.B \-L +Set locking to +.IR strict . +Strict locking means that the owner +of an \*r file is not exempt from locking for checkin. +This option should be used for files that are shared. +.TP +.B \-U +Set locking to non-strict. Non-strict locking means that the owner of +a file need not lock a revision for checkin. +This option should +.I not +be used for files that are shared. +Whether default locking is strict is determined by your system administrator, +but it is normally strict. +.TP +\f3\-m\fP\f2rev\fP\f3:\fP\f2msg\fP +Replace revision +.IR rev 's +log message with +.IR msg . +.TP +\f3\-n\fP\f2name\fP[\f3:\fP[\f2rev\fP]] +Associate the symbolic name +.I name +with the branch or +revision +.IR rev . +Delete the symbolic name if both +.B : +and +.I rev +are omitted; otherwise, print an error message if +.I name +is already associated with +another number. +If +.I rev +is symbolic, it is expanded before association. +A +.I rev +consisting of a branch number followed by a +.B .\& +stands for the current latest revision in the branch. +A +.B : +with an empty +.I rev +stands for the current latest revision on the default branch, +normally the trunk. +For example, +.BI "rcs\ \-n" name ":\ RCS/*" +associates +.I name +with the current latest revision of all the named \*r files; +this contrasts with +.BI "rcs\ \-n" name ":$\ RCS/*" +which associates +.I name +with the revision numbers extracted from keyword strings +in the corresponding working files. +.TP +\f3\-N\fP\f2name\fP[\f3:\fP[\f2rev\fP]] +Act like +.BR \-n , +except override any previous assignment of +.IR name . +.TP +.BI \-o range +deletes (\*(lqoutdates\*(rq) the revisions given by +.IR range . +A range consisting of a single revision number means that revision. +A range consisting of a branch number means the latest revision on that +branch. +A range of the form +.IB rev1 : rev2 +means +revisions +.I rev1 +to +.I rev2 +on the same branch, +.BI : rev +means from the beginning of the branch containing +.I rev +up to and including +.IR rev , +and +.IB rev : +means +from revision +.I rev +to the end of the branch containing +.IR rev . +None of the outdated revisions may have branches or locks. +.TP +.B \-q +Run quietly; do not print diagnostics. +.TP +.B \-I +Run interactively, even if the standard input is not a terminal. +.TP +.B \-s\f2state\fP\f1[\fP:\f2rev\fP\f1]\fP +Set the state attribute of the revision +.I rev +to +.I state . +If +.I rev +is a branch number, assume the latest revision on that branch. +If +.I rev +is omitted, assume the latest revision on the default branch. +Any identifier is acceptable for +.IR state . +A useful set of states +is +.B Exp +(for experimental), +.B Stab +(for stable), and +.B Rel +(for +released). +By default, +.BR ci (1) +sets the state of a revision to +.BR Exp . +.TP +.BR \-t [\f2file\fP] +Write descriptive text from the contents of the named +.I file +into the \*r file, deleting the existing text. +The +.IR file +pathname may not begin with +.BR \- . +If +.I file +is omitted, obtain the text from standard input, +terminated by end-of-file or by a line containing +.BR \&. "\ by" +itself. +Prompt for the text if interaction is possible; see +.BR \-I . +With +.BR \-i , +descriptive text is obtained +even if +.B \-t +is not given. +.TP +.BI \-t\- string +Write descriptive text from the +.I string +into the \*r file, deleting the existing text. +.TP +.BI \-V n +Emulate \*r version +.IR n . +See +.BR co (1) +for details. +.TP +.BI \-x "suffixes" +Use +.I suffixes +to characterize \*r files. +See +.BR ci (1) +for details. +.SH COMPATIBILITY +The +.BI \-b rev +option generates an \*r file that cannot be parsed by \*r version 3 or earlier. +.PP +The +.BI \-k subst +options (except +.BR \-kkv ) +generate an \*r file that cannot be parsed by \*r version 4 or earlier. +.PP +Use +.BI "rcs \-V" n +to make an \*r file acceptable to \*r version +.I n +by discarding information that would confuse version +.IR n . +.PP +\*r version 5.5 and earlier does not support the +.B \-x +option, and requires a +.B ,v +suffix on an \*r pathname. +.SH FILES +.B rcs +accesses files much as +.BR ci (1) +does, +except that it uses the effective user for all accesses, +it does not write the working file or its directory, +and it does not even read the working file unless a revision number of +.B $ +is specified. +.SH ENVIRONMENT +.TP +.B \s-1RCSINIT\s0 +options prepended to the argument list, separated by spaces. +See +.BR ci (1) +for details. +.SH DIAGNOSTICS +The \*r pathname and the revisions outdated are written to +the diagnostic output. +The exit status is zero if and only if all operations were successful. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH "SEE ALSO" +co(1), ci(1), ident(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), +rcsfile(5) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. +.SH BUGS +The separator for revision ranges in the +.B \-o +option used to be +.B \- +instead of +.BR : , +but this leads to confusion when symbolic names contain +.BR \- . +For backwards compatibility +.B "rcs \-o" +still supports the old +.B \- +separator, but it warns about this obsolete use. +.PP +Symbolic names need not refer to existing revisions or branches. +For example, the +.B \-o +option does not remove symbolic names for the outdated revisions; you must use +.B \-n +to remove the names. +.br diff --git a/usr/src/contrib/rcs-V5.6/man/rcsclean.1 b/usr/src/contrib/rcs-V5.6/man/rcsclean.1 new file mode 100644 index 0000000000..07ed7228b6 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/rcsclean.1 @@ -0,0 +1,177 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: rcsclean.1,v 1.8 1991/11/03 01:09:19 eggert Exp $ +.ds r \&\s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH RCSCLEAN 1 \*(Dt GNU +.SH NAME +rcsclean \- clean up working files +.SH SYNOPSIS +.B rcsclean +.RI [ options "] [ " file " .\|.\|. ]" +.SH DESCRIPTION +.B rcsclean +removes working files that were checked out and never modified. +For each +.I file +given, +.B rcsclean +compares the working file and a revision in the corresponding +\*r file. If it finds a difference, it does nothing. +Otherwise, it first unlocks the revision if the +.B \-u +option is given, +and then removes the working file +unless the working file is writable and the revision is locked. +It logs its actions by outputting the corresponding +.B "rcs \-u" +and +.B "rm \-f" +commands on the standard output. +.PP +If no +.I file +is given, all working files in the current directory are cleaned. +Pathnames matching an \*r suffix denote \*r files; +all others denote working files. +Names are paired as explained in +.BR ci (1). +.PP +The number of the revision to which the working file is compared +may be attached to any of the options +.BR \-n , +.BR \-q , +.BR \-r , +or +.BR \-u . +If no revision number is specified, then if the +.B \-u +option is given and the caller has one revision locked, +.B rcsclean +uses that revision; otherwise +.B rcsclean +uses the latest revision on the default branch, normally the root. +.PP +.B rcsclean +is useful for +.B clean +targets in Makefiles. +See also +.BR rcsdiff (1), +which prints out the differences, +and +.BR ci (1), +which +normally asks whether to check in a file +if it was not changed. +.SH OPTIONS +.TP +.BI \-k subst +Use +.I subst +style keyword substitution when retrieving the revision for comparison. +See +.BR co (1) +for details. +.TP +.BR \-n [\f2rev\fP] +Do not actually remove any files or unlock any revisions. +Using this option will tell you what +.B rcsclean +would do without actually doing it. +.TP +.BR \-q [\f2rev\fP] +Do not log the actions taken on standard output. +.TP +.BR \-r [\f2rev\fP] +This option has no effect other than specifying the revision for comparison. +.TP +.BR \-u [\f2rev\fP] +Unlock the revision if it is locked and no difference is found. +.TP +.BI \-V n +Emulate \*r version +.IR n . +See +.BR co (1) +for details. +.TP +.BI \-x "suffixes" +Use +.I suffixes +to characterize \*r files. +See +.BR ci (1) +for details. +.SH EXAMPLES +.LP +.RS +.ft 3 +rcsclean *.c *.h +.ft +.RE +.LP +removes all working files ending in +.B .c +or +.B .h +that were not changed +since their checkout. +.LP +.RS +.ft 3 +rcsclean +.ft +.RE +.LP +removes all working files in the current directory +that were not changed since their checkout. +.SH FILES +.B rcsclean +accesses files much as +.BR ci (1) +does. +.SH ENVIRONMENT +.TP +.B \s-1RCSINIT\s0 +options prepended to the argument list, separated by spaces. +A backslash escapes spaces within an option. +The +.B \s-1RCSINIT\s0 +options are prepended to the argument lists of most \*r commands. +Useful +.B \s-1RCSINIT\s0 +options include +.BR \-q , +.BR \-V , +and +.BR \-x . +.SH DIAGNOSTICS +The exit status is zero if and only if all operations were successful. +Missing working files and \*r files are silently ignored. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH "SEE ALSO" +ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), +rcsfile(5) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. +.SH BUGS +At least one +.I file +must be given in older Unix versions that +do not provide the needed directory scanning operations. +.br diff --git a/usr/src/contrib/rcs-V5.6/man/rcsdiff.1 b/usr/src/contrib/rcs-V5.6/man/rcsdiff.1 new file mode 100644 index 0000000000..b78bbdd17c --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/rcsdiff.1 @@ -0,0 +1,152 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: rcsdiff.1,v 5.3 1991/04/21 12:00:46 eggert Exp $ +.ds r \&\s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH RCSDIFF 1 \*(Dt GNU +.SH NAME +rcsdiff \- compare RCS revisions +.SH SYNOPSIS +.B rcsdiff +[ +.BI \-k subst +] [ +.B \-q +] [ +.BI \-r rev1 +[ +.BI \-r rev2 +] ] [ +.BI \-V n +] [ +.BI \-x suffixes +] [ +.I "diff options" +] +.I "file .\|.\|." +.SH DESCRIPTION +.B rcsdiff +runs +.BR diff (1) +to compare two revisions of each \*r file given. +.PP +Pathnames matching an \*r suffix denote \*r files; +all others denote working files. +Names are paired as explained in +.BR ci (1). +.PP +The option +.B \-q +suppresses diagnostic output. +Zero, one, or two revisions may be specified with +.BR \-r . +The option +.BI \-k subst +affects keyword substitution when extracting +revisions, as described in +.BR co (1); +for example, +.B "\-kk\ \-r1.1\ \-r1.2" +ignores differences in keyword values when comparing revisions +.B 1.1 +and +.BR 1.2 . +To avoid excess output from locker name substitution, +.B \-kkvl +is assumed if (1) at most one revision option is given, +(2) no +.B \-k +option is given, (3) +.B \-kkv +is the default keyword substitution, and +(4) the working file's mode would be produced by +.BR "co\ \-l". +See +.BR co (1) +for details +about +.B \-V +and +.BR \-x . +Otherwise, all options of +.BR diff (1) +that apply to regular files are accepted, with the same meaning as for +.BR diff . +.PP +If both +.I rev1 +and +.I rev2 +are omitted, +.B rcsdiff +compares the latest revision on the +default branch (by default the trunk) +with the contents of the corresponding working file. This is useful +for determining what you changed since the last checkin. +.PP +If +.I rev1 +is given, but +.I rev2 +is omitted, +.B rcsdiff +compares revision +.I rev1 +of the \*r file with +the contents of the corresponding working file. +.PP +If both +.I rev1 +and +.I rev2 +are given, +.B rcsdiff +compares revisions +.I rev1 +and +.I rev2 +of the \*r file. +.PP +Both +.I rev1 +and +.I rev2 +may be given numerically or symbolically. +.SH EXAMPLE +The command +.LP +.B " rcsdiff f.c" +.LP +compares the latest revision on the default branch of the \*r file +to the contents of the working file +.BR f.c . +.SH ENVIRONMENT +.TP +.B \s-1RCSINIT\s0 +options prepended to the argument list, separated by spaces. +See +.BR ci (1) +for details. +.SH DIAGNOSTICS +Exit status is 0 for no differences during any comparison, +1 for some differences, 2 for trouble. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH "SEE ALSO" +ci(1), co(1), diff(1), ident(1), rcs(1), rcsintro(1), rcsmerge(1), rlog(1) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. +.br diff --git a/usr/src/contrib/rcs-V5.6/man/rcsfile.5 b/usr/src/contrib/rcs-V5.6/man/rcsfile.5 new file mode 100644 index 0000000000..f3f79bdd87 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/rcsfile.5 @@ -0,0 +1,224 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: rcsfile.5,v 5.1 1991/08/19 03:13:55 eggert Exp $ +.ds r \s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH RCSFILE 5 \*(Dt GNU +.SH NAME +rcsfile \- format of RCS file +.SH DESCRIPTION +An \*r file's +contents are described by the grammar +below. +.PP +The text is free format: space, backspace, tab, newline, vertical +tab, form feed, and carriage return (collectively, +.IR "white space") +have no significance except in strings. +However, an \*r file must end in a newline character. +.PP +Strings are enclosed by +.BR @ . +If a string contains a +.BR @ , +it must be doubled; +otherwise, strings may contain arbitrary binary data. +.PP +The meta syntax uses the following conventions: `|' (bar) separates +alternatives; `{' and `}' enclose optional phrases; `{' and `}*' enclose +phrases that may be repeated zero or more times; +`{' and '}+' enclose phrases that must appear at least once and may be +repeated; +Terminal symbols are in +.BR boldface ; +nonterminal symbols are in +.IR italics . +.LP +.nr x \w'\f3branches\fP' +.nr y \w'{ \f3comment\fP' +.if \nx<\ny .nr x \ny +.nr y \w'\f3{ branch\fP' +.if \nx<\ny .nr x \ny +.ta \w'\f2deltatext\fP 'u +\w'::= 'u +\nxu+\w' 'u +.fc ~ +.nf +\f2rcstext\fP ::= \f2admin\fP {\f2delta\fP}* \f2desc\fP {\f2deltatext\fP}* +.LP +\f2admin\fP ::= \f3head\fP {\f2num\fP}\f3;\fP + { \f3branch\fP {\f2num\fP}\f3;\fP } + \f3access\fP {\f2id\fP}*\f3;\fP + \f3symbols\fP {\f2id\fP \f3:\fP \f2num\fP}*\f3;\fP + \f3locks\fP {\f2id\fP \f3:\fP \f2num\fP}*\f3;\fP {\f3strict ;\fP} + { \f3comment\fP {\f2string\fP}\f3;\fP } + { \f3expand\fP {\f2string\fP}\f3;\fP } + { \f2newphrase\fP }* +.LP +\f2delta\fP ::= \f2num\fP + \f3date\fP \f2num\fP\f3;\fP + \f3author\fP \f2id\fP\f3;\fP + \f3state\fP {\f2id\fP}\f3;\fP + \f3branches\fP {\f2num\fP}*\f3;\fP + \f3next\fP {\f2num\fP}\f3;\fP + { \f2newphrase\fP }* +.LP +\f2desc\fP ::= \f3desc\fP \f2string\fP +.LP +\f2deltatext\fP ::= \f2num\fP + \f3log\fP \f2string\fP + { \f2newphrase\fP }* + \f3text\fP \f2string\fP +.LP +\f2num\fP ::= {\f2digit\fP{\f3.\fP}}+ +.LP +\f2digit\fP ::= \f30\fP | \f31\fP | .\|.\|. | \f39\fP +.LP +\f2id\fP ::= \f2letter\fP{\f2idchar\fP}* +.LP +\f2letter\fP ::= any letter +.LP +\f2idchar\fP ::= any visible graphic character except \f2special\fP +.LP +\f2special\fP ::= \f3$\fP | \f3,\fP | \f3.\fP | \f3:\fP | \f3;\fP | \f3@\fP +.LP +\f2string\fP ::= \f3@\fP{any character, with \f3@\fP doubled}*\f3@\fP +.LP +\f2newphrase\fP ::= \f2id\fP \f2word\fP* \f3;\fP +.LP +\f2word\fP ::= \f2id\fP | \f2num\fP | \f2string\fP | \f3:\fP +.fi +.PP +Identifiers are case sensitive. Keywords are in lower case only. +The sets of keywords and identifiers may overlap. +In most environments RCS uses the ISO 8859/1 encoding: +letters are octal codes 101\-132, 141\-172, 300\-326, 330\-366 and 370-377, +visible graphic characters are codes 041\-176 and 240\-377, +and white space characters are codes 010\-015 and 040. +.PP +The +.I newphrase +productions in the grammar are reserved for future extensions +to the format of \*r files. +No +.I newphrase +will begin with any keyword already in use. +.PP +The +.I delta +nodes form a tree. All nodes whose numbers +consist of a single pair +(e.g., 2.3, 2.1, 1.3, etc.) +are on the trunk, and are linked through the +.B next +field in order of decreasing numbers. +The +.B head +field in the +.I admin +node points to the head of that sequence (i.e., contains +the highest pair). +The +.B branch +node in the admin node indicates the default +branch (or revision) for most \*r operations. +If empty, the default +branch is the highest branch on the trunk. +.PP +All +.I delta +nodes whose numbers consist of +.RI 2 n +fields +.RI ( n \(\fP=2) +(e.g., 3.1.1.1, 2.1.2.2, etc.) +are linked as follows. +All nodes whose first +.RI 2 n \-1 +number fields are identical are linked through the +.B next +field in order of increasing numbers. +For each such sequence, +the +.I delta +node whose number is identical to the first +.RI 2 n \-2 +number fields of the deltas on that sequence is called the branchpoint. +The +.B branches +field of a node contains a list of the +numbers of the first nodes of all sequences for which it is a branchpoint. +This list is ordered in increasing numbers. +.LP +.nf +.vs 12 +.ne 38 +Example: +.if t .in +0.5i +.cs 1 20 +.eo + + Head + | + | + v / \ + --------- / \ + / \ / \ | | / \ / \ + / \ / \ | 2.1 | / \ / \ + / \ / \ | | / \ / \ +/1.2.1.3\ /1.3.1.1\ | | /1.2.2.2\ /1.2.2.1.1.1\ +--------- --------- --------- --------- ------------- + ^ ^ | ^ ^ + | | | | | + | | v | | + / \ | --------- / \ | + / \ | \ 1.3 / / \ | + / \ ---------\ / / \----------- +/1.2.1.1\ \ / /1.2.2.1\ +--------- \ / --------- + ^ | ^ + | | | + | v | + | --------- | + | \ 1.2 / | + ----------------------\ /--------- + \ / + \ / + | + | + v + --------- + \ 1.1 / + \ / + \ / + \ / + +.ec +.if t .in +.cs 1 +.ce +Fig. 1: A revision tree +.vs +.fi +.PP +.SH IDENTIFICATION +.de VL +\\$2 +.. +Author: Walter F. Tichy, +Purdue University, West Lafayette, IN, 47907. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH SEE ALSO +ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsmerge(1), rlog(1), +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. diff --git a/usr/src/contrib/rcs-V5.6/man/rcsfreeze.1 b/usr/src/contrib/rcs-V5.6/man/rcsfreeze.1 new file mode 100644 index 0000000000..be669a9f2a --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/rcsfreeze.1 @@ -0,0 +1,68 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: rcsfreeze.1,v 4.4 1990/11/13 15:43:42 hammer Exp $ +.ds r \s-1RCS\s0 +.TH RCSFREEZE 1 \*(Dt GNU +.SH NAME +rcsfreeze \- freeze a configuration of sources checked in under RCS +.SH SYNOPSIS +.B rcsfreeze +.RI [ "name" ] +.SH DESCRIPTION +.B rcsfreeze +assigns a symbolic revision +number to a set of \*r files that form a valid configuration. +.PP +The idea is to run +.B rcsfreeze +each time a new version is checked +in. A unique symbolic name (\c +.BI C_ number, +where +.I number +is increased each time +.B rcsfreeze +is run) is then assigned to the most +recent revision of each \*r file of the main trunk. +.PP +An optional +.I name +argument to +.B rcsfreeze +gives a symbolic name to the configuration. +The unique identifier is still generated +and is listed in the log file but it will not appear as +part of the symbolic revision name in the actual \*r files. +.PP +A log message is requested from the user for future reference. +.PP +The shell script works only on all \*r files at one time. +All changed files must be checked in already. +Run +.IR rcsclean (1) +first and see whether any sources remain in the current directory. +.SH FILES +.TP +.B RCS/.rcsfreeze.ver +version number +.TP +.B RCS/.rcsfreeze.log +log messages, most recent first +.SH AUTHOR +Stephan v. Bechtolsheim +.SH "SEE ALSO" +co(1), rcs(1), rcsclean(1), rlog(1) +.SH BUGS +.B rcsfreeze +does not check whether any sources are checked out and modified. +.PP +Although both source file names and RCS file names are accepted, +they are not paired as usual with RCS commands. +.PP +Error checking is rudimentary. +.PP +.B rcsfreeze +is just an optional example shell script, and should not be taken too seriously. +See \s-1CVS\s0 for a more complete solution. diff --git a/usr/src/contrib/rcs-V5.6/man/rcsintro.1 b/usr/src/contrib/rcs-V5.6/man/rcsintro.1 new file mode 100644 index 0000000000..a76caa0ee2 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/rcsintro.1 @@ -0,0 +1,292 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: rcsintro.1,v 5.1 1991/04/21 12:00:46 eggert Exp $ +.ds r \&\s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.am SS +.LP +.. +.TH RCSINTRO 1 \*(Dt GNU +.SH NAME +rcsintro \- introduction to RCS commands +.SH DESCRIPTION +The Revision Control System (\*r) manages multiple revisions of files. +\*r automates the storing, retrieval, logging, identification, and merging +of revisions. \*r is useful for text that is revised frequently, for example +programs, documentation, graphics, papers, and form letters. +.PP +The basic user interface is extremely simple. The novice only needs +to learn two commands: +.BR ci (1) +and +.BR co (1). +.BR ci , +short for \*(lqcheck in\*(rq, deposits the contents of a +file into an archival file called an \*r file. An \*r file +contains all revisions of a particular file. +.BR co , +short for \*(lqcheck out\*(rq, retrieves revisions from an \*r file. +.SS "Functions of \*r" +.IP \(bu +Store and retrieve multiple revisions of text. \*r saves all old +revisions in a space efficient way. +Changes no longer destroy the original, because the +previous revisions remain accessible. Revisions can be retrieved according to +ranges of revision numbers, symbolic names, dates, authors, and +states. +.IP \(bu +Maintain a complete history of changes. +\*r logs all changes automatically. +Besides the text of each revision, \*r stores the author, the date and time of +check-in, and a log message summarizing the change. +The logging makes it easy to find out +what happened to a module, without having to compare +source listings or having to track down colleagues. +.IP \(bu +Resolve access conflicts. When two or more programmers wish to +modify the same revision, \*r alerts the programmers and prevents one +modification from corrupting the other. +.IP \(bu +Maintain a tree of revisions. \*r can maintain separate lines of development +for each module. It stores a tree structure that represents the +ancestral relationships among revisions. +.IP \(bu +Merge revisions and resolve conflicts. +Two separate lines of development of a module can be coalesced by merging. +If the revisions to be merged affect the same sections of code, \*r alerts the +user about the overlapping changes. +.IP \(bu +Control releases and configurations. +Revisions can be assigned symbolic names +and marked as released, stable, experimental, etc. +With these facilities, configurations of modules can be +described simply and directly. +.IP \(bu +Automatically identify each revision with name, revision number, +creation time, author, etc. +The identification is like a stamp that can be embedded at an appropriate place +in the text of a revision. +The identification makes it simple to determine which +revisions of which modules make up a given configuration. +.IP \(bu +Minimize secondary storage. \*r needs little extra space for +the revisions (only the differences). If intermediate revisions are +deleted, the corresponding deltas are compressed accordingly. +.SS "Getting Started with \*r" +Suppose you have a file +.B f.c +that you wish to put under control of \*r. +If you have not already done so, make an \*r directory with the command +.IP +.B "mkdir RCS" +.LP +Then invoke the check-in command +.IP +.B "ci f.c" +.LP +This command creates an \*r file in the +.B RCS +directory, +stores +.B f.c +into it as revision 1.1, and +deletes +.BR f.c . +It also asks you for a description. The description +should be a synopsis of the contents of the file. All later check-in +commands will ask you for a log entry, which should summarize the +changes that you made. +.PP +Files in the \*r directory are called \*r files; +the others are called working files. +To get back the working file +.B f.c +in the previous example, use the check-out +command +.IP +.B "co f.c" +.LP +This command extracts the latest revision from the \*r file +and writes +it into +.BR f.c . +If you want to edit +.BR f.c , +you must lock it as you check it out with the command +.IP +.B "co \-l f.c" +.LP +You can now edit +.BR f.c . +.PP +Suppose after some editing you want to know what changes that you have made. +The command +.IP +.B "rcsdiff f.c" +.LP +tells you the difference between the most recently checked-in version +and the working file. +You can check the file back in by invoking +.IP +.B "ci f.c" +.LP +This increments the revision number properly. +.PP +If +.B ci +complains with the message +.IP +.BI "ci error: no lock set by " "your name" +.LP +then you have tried to check in a file even though you did not +lock it when you checked it out. +Of course, it is too late now to do the check-out with locking, because +another check-out would +overwrite your modifications. Instead, invoke +.IP +.B "rcs \-l f.c" +.LP +This command will lock the latest revision for you, unless somebody +else got ahead of you already. In this case, you'll have to negotiate with +that person. +.PP +Locking assures that you, and only you, can check in the next update, and +avoids nasty problems if several people work on the same file. +Even if a revision is locked, it can still be checked out for +reading, compiling, etc. All that locking +prevents is a +.I "check-in" +by anybody but the locker. +.PP +If your \*r file is private, i.e., if you are the only person who is going +to deposit revisions into it, strict locking is not needed and you +can turn it off. +If strict locking is turned off, +the owner of the \*r file need not have a lock for check-in; all others +still do. Turning strict locking off and on is done with the commands +.IP +.BR "rcs \-U f.c" " and " "rcs \-L f.c" +.LP +If you don't want to clutter your working directory with \*r files, create +a subdirectory called +.B RCS +in your working directory, and move all your \*r +files there. \*r commands will look first into that directory to find +needed files. All the commands discussed above will still work, without any +modification. +(Actually, pairs of \*r and working files can be specified in three ways: +(a) both are given, (b) only the working file is given, (c) only the +\*r file is given. Both \*r and working files may have arbitrary path prefixes; +\*r commands pair them up intelligently.) +.PP +To avoid the deletion of the working file during check-in (in case you want to +continue editing or compiling), invoke +.IP +.BR "ci \-l f.c" " or " "ci \-u f.c" +.LP +These commands check in +.B f.c +as usual, but perform an implicit +check-out. The first form also locks the checked in revision, the second one +doesn't. Thus, these options save you one check-out operation. +The first form is useful if you want to continue editing, +the second one if you just want to read the file. +Both update the identification markers in your working file (see below). +.PP +You can give +.B ci +the number you want assigned to a checked in +revision. Assume all your revisions were numbered 1.1, 1.2, 1.3, etc., +and you would like to start release 2. +The command +.IP +.BR "ci \-r2 f.c" " or " "ci \-r2.1 f.c" +.LP +assigns the number 2.1 to the new revision. +From then on, +.B ci +will number the subsequent revisions +with 2.2, 2.3, etc. The corresponding +.B co +commands +.IP +.BR "co \-r2 f.c" " and " "co \-r2.1 f.c" +.PP +retrieve the latest revision numbered +.RI 2. x +and the revision 2.1, +respectively. +.B co +without a revision number selects +the latest revision on the +.IR trunk , +i.e. the highest +revision with a number consisting of two fields. Numbers with more than two +fields are needed for branches. +For example, to start a branch at revision 1.3, invoke +.IP +.B "ci \-r1.3.1 f.c" +.LP +This command starts a branch numbered 1 at revision 1.3, and assigns +the number 1.3.1.1 to the new revision. For more information about +branches, see +.BR rcsfile (5). +.SS "Automatic Identification" +\*r can put special strings for identification into your source and object +code. To obtain such identification, place the marker +.IP +.B "$\&Id$" +.LP +into your text, for instance inside a comment. +\*r will replace this marker with a string of the form +.IP +.BI $\&Id: " filename revision date time author state " $ +.LP +With such a marker on the first page of each module, you can +always see with which revision you are working. +\*r keeps the markers up to date automatically. +To propagate the markers into your object code, simply put +them into literal character strings. In C, this is done as follows: +.IP +.ft 3 +static char rcsid[] = \&"$\&Id$\&"; +.ft +.LP +The command +.B ident +extracts such markers from any file, even object code +and dumps. +Thus, +.B ident +lets you find out +which revisions of which modules were used in a given program. +.PP +You may also find it useful to put the marker +.B $\&Log$ +into your text, inside a comment. This marker accumulates +the log messages that are requested during check-in. +Thus, you can maintain the complete history of your file directly inside it. +There are several additional identification markers; see +.BR co (1) +for +details. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH "SEE ALSO" +ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. +.br diff --git a/usr/src/contrib/rcs-V5.6/man/rcsmerge.1 b/usr/src/contrib/rcs-V5.6/man/rcsmerge.1 new file mode 100644 index 0000000000..82871b033b --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/rcsmerge.1 @@ -0,0 +1,140 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: rcsmerge.1,v 5.3 1991/08/19 03:13:55 eggert Exp $ +.ds r \&\s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH RCSMERGE 1 \*(Dt GNU +.SH NAME +rcsmerge \- merge RCS revisions +.SH SYNOPSIS +.B rcsmerge +.RI [ options ] " file" +.SH DESCRIPTION +.B rcsmerge +incorporates the changes between two revisions +of an \*r file into the corresponding working file. +.PP +Pathnames matching an \*r suffix denote \*r files; +all others denote working files. +Names are paired as explained in +.BR ci (1). +.PP +At least one revision must be specified with one of the options +described below, usually +.BR \-r . +At most two revisions may be specified. +If only one revision is specified, the latest +revision on the default branch (normally the highest branch on the trunk) +is assumed for the second revision. +Revisions may be specified numerically or symbolically. +.PP +.B rcsmerge +prints a warning if there are overlaps, and delimits +the overlapping regions as explained in +.BR merge (1). +The command is useful for incorporating changes into a checked-out revision. +.SH OPTIONS +.TP +.BI \-k subst +Use +.I subst +style keyword substitution. +See +.BR co (1) +for details. +For example, +.B "\-kk\ \-r1.1\ \-r1.2" +ignores differences in keyword values when merging the changes from +.B 1.1 +to +.BR 1.2 . +.TP +.BR \-p [\f2rev\fP] +Send the result to standard output instead of overwriting the working file. +.TP +.BR \-q [\f2rev\fP] +Run quietly; do not print diagnostics. +.TP +.BR \-r [\f2rev\fP] +Merge with respect to revision +.IR rev . +Here an empty +.I rev +stands for the latest revision on the default branch, normally the head. +.TP +.BI \-V n +Emulate \*r version +.IR n . +See +.BR co (1) +for details. +.TP +.BI \-x "suffixes" +Use +.I suffixes +to characterize \*r files. +See +.BR ci (1) +for details. +.SH EXAMPLES +Suppose you have released revision 2.8 of +.BR f.c . +Assume +furthermore that after you complete an unreleased revision 3.4, you receive +updates to release 2.8 from someone else. +To combine the updates to 2.8 and your changes between 2.8 and 3.4, +put the updates to 2.8 into file f.c and execute +.LP +.B " rcsmerge \-p \-r2.8 \-r3.4 f.c >f.merged.c" +.PP +Then examine +.BR f.merged.c . +Alternatively, if you want to save the updates to 2.8 in the \*r file, +check them in as revision 2.8.1.1 and execute +.BR "co \-j": +.LP +.B " ci \-r2.8.1.1 f.c" +.br +.B " co \-r3.4 \-j2.8:2.8.1.1 f.c" +.PP +As another example, the following command undoes the changes +between revision 2.4 and 2.8 in your currently checked out revision +in +.BR f.c . +.LP +.B " rcsmerge \-r2.8 \-r2.4 f.c" +.PP +Note the order of the arguments, and that +.B f.c +will be +overwritten. +.SH ENVIRONMENT +.TP +.B \s-1RCSINIT\s0 +options prepended to the argument list, separated by spaces. +See +.BR ci (1) +for details. +.SH DIAGNOSTICS +Exit status is 0 for no overlaps, 1 for some overlaps, 2 for trouble. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH "SEE ALSO" +ci(1), co(1), ident(1), merge(1), rcs(1), rcsdiff(1), rcsintro(1), rlog(1), +rcsfile(5) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. +.br diff --git a/usr/src/contrib/rcs-V5.6/man/rlog.1 b/usr/src/contrib/rcs-V5.6/man/rlog.1 new file mode 100644 index 0000000000..fa627ffdc1 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/man/rlog.1 @@ -0,0 +1,260 @@ +.de Id +.ds Rv \\$3 +.ds Dt \\$4 +.. +.Id $Id: rlog.1,v 5.3 1991/08/22 06:50:48 eggert Exp $ +.ds g \&\s-1UTC\s0 +.ds r \&\s-1RCS\s0 +.if n .ds - \%-- +.if t .ds - \(em +.TH RLOG 1 \*(Dt GNU +.SH NAME +rlog \- print log messages and other information about RCS files +.SH SYNOPSIS +.B rlog +.RI [ " options " ] " file " .\|.\|. +.SH DESCRIPTION +.B rlog +prints information about \*r files. +.PP +Pathnames matching an \*r suffix denote \*r files; +all others denote working files. +Names are paired as explained in +.BR ci (1). +.PP +.B rlog +prints the following information for each +\*r file: \*r pathname, working pathname, head (i.e., the number +of the latest revision on the trunk), default branch, access list, locks, +symbolic names, suffix, total number of revisions, +number of revisions selected for printing, and +descriptive text. This is followed by entries for the selected revisions in +reverse chronological order for each branch. For each revision, +.B rlog +prints revision number, author, date/time, state, number of +lines added/deleted (with respect to the previous revision), +locker of the revision (if any), and log message. +All times are displayed in Coordinated Universal Time (\*g). +Without options, +.B rlog +prints complete information. +The options below restrict this output. +.nr n \w'\f3\-V\fP\f2n\fP '+1n-1/1n +.TP \nn +.B \-L +Ignore \*r files that have no locks set. +This is convenient in combination with +.BR \-h , +.BR \-l , +and +.BR \-R . +.TP +.B \-R +Print only the name of the \*r file. +This is convenient for translating a +working pathname into an \*r pathname. +.TP +.B \-h +Print only the \*r pathname, working pathname, head, +default branch, access list, locks, +symbolic names, and suffix. +.TP +.B \-t +Print the same as +.BR \-h , +plus the descriptive text. +.TP +.B \-b +Print information about the revisions on the default branch, normally +the highest branch on the trunk. +.TP +.BI \-d "dates" +Print information about revisions with a checkin date/time in the ranges given by +the semicolon-separated list of +.IR dates . +A range of the form +.IB d1 < d2 +or +.IB d2 > d1 +selects the revisions that were deposited between +.I d1 +and +.I d2 +inclusive. +A range of the form +.BI < d +or +.IB d > +selects +all revisions dated +.I d +or earlier. +A range of the form +.IB d < +or +.BI > d +selects +all revisions dated +.I d +or later. +A range of the form +.I d +selects the single, latest revision dated +.I d +or earlier. +The date/time strings +.IR d , +.IR d1 , +and +.I d2 +are in the free format explained in +.BR co (1). +Quoting is normally necessary, especially for +.B < +and +.BR > . +Note that the separator is +a semicolon. +.TP +.BR \-l [\f2lockers\fP] +Print information about locked revisions only. +In addition, if the comma-separated list +.I lockers +of login names is given, +ignore all locks other than those held by the +.IR lockers . +For example, +.B "rlog\ \-L\ \-R\ \-lwft\ RCS/*" +prints the name of \*r files locked by the user +.BR wft . +.TP +.BR \-r [\f2revisions\fP] +prints information about revisions given in the comma-separated list +.I revisions +of revisions and ranges. +A range +.IB rev1 : rev2 +means revisions +.I rev1 +to +.I rev2 +on the same branch, +.BI : rev +means revisions from the beginning of the branch up to and including +.IR rev , +and +.IB rev : +means revisions starting with +.I rev +to the end of the branch containing +.IR rev . +An argument that is a branch means all +revisions on that branch. +A range of branches means all revisions +on the branches in that range. +A branch followed by a +.B .\& +means the latest revision in that branch. +A bare +.B \-r +with no +.I revisions +means the latest revision on the default branch, normally the trunk. +.TP +.BI \-s states +prints information about revisions whose state attributes match one of the +states given in the comma-separated list +.IR states . +.TP +.BR \-w [\f2logins\fP] +prints information about revisions checked in by users with +login names appearing in the comma-separated list +.IR logins . +If +.I logins +is omitted, the user's login is assumed. +.TP +.BI \-V n +Emulate \*r version +.I n +when generating logs. +See +.BR co (1) +for more. +.TP +.BI \-x "suffixes" +Use +.I suffixes +to characterize \*r files. +See +.BR ci (1) +for details. +.PP +.B rlog +prints the intersection of the revisions selected with +the options +.BR \-d , +.BR \-l , +.BR \-s , +and +.BR \-w , +intersected +with the union of the revisions selected by +.B \-b +and +.BR \-r . +.SH EXAMPLES +.LP +.nf +.B " rlog \-L \-R RCS/*" +.B " rlog \-L \-h RCS/*" +.B " rlog \-L \-l RCS/*" +.B " rlog RCS/*" +.fi +.LP +The first command prints the names of all \*r files in the subdirectory +.B RCS +that have locks. The second command prints the headers of those files, +and the third prints the headers plus the log messages of the locked revisions. +The last command prints complete information. +.SH ENVIRONMENT +.TP +.B \s-1RCSINIT\s0 +options prepended to the argument list, separated by spaces. +See +.BR ci (1) +for details. +.SH DIAGNOSTICS +The exit status is zero if and only if all operations were successful. +.SH IDENTIFICATION +Author: Walter F. Tichy. +.br +Revision Number: \*(Rv; Release Date: \*(Dt. +.br +Copyright \(co 1982, 1988, 1989 by Walter F. Tichy. +.br +Copyright \(co 1990, 1991 by Paul Eggert. +.SH "SEE ALSO" +ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), +rcsfile(5) +.br +Walter F. Tichy, +\*r\*-A System for Version Control, +.I "Software\*-Practice & Experience" +.BR 15 , +7 (July 1985), 637-654. +.SH BUGS +The separator for revision ranges in the +.B \-r +option used to be +.B \- +instead of +.BR : , +but this leads to confusion when symbolic names contain +.BR \- . +For backwards compatibility +.B "rlog \-r" +still supports the old +.B \- +separator, but it warns about this obsolete use. +.br diff --git a/usr/src/contrib/rcs-V5.6/rcs.ps b/usr/src/contrib/rcs-V5.6/rcs.ps new file mode 100644 index 0000000000..bec9168bd5 --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/rcs.ps @@ -0,0 +1,11236 @@ +%!PS-Adobe-1.0 +%%Creator: devps (Pipeline Associates, Inc.) +%%CreationDate: Fri Jan 4 00:13:52 1991 +%%Pages: (atend) +%%DocumentFonts: (atend) + +/X /exch load def +/r /rmoveto load def +/m /moveto load def +/l /lineto load def +/rl /rlineto load def +/lc{yc X xc X l st} bind def +/mc{yc X xc X m} bind def +/el{gs /a X def a div 1 X scale cp np a xc 2 div 0 360 arc st gr} bind def +/ar{cp 7 2 roll np xc 5 1 roll atan 3 1 roll atan X arc st} bind def +/sp{yc X xc X 6 2 roll yc X xc X 6 2 roll yc X xc X 6 2 roll ct} bind def +/st /stroke load def +/gs /gsave load def +/gr /grestore load def +/cp /currentpoint load def +/np /newpath load def +/ct /curveto load def +/m0{0 0 moveto} bind def +/BP{/devps-save save def m0} bind def +/EP{ +clear devps-save restore +showpage} bind def +/res 10.000000 def +/V{res neg div 792 add +currentpoint pop X +m} bind def +/H{res div +currentpoint X pop +transform round exch round exch itransform +moveto} bind def +/h{res div 0 r} bind def +/v{res neg div 0 X r} bind def +/xc{res div} bind def +/yc{res neg div 792 add} bind def +/S{X H show} bind def +/psize 10 def +/height 1 def +/slant 0 def +/FF{findfont X dup 12 div setlinewidth /psize X def + [psize 0 psize height mul slant sin slant cos div mul psize height mul 0 0] + makefont setfont} bind def +/shade{gs + /dy X def + /dx X def + np m + setgray + 0 dy rl + dx 0 rl + 0 dy neg rl + dx neg 0 rl + closepath + fill +gr} bind def +1 setlinecap +50 dict dup begin +/FontType 3 def +/FontName /DIThacks def +/FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def +/FontBBox [-220 -280 1000 1000] def +/Encoding 256 array def +0 1 255{Encoding exch /.notdef put}for +Encoding + dup 8#040/space put + dup 8#110/rc put + dup 8#111/lt put + dup 8#112/bv put + dup 8#113/lk put + dup 8#114/lb put + dup 8#115/rt put + dup 8#116/rk put + dup 8#117/rb put + dup 8#120/rf put + dup 8#121/lf put + dup 8#122/lc put + dup 8#140/sq put + dup 8#141/bx put + dup 8#142/ci put + dup 8#143/br put + dup 8#144/rn put + dup 8#145/vr put + dup 8#146/ob put + dup 8#147/bu put + dup 8#150/ru put + dup 8#151/ul put + dup 8#326/sr put + pop +/DITfd 100 dict def +/BuildChar{0 begin + /cc exch def /fd exch def + /charname fd /Encoding get cc get def + /charwid fd /Metrics get charname get def + /charproc fd /CharProcs get charname get def + charwid 0 fd /FontBBox get aload pop setcachedevice + 2 setlinejoin 40 setlinewidth + newpath 0 0 moveto gsave charproc grestore + end}def +/BuildChar load 0 DITfd put +/CharProcs 50 dict def +CharProcs begin +/space{}def +/.notdef{}def +/ru{500 0 rls}def +/rn{0 750 moveto 500 0 rls}def +/vr{0 800 moveto 0 -770 rls}def +/bv{0 800 moveto 0 -1000 rls}def +/br{0 750 moveto 0 -1000 rls}def +/ul{0 -250 moveto 500 0 rls}def +/ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def +/bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def +/sq{80 0 rmoveto currentpoint dround newpath moveto + 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def +/bx{80 0 rmoveto currentpoint dround newpath moveto + 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def +/ci{355 333 rmoveto currentpoint newpath 333 0 360 arc + 50 setlinewidth stroke}def + +/lt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def +/lb{0 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def +/rt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def +/rb{0 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def +/lk{0 800 moveto 0 300 -300 300 s4 arcto pop pop 1000 sub + 0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def +/rk{0 800 moveto 0 300 s2 300 s4 arcto pop pop 1000 sub + 0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def +/lf{0 800 moveto 0 -1000 rlineto s4 0 rls}def +/rf{0 800 moveto 0 -1000 rlineto s4 neg 0 rls}def +/lc{0 -200 moveto 0 1000 rlineto s4 0 rls}def +/rc{0 -200 moveto 0 1000 rlineto s4 neg 0 rls}def +/sr{395.744681 0 moveto 557.446809 995.744681 lineto 521.276596 1000 lineto + 382.978723 170.212766 lineto 168.085106 602.127660 lineto + 8.510638 525.531915 lineto 23.404255 496.170213 lineto + 127.659574 546.808511 lineto 395.744681 0 lineto closepath fill} def +end + +/Metrics 50 dict def Metrics begin +/.notdef 0 def +/space 500 def +/ru 500 def +/br 0 def +/lt 416 def +/lb 416 def +/rt 416 def +/rb 416 def +/lk 416 def +/rk 416 def +/rc 416 def +/lc 416 def +/rf 416 def +/lf 416 def +/bv 416 def +/ob 350 def +/bu 350 def +/ci 750 def +/bx 750 def +/sq 750 def +/rn 500 def +/ul 500 def +/vr 0 def +/sr 750 def +end + +DITfd begin +/s2 500 def /s4 250 def /s3 333 def +/a4p{arcto pop pop pop pop}def +/2cx{2 copy exch}def +/rls{rlineto stroke}def +/currx{currentpoint pop}def +/dround{transform round exch round exch itransform} def +end +end +/DIThacks exch definefont pop + + +/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap +currentlinejoin currentdash currentgray currentmiterlimit ] cvx def + +/resolution 720 def + +/startFig { + /SavedState save def + userdict maxlength dict begin + currentpoint transform + + DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap + setlinewidth setmatrix + + itransform moveto + + /ury exch def + /urx exch def + /lly exch def + /llx exch def + /y exch 72 mul resolution div def + /x exch 72 mul resolution div def + + currentpoint /cy exch def /cx exch def + + /sx x urx llx sub div def % scaling for x + /sy y ury lly sub div def % scaling for y + + sx sy scale % scale by (sx,sy) + + cx sx div llx sub + cy sy div ury sub translate + + /DefFigCTM matrix currentmatrix def + + /initmatrix { + DefFigCTM setmatrix + } def + /defaultmatrix { + DefFigCTM exch copy + } def + + /initgraphics { + DocumentInitState setmiterlimit setgray setdash + setlinejoin setlinecap setlinewidth setmatrix + DefFigCTM setmatrix + } def + + /showpage { + initgraphics + } def + +} def +/clipFig { + currentpoint 6 2 roll + newpath 4 copy + 4 2 roll moveto + 6 -1 roll exch lineto + exch lineto + exch lineto + closepath clip + newpath + moveto +} def +/doclip { llx lly urx ury clipFig } def +/endFig { + end SavedState restore +} def +/globalstart { + % Push details about the enviornment on the stack. + fontnum fontsize fontslant fontheight + % firstpage + mh my resolution slotno currentpoint + pagesave restore gsave +} def +/globalend { + grestore moveto + /slotno exch def /resolution exch def /my exch def + /mh exch def + % /firstpage exch def + /fontheight exch def + /fontslant exch def /fontsize exch def /fontnum exch def + F + /pagesave save def +} def +/C{/Courier FF}def +/R{/Times-Roman FF}def +/B{/Times-Bold FF}def +/I{/Times-Italic FF}def +%% Troff special characters not on Symbol font +%% Copyright (C) 1986 by Pipeline Associates, Inc. +%% Version 1.0 +/altRTD 20 dict def +altRTD begin +/s{setcachedevice}def +/C{1000 1000 scale}def +/m /moveto load def +/c /curveto load def +/S /stroke load def +/l /lineto load def +/a /arcto load def +/p /pop load def +/sl /setlinewidth load def + +end +/F_Troff 17 dict def F_Troff begin +systemdict /currentpacking known +{/SavePacking currentpacking def true setpacking}if +/PaintType 0 def +/FontType 3 def +/StrokeWidth 0 def +/UniqueID 8277003 def +/FontMatrix [.001000 0 0 .001000 0 0] def +/FontBBox [-12 -105 942 855 ] def +/Encoding 256 array def +/CD 256 1 add dict def +/FontInfo 3 dict def FontInfo begin +/UnderlinePosition -133 def /UnderlineThickness 20 def end +/FontName (Troff) def +0 1 256 1 sub{Encoding exch /.notdef put}for +CD /.notdef{500 0 setcharwidth{}}put +Encoding (1) 0 get /br put +%% bold vertical rule used by tbl +CD /br{ +C +0 0 -.5 -.5 1 1 s +np +.05 sl +0 -.1 m +0 .9 l +{S} +}put +Encoding (2) 0 get /ul put +%% underline used by tbl +CD /ul{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +0 -.1 m +.5 -.1 l +{S} +}put +Encoding (3) 0 get /ru put +%% baseline rule +CD /ru{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +m0 +.5 0 l +{S} +}put +Encoding (4) 0 get /vr put +%% vertical rule +CD /vr{ +C +0 0 -.5 -.5 1 1 s +np +.05 sl +m0 +0 1 l +{S} +}put +Encoding (5) 0 get /sq put +%% square +CD /sq{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +0 .25 m +0 .5 rl +.5 0 rl +0 -.5 rl +-.5 0 rl +closepath +{S} +}put +Encoding (6) 0 get /bx put +%% solid box +CD /bx{ +C +.5 0 -.5 -.5 1 1 s +np +0 .25 m +0 .5 rl +.5 0 rl +0 -.5 rl +-.5 0 rl +closepath +{fill} +}put +Encoding (7) 0 get /rn put +%% radical extender +CD /rn{ +C +.5 0 -.5 -.5 1 1 s +np +.03 sl +-.03 .9 m +.5 0 rl +{S} +}put +Encoding (8) 0 get /GR put +%% gray mask +CD /GR{ +C +.5 0 setcharwidth +.5 setgray +np +0 -.1 m +0 1 rl +.5 0 rl +0 -1 rl +-.5 0 rl +closepath +{fill} +}put +Encoding 97 /a put +CD /a{1000 0 0 66 942 421 s 430 415 +m 578 406 678 349 662 319 c 655 306 614 287 583 +296 c 570 300 466 340 438 332 c 365 309 335 213 +270 209 c 0 310 m 108 310 l 108 114 l 0 +114 l 0 310 l 42 161 m 42 134 l 66 134 l 66 +161 l 42 161 l 47 155 m 47 140 l 62 140 l 62 +155 l 47 155 l 110 133 m 226 113 300 66 410 +80 c 497 91 550 69 634 76 c 645 76 663 92 669 +107 c 677 125 673 141 668 160 c 725 334 m 758 +332 734 253 701 250 c 501 325 m 475 316 476 309 +473 302 c 465 282 482 263 499 257 c 552 236 615 +253 689 253 c 701 253 713 236 713 218 c 712 194 +702 168 678 161 c 671 159 663 160 655 160 c 591 +158 516 156 479 168 c 461 173 453 191 453 210 c 453 +224 456 235 466 244 c 476 253 490 252 503 255 c 459 +84 m 447 96 435 106 435 123 c 435 136 440 145 447 +155 c 453 163 462 168 469 173 c 110 293 m 173 +318 300 421 435 415 c 609 407 852 416 885 411 c 898 +409 924 411 930 380 c 942 316 828 339 742 334 c 731 +334 730 335 725 335 c 701 336 685 336 660 336 c{S}}put +Encoding 98 /b put +CD /b{1000 0 -12 66 930 421 s 500 +415 m 352 406 252 349 268 319 c 275 306 316 287 +347 296 c 360 300 464 340 492 332 c 565 309 595 +213 660 209 c 930 310 m 822 310 l 822 114 l 930 +114 l 930 310 l 888 161 m 888 134 l 864 134 +l 864 161 l 888 161 l 883 155 m 883 140 l 868 +140 l 868 155 l 883 155 l 820 133 m 704 113 +630 66 520 80 c 433 91 380 69 296 76 c 285 76 +267 92 261 107 c 253 125 257 141 262 160 c 205 +334 m 172 332 196 253 229 250 c 429 325 m 455 +316 454 309 457 302 c 465 282 448 263 431 257 c 378 +236 315 253 241 253 c 229 253 217 236 217 218 c 218 +194 228 168 252 161 c 259 159 267 160 275 160 c 339 +158 414 156 451 168 c 469 173 477 191 477 210 c 477 +224 474 235 464 244 c 454 253 440 252 427 255 c 471 +84 m 483 96 495 106 495 123 c 495 136 490 145 483 +155 c 477 163 468 168 461 173 c 820 293 m 757 +318 630 421 495 415 c 321 407 78 416 45 411 c 32 +409 6 411 0 380 c -12 316 102 339 188 334 c 199 +334 200 335 205 335 c 229 336 245 336 270 336 c{S}}put +Encoding 99 /c put +CD /c{1000 0 184 0 827 627 s 185 315 +m 186 488 332 627 505 625 c 682 623 827 467 815 +290 c 804 124 666 0 500 0 c 327 0 184 142 185 +315 c{S}}put +Encoding 100 /d put +CD /d{590 0 134 158 477 500 s 300 +160 m 208 162 134 238 135 330 c 136 423 212 500 +305 500 c 397 500 473 427 475 335 c 477 239 396 +158 300 160 c{fill}}put +Encoding 101 /e put % Bell Symbol +CD /e{1010 0 -100 -210 1010 1010 s 100 sl 0 setlinecap +420 300 450 0 360 arc +420 650 m 420 575 l S +newpath 120 125 m 720 125 l 75 sl S +420 125 m 420 25 l S +220 400 m 220 175 120 175 100 a p p p p +220 400 m 220 550 420 550 80 a p p p p +620 400 m 620 175 720 175 100 a p p p p +620 400 m 620 550 420 550 80 a p p p p +295 550 m 545 550 l{S}}put +/BuildChar{altRTD /BuildChar get exec}def end +altRTD begin /BuildChar{altRTD begin +/char exch def /fontdict exch def save +/charname fontdict /Encoding get char get def +fontdict /StrokeWidth get sl +fontdict /CD get dup charname known +{charname}{/.notdef}ifelse get newpath exec +fontdict /PaintType get 0 eq{exec}{p S}ifelse +restore end}def end +systemdict /currentpacking known{F_Troff /SavePacking get setpacking}if +/Troff F_Troff definefont pop +/Y1{/Troff FF}def +/Y{/Symbol FF}def +%%EndProlog +%%Page: 0 1 +BP +/slant 0 def +/height 1.000000 def +10 C +10 R +40 V +0(-)S +1230 V +12 B +1925(RCS\320A)S +2406(System)S +2809(for)S +2998(Version)S +3434(Control)S +1620 V +10 I +2560(Walter)S +2862(F.)S +2978(Tichy)S +1800 V +10 R +2183(Department)S +2684(of)S +2797(Computer)S +3227(Sciences)S +1920 V +2512(Purdue)S +2825(University)S +2040 V +2257(West)S +2492(Lafayette,)S +2923(Indiana)S +3252(47907)S +2640 V +10 I +2643(ABSTRACT)S +2880 V +10 R +1330(An)S +1490(important)S +1917(problem)S +2289(in)S +2406(program)S +2783(development)S +3338(and)S +3521(maintenance)S +4064(is)S +4170(version)S +4503(con-)S +3000 V +1080(trol,)S +1302(i.e.,)S +1507(the)S +1687(task)S +1906(of)S +2047(keeping)S +2421(a)S +2523(software)S +2924(system)S +3260(consisting)S +3724(of)S +3865(many)S +4145(versions)S +4536(and)S +3120 V +1080(con\256gurations)S +1691(well)S +1902(organized.)S +2389(The)S +2583(Revision)S +2978(Control)S +3323(System)S +3657(\(RCS\))S +3952(is)S +4058(a)S +4141(software)S +4524(tool)S +3240 V +1080(that)S +1280(assists)S +1586(with)S +1814(that)S +2014(task.)S +2280(RCS)S +2520(manages)S +2919(revisions)S +3330(of)S +3463(text)S +3663(documents,)S +4171(in)S +4298(particular)S +3360 V +1080(source)S +1376(programs,)S +1815(documentation,)S +2471(and)S +2652(test)S +2828(data.)S +3086(It)S +3184(automates)S +3626(the)S +3785(storing,)S +4125(retrieval,)S +4519(log-)S +3480 V +1080(ging)S +1289(and)S +1464(identi\256cation)S +2023(of)S +2136(revisions,)S +2552(and)S +2726(it)S +2812(provides)S +3186(selection)S +3571(mechanisms)S +4095(for)S +4241(composing)S +3600 V +1080(con\256gurations.)S +1745(This)S +1962(paper)S +2222(introduces)S +2677(basic)S +2921(version)S +3254(control)S +3576(concepts)S +3964(and)S +4147(discusses)S +4558(the)S +3720 V +1080(practice)S +1438(of)S +1564(version)S +1901(control)S +2227(using)S +2487(RCS.)S +2775(For)S +2957(conserving)S +3438(space,)S +3726(RCS)S +3958(stores)S +4233(deltas,)S +4533(i.e.,)S +3840 V +1080(di)S +1158 H + (f)show 10 -.5 mul h (f)show +10 R +1219(erences)S +1555(between)S +1925(successive)S +2384(revisions.)S +2838(Several)S +3175(delta)S +3407(storage)S +3734(methods)S +4112(are)S +4272(discussed.)S +3960 V +1080(Usage)S +1365(statistics)S +1746(show)S +1993(that)S +2179(RCS's)S +2476(delta)S +2705(storage)S +3028(method)S +3363(is)S +3465(space)S +3721(and)S +3900(time)S +4113(e)S +4157 H + (f)show 10 -.5 mul h (\256)show +10 R +4241(cient.)S +4525(The)S +4080 V +1080(paper)S +1331(concludes)S +1760(with)S +1968(a)S +2042(detailed)S +2388(survey)S +2684(of)S +2797(version)S +3121(control)S +3434(tools.)S +4320 V +10 B +1080(Keywords)S +10 R +1513(:)S +1579(con\256guration)S +2150(management,)S +2723(history)S +3040(management,)S +3614(version)S +3947(control,)S +4294(revisions,)S +4440 V +1080(deltas.)S +4920 V +720(1991/01/03)S +7920 V +EP +%%Page: 1 2 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +1230 V +12 B +1925(RCS\320A)S +2406(System)S +2809(for)S +2998(Version)S +3434(Control)S +1620 V +10 I +2560(Walter)S +2862(F.)S +2978(Tichy)S +1800 V +10 R +2183(Department)S +2684(of)S +2797(Computer)S +3227(Sciences)S +1920 V +2512(Purdue)S +2825(University)S +2040 V +2257(West)S +2492(Lafayette,)S +2923(Indiana)S +3252(47907)S +2676 V +10 B +720(1.)S +855(Introduction)S +2892 V +10 R +970(Version)S +1353(control)S +1703(is)S +1837(the)S +2026(task)S +2254(of)S +2404(keeping)S +2787(software)S +3197(systems)S +3581(consisting)S +4054(of)S +4205(many)S +4495(versions)S +4896(and)S +3072 V +720(con\256gurations)S +1337(well)S +1554(organized.)S +2047(The)S +2247(Revision)S +2648(Control)S +2999(System)S +3339(\(RCS\))S +3639(is)S +3750(a)S +3838(set)S +3993(of)S +4120(UNIX)S +4413(commands)S +4890(that)S +3252 V +720(assist)S +967(with)S +1175(that)S +1355(task.)S +3468 V +970(RCS')S +1227(primary)S +1577(function)S +1944(is)S +2045(to)S +2157(manage)S +10 I +2501(revision)S +2857(groups)S +10 R +3135(.)S +3224(A)S +3330(revision)S +3686(group)S +3953(is)S +4054(a)S +4133(set)S +4279(of)S +4397(text)S +4582(documents,)S +3648 V +720(called)S +10 I +991(revisions)S +10 R +1352(,)S +1410(that)S +1593(evolved)S +1942(from)S +2169(each)S +2384(other.)S +2677(A)S +2781(new)S +2979(revision)S +3333(is)S +3432(created)S +3751(by)S +3883(manually)S +4287(editing)S +4597(an)S +4723(existing)S +3828 V +720(one.)S +956(RCS)S +1183(organizes)S +1602(the)S +1761(revisions)S +2159(into)S +2352(an)S +2483(ancestral)S +2874(tree.)S +3115(The)S +3307(initial)S +3579(revision)S +3939(is)S +4044(the)S +4204(root)S +4403(of)S +4524(the)S +4684(tree,)S +4896(and)S +4008 V +720(the)S +880(tree)S +1067(edges)S +1332(indicate)S +1686(from)S +1918(which)S +2200(revision)S +2560(a)S +2642(given)S +2902(one)S +3084(evolved.)S +3493(Besides)S +3842(managing)S +4274(individual)S +4718(revision)S +4188 V +720(groups,)S +1052(RCS)S +1277(provides)S +1657(\257exible)S +1993(selection)S +2384(functions)S +2792(for)S +2944(composing)S +3419(con\256gurations.)S +4082(RCS)S +4308(may)S +4516(be)S +4646(combined)S +4368 V +720(with)S +928(MAKE)S +4318 V +1222(1)S +4368 V +1272(,)S +1327(resulting)S +1707(in)S +1815(a)S +1889(powerful)S +2279(package)S +2635(for)S +2781(version)S +3105(control.)S +4584 V +970(RCS)S +1192(also)S +1385(o)S +1435 H + (f)show 10 -.5 mul h (f)show +10 R +1496(ers)S +1644(facilities)S +2021(for)S +2170(merging)S +2536(updates)S +2874(with)S +3085(customer)S +3484(modi\256cations,)S +4087(for)S +4236(distributed)S +4697(software)S +4764 V +720(development,)S +1334(and)S +1551(for)S +1740(automatic)S +2207(identi\256cation.)S +2863(Identi\256cation)S +3469(is)S +3609(the)S +3803(`stamping')S +4308(of)S +4463(revisions)S +4896(and)S +4944 V +720(con\256gurations)S +1336(with)S +1558(unique)S +1874(markers.)S +2294(These)S +2576(markers)S +2941(are)S +3106(akin)S +3322(to)S +3444(serial)S +3704(numbers,)S +4118(telling)S +4419(software)S +4807(main-)S +5124 V +720(tainers)S +1016(unambiguously)S +1663(which)S +1937(con\256guration)S +2500(is)S +2597(before)S +2881(them.)S +5340 V +970(RCS)S +1194(is)S +1295(designed)S +1684(for)S +1835(both)S +2048(production)S +2516(and)S +2695(experimental)S +3251(environments.)S +3885(In)S +4003(production)S +4471(environments,)S +5520 V +720(access)S +1014(controls)S +1376(detect)S +1654(update)S +1959(con\257icts)S +2337(and)S +2520(prevent)S +2858(overlapping)S +3374(changes.)S +3789(In)S +3911(experimental)S +4471(environments,)S +5700 V +720(where)S +993(strong)S +1273(controls)S +1625(are)S +1776(counterproductive,)S +2557(it)S +2643(is)S +2740(possible)S +3098(to)S +3206(loosen)S +3497(the)S +3649(controls.)S +5916 V +970(Although)S +1389(RCS)S +1621(was)S +1818(originally)S +2249(intended)S +2635(for)S +2793(programs,)S +3237(it)S +3335(is)S +3444(useful)S +3730(for)S +3888(any)S +4074(text)S +4266(that)S +4458(is)S +4567(revised)S +4897(fre-)S +6096 V +720(quently)S +1054(and)S +1232(whose)S +1521(previous)S +1898(revisions)S +2292(must)S +2520(be)S +2647(preserved.)S +3122(RCS)S +3345(has)S +3511(been)S +3732(applied)S +4059(successfully)S +4580(to)S +4691(store)S +4918(the)S +6276 V +720(source)S +1010(text)S +1190(for)S +1336(drawings,)S +1757(VLSI)S +2009(layouts,)S +2353(documentation,)S +3002(speci\256cations,)S +3601(test)S +3770(data,)S +3991(form)S +4215(letters)S +4489(and)S +4663(articles.)S +6492 V +970(This)S +1191(paper)S +1455(discusses)S +1870(the)S +2035(practice)S +2393(of)S +2519(version)S +2856(control)S +3182(using)S +3442(RCS.)S +3730(It)S +3834(also)S +4038(introduces)S +4497(basic)S +4746(version)S +6672 V +720(control)S +1036(concepts,)S +1443(useful)S +1720(for)S +1869(clarifying)S +2290(current)S +2605(practice)S +2953(and)S +3130(designing)S +3551(similar)S +3861(systems.)S +4265(Revision)S +4653(groups)S +4957(of)S +6852 V +720(individual)S +1161(components)S +1679(are)S +1835(treated)S +2141(in)S +2254(the)S +2411(next)S +2618(three)S +2853(sections,)S +3236(and)S +3416(the)S +3574(extensions)S +4032(to)S +4146(con\256gurations)S +4754(follow.)S +7032 V +720(Because)S +1082(of)S +1195(its)S +1320(size,)S +1530(a)S +1604(survey)S +1900(of)S +2013(version)S +2337(control)S +2650(tools)S +2875(appears)S +3209(at)S +3311(the)S +3463(end)S +3637(of)S +3750(the)S +3902(paper.)S +7132 V +8 Y1 +720(333333333333333333)S +7232 V +8 R +720(An)S +842(earlier)S +1067(version)S +1325(of)S +1415(this)S +1554(paper)S +1754(was)S +1902(published)S +2236(in)S +8 I +2322(Software\320Practice)S +2970(&)S +3056(Experience)S +8 B +3450(15)S +8 R +3530(,)S +3574(7)S +3638(\(July)S +3821(1985\),)S +4051(637-654.)S +7920 V +EP +%%Page: 2 3 +BP +/slant 0 def +/height 1.000000 def +8 R +8 R +40 V +10 R +0(-)S +580 V +2792(- 2 -)S +900 V +10 B +720(2.)S +855(Getting)S +1207(started)S +1536(with)S +1755(RCS)S +1116 V +10 R +970(Suppose)S +1339(a)S +1413(text)S +1593(\256le)S +10 I +1751(f.c)S +10 R +1878(is)S +1975(to)S +2083(be)S +2207(placed)S +2497(under)S +2754(control)S +3067(of)S +3180(RCS.)S +3455(Invoking)S +3846(the)S +3998(check-in)S +4371(command)S +1296 V +10 I +1080(ci)S +1212(f.c)S +1536 V +10 R +720(creates)S +1030(a)S +1108(new)S +1308(revision)S +1664(group)S +1931(with)S +2143(the)S +2299(contents)S +2666(of)S +10 I +2783(f.c)S +10 R +2914(as)S +3031(the)S +3187(initial)S +3455(revision)S +3811(\(numbered)S +4278(1.1\))S +4471(and)S +4650(stores)S +4918(the)S +1716 V +720(group)S +986(into)S +1175(the)S +1330(\256le)S +10 I +1491(f.c,v)S +10 R +1657(.)S +1745(Unless)S +2050(told)S +2239(otherwise,)S +2685(the)S +2840(command)S +3267(deletes)S +10 I +3577(f.c)S +10 R +3674(.)S +3762(It)S +3856(also)S +4050(asks)S +4255(for)S +4404(a)S +4481(description)S +4957(of)S +1896 V +720(the)S +878(group.)S +1202(The)S +1393(description)S +1873(should)S +2176(state)S +2395(the)S +2553(common)S +2939(purpose)S +3291(of)S +3410(all)S +3546(revisions)S +3943(in)S +4057(the)S +4215(group,)S +4510(and)S +4691(becomes)S +2076 V +720(part)S +913(of)S +1034(the)S +1194(group's)S +1537(documentation.)S +2224(All)S +2390(later)S +2605(check-in)S +2986(commands)S +3457(will)S +3651(ask)S +3822(for)S +3976(a)S +4058(log)S +4224(entry,)S +4492(which)S +4773(should)S +2256 V +720(summarize)S +1197(the)S +1358(changes)S +1718(made.)S +2029(\(The)S +2257(\256rst)S +2453(revision)S +2815(is)S +2922(assigned)S +3306(a)S +3390(default)S +3707(log)S +3875(message,)S +4278(which)S +4562(just)S +4747(records)S +2436 V +720(the)S +872(fact)S +1051(that)S +1231(it)S +1317(is)S +1414(the)S +1566(initial)S +1830(revision.\))S +2652 V +970(Files)S +1204(ending)S +1515(in)S +10 I +1632(,v)S +10 R +1740(are)S +1900(called)S +10 I +2177(RCS)S +2394(files)S +10 R +2600(\()S +10 I +2633(v)S +10 R +2716(stands)S +3006(for)S +10 I +3162(v)S +10 R +3206(ersions\);)S +3590(the)S +3752(others)S +4036(are)S +4197(called)S +4475(working)S +4848(\256les.)S +2832 V +720(To)S +861(get)S +1013(back)S +1231(the)S +1383(working)S +1746(\256le)S +10 I +1904(f.c)S +10 R +2031(in)S +2139(the)S +2291(previous)S +2665(example,)S +3058(execute)S +3392(the)S +3544(check-out)S +3967(command:)S +3012 V +10 I +1080(co)S +1234(f.c)S +3252 V +10 R +720(This)S +932(command)S +1360(extracts)S +1704(the)S +1860(latest)S +2105(revision)S +2461(from)S +2689(the)S +2845(revision)S +3201(group)S +10 I +3468(f.c,v)S +10 R +3668(and)S +3846(writes)S +4124(it)S +4214(into)S +10 I +4404(f.c)S +10 R +4501(.)S +4590(The)S +4780(\256le)S +10 I +4943(f.c)S +3432 V +10 R +720(can)S +888(now)S +1090(be)S +1214(edited)S +1488(and,)S +1687(when)S +1933(\256nished,)S +2305(checked)S +2661(back)S +2879(in)S +2987(with)S +10 I +3195(ci)S +10 R +3267(:)S +3612 V +10 I +1080(ci)S +1212(f.c)S +3852 V +720(Ci)S +10 R +845(assigns)S +1164(number)S +1499(1.2)S +1654(to)S +1762(the)S +1914(new)S +2110(revision.)S +2517(If)S +10 I +2613(ci)S +10 R +2715(complains)S +3156(with)S +3364(the)S +3516(message)S +4032 V +10 I +1080(ci)S +1182(error:)S +1456(no)S +1586(lock)S +1782(set)S +1923(by)S +2047()S +4272 V +10 R +720(then)S +922(the)S +1074(system)S +1383(administrator)S +1947(has)S +2111(decided)S +2452(to)S +2561(con\256gure)S +2969(RCS)S +3190(for)S +3337(a)S +3412(production)S +3876(environment)S +4412(by)S +4543(enabling)S +4918(the)S +4452 V +720(`strict)S +993(locking)S +1333(feature'.)S +1736(If)S +1841(this)S +2025(feature)S +2340(is)S +2446(enabled,)S +2820(all)S +2959(RCS)S +3188(\256les)S +3394(are)S +3554(initialized)S +3993(such)S +4215(that)S +4404(check-in)S +4786(opera-)S +4632 V +720(tions)S +959(require)S +1285(a)S +1373(lock)S +1590(on)S +1735(the)S +1902(previous)S +2291(revision)S +2658(\(the)S +2858(one)S +3047(from)S +3286(which)S +3575(the)S +3742(current)S +4069(one)S +4258(evolved\).)S +4707(Locking)S +4812 V +720(prevents)S +1100(overlapping)S +1619(modi\256cations)S +2206(if)S +2309(several)S +2633(people)S +2941(work)S +3188(on)S +3330(the)S +3494(same)S +3740(\256le.)S +3964(If)S +4071(locking)S +4412(is)S +4520(required,)S +4918(the)S +4992 V +720(revision)S +1072(should)S +1369(have)S +1587(been)S +1805(locked)S +2101(during)S +2392(the)S +2544(check-out)S +2967(by)S +3097(using)S +3344(the)S +3496(option)S +10 I +3782(\261l)S +10 R +3860(:)S +5172 V +10 I +1080(co)S +1234(\261l)S +1372(f.c)S +5412 V +10 R +720(Of)S +858(course)S +1151(it)S +1240(is)S +1340(too)S +1501(late)S +1678(now)S +1883(for)S +2032(the)S +2187(check-out)S +2614(with)S +2826(locking,)S +3185(because)S +10 I +3534(f.c)S +10 R +3665(has)S +3832(already)S +4159(been)S +4381(changed;)S +4775(check-)S +5592 V +720(ing)S +880(out)S +1040(the)S +1194(\256le)S +1354(again)S +1602(would)S +1884(overwrite)S +2298(the)S +2452(modi\256cations.)S +3084(\(To)S +3260(prevent)S +3591(accidental)S +4027(overwrites,)S +10 I +4505(co)S +10 R +4631(senses)S +4918(the)S +5772 V +720(presence)S +1111(of)S +1237(a)S +1324(working)S +1700(\256le)S +1871(and)S +2058(asks)S +2273(whether)S +2637(the)S +2803(user)S +3013(really)S +3284(intended)S +3672(to)S +3794(overwrite)S +4220(it.)S +4375(The)S +4574(overwriting)S +5952 V +720(check-out)S +1151(is)S +1256(sometimes)S +1722(useful)S +2004(for)S +2158(backing)S +2512(up)S +2650(to)S +2766(the)S +2926(previous)S +3307(revision.\))S +3754(To)S +3902(be)S +4033(able)S +4236(to)S +4351(proceed)S +4703(with)S +4918(the)S +6132 V +720(check-in)S +1093(in)S +1201(the)S +1353(present)S +1671(case,)S +1897(\256rst)S +2083(execute)S +6312 V +10 I +1080(rcs)S +1262(\261l)S +1400(f.c)S +6552 V +10 R +720(This)S +933(command)S +1363(retroactively)S +1903(locks)S +2150(the)S +2308(latest)S +2555(revision,)S +2938(unless)S +3224(someone)S +3615(else)S +3806(locked)S +4108(it)S +4200(in)S +4314(the)S +4472(meantime.)S +4957(In)S +6732 V +720(this)S +895(case,)S +1121(the)S +1273(two)S +1453(programmers)S +2015(involved)S +2395(have)S +2613(to)S +2721(negotiate)S +3117(whose)S +3402(modi\256cations)S +3977(should)S +4274(take)S +4470(precedence.)S +6948 V +970(If)S +1073(an)S +1204(RCS)S +1431(\256le)S +1596(is)S +1700(private,)S +2039(i.e.,)S +2223(if)S +2321(only)S +2536(the)S +2695(owner)S +2981(of)S +3101(the)S +3260(\256le)S +3426(is)S +3531(expected)S +3923(to)S +4039(deposit)S +4366(revisions)S +4765(into)S +4959(it,)S +7128 V +720(the)S +879(strict)S +1116(locking)S +1453(feature)S +1766(is)S +1870(unnecessary)S +2394(and)S +2575(may)S +2784(be)S +2915(disabled.)S +3340(If)S +3443(strict)S +3680(locking)S +4017(is)S +4120(disabled,)S +4514(the)S +4672(owner)S +4957(of)S +7308 V +720(the)S +884(RCS)S +1117(\256le)S +1288(need)S +1519(not)S +1690(have)S +1921(a)S +2008(lock)S +2223(for)S +2382(check-in.)S +2823(For)S +3005(safety)S +3286(reasons,)S +3653(all)S +3796(others)S +4083(still)S +4277(do.)S +4475(Turning)S +4840(strict)S +7920 V +EP +%%Page: 3 4 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2792(- 3 -)S +900 V +720(locking)S +1050(o)S +1100 H + (f)show 10 -.5 mul h (f)show +10 R +1191(and)S +1365(on)S +1495(is)S +1592(done)S +1816(with)S +2024(the)S +2176(commands:)S +1080 V +10 I +1080(rcs)S +1262(\261U)S +1444(f.c)S +10 R +1751(and)S +10 I +2165(rcs)S +2347(\261L)S +2513(f.c)S +1320 V +10 R +720(These)S +993(commands)S +1461(enable)S +1756(or)S +1875(disable)S +2194(the)S +2352(strict)S +2588(locking)S +2924(feature)S +3236(for)S +3388(each)S +3606(RCS)S +3832(\256le)S +3996(individually.)S +4571(The)S +4762(system)S +1500 V +720(administrator)S +1283(only)S +1491(decides)S +1820(whether)S +2171(strict)S +2401(locking)S +2731(is)S +2828(enabled)S +3168(initially.)S +1716 V +970(To)S +1114(reduce)S +1412(the)S +1567(clutter)S +1855(in)S +1966(a)S +2043(working)S +2409(directory,)S +2827(all)S +2960(RCS)S +3183(\256les)S +3383(can)S +3554(be)S +3681(moved)S +3986(to)S +4097(a)S +4174(subdirectory)S +4706(with)S +4918(the)S +1896 V +720(name)S +10 I +980(RCS)S +10 R +1158(.)S +1257(RCS)S +1491(commands)S +1968(look)S +2190(\256rst)S +2390(into)S +2590(that)S +2784(directory)S +3188(for)S +3348(RCS)S +3581(\256les.)S +3846(All)S +4017(the)S +4182(commands)S +4658(presented)S +2076 V +720(above)S +988(work)S +1223(with)S +1431(the)S +10 I +1583(RCS)S +10 R +1791(subdirectory)S +2320(without)S +2656(change.\262)S +2292 V +970(It)S +1068(may)S +1277(be)S +1408(undesirable)S +1906(that)S +10 I +2094(ci)S +10 R +2204(deletes)S +2519(the)S +2679(working)S +3050(\256le.)S +3271(For)S +3448(instance,)S +3838(sometimes)S +4304(one)S +4486(would)S +4774(like)S +4962(to)S +2472 V +720(save)S +927(the)S +1079(current)S +1391(revision,)S +1768(but)S +1926(continue)S +2300(editing.)S +2663(Invoking)S +2652 V +10 I +1080(ci)S +1212(\261l)S +1350(f.c)S +2892 V +10 R +720(checks)S +1027(in)S +10 I +1141(f.c)S +10 R +1274(as)S +1393(usual,)S +1665(but)S +1829(performs)S +2225(an)S +2355(additional)S +2792(check-out)S +3222(with)S +3437(locking)S +3774(afterwards.)S +4286(Thus,)S +4548(the)S +4707(working)S +3072 V +720(\256le)S +883(does)S +1101(not)S +1264(disappear)S +1681(after)S +1898(the)S +2055(check-in.)S +2488(Similarly,)S +2921(the)S +3078(option)S +10 I +3368(\261u)S +10 R +3502(does)S +3719(a)S +3797(check-in)S +4174(followed)S +4563(by)S +4697(a)S +4775(check-)S +3252 V +720(out)S +885(without)S +1228(locking.)S +1620(This)S +1835(option)S +2128(is)S +2232(useful)S +2513(if)S +2611(the)S +2770(\256le)S +2935(is)S +3039(needed)S +3359(for)S +3513(compilation)S +4029(after)S +4249(the)S +4409(check-in.)S +4845(Both)S +3432 V +720(options)S +1045(update)S +1341(the)S +1493(identi\256cation)S +2051(markers)S +2402(in)S +2510(the)S +2662(working)S +3025(\256le)S +3183(\(see)S +3373(below\).)S +3648 V +970(Besides)S +1311(the)S +1463(operations)S +10 I +1909(ci)S +10 R +2011(and)S +10 I +2185(co)S +10 R +2279(,)S +2334(RCS)S +2554(provides)S +2928(the)S +3080(following)S +3499(commands:)S +3828 V +10 I +720(ident)S +10 R +1241(extract)S +1542(identi\256cation)S +2100(markers)S +3948 V +10 I +720(rcs)S +10 R +1241(change)S +1553(RCS)S +1773(\256le)S +1931(attributes)S +4068 V +10 I +720(rcsclean)S +10 R +1241(remove)S +1570(unchanged)S +2032(working)S +2395(\256les)S +2592(\(optional\))S +4188 V +10 I +720(rcsdiff)S +10 R +1241(compare)S +1614(revisions)S +4308 V +10 I +720(rcsfreeze)S +10 R +1241(record)S +1525(a)S +1599(con\256guration)S +2162(\(optional\))S +4428 V +10 I +720(rcsmerge)S +10 R +1241(merge)S +1520(revisions)S +4548 V +10 I +720(rlog)S +10 R +1241(read)S +1442(log)S +1600(messages)S +2007(and)S +2181(other)S +2416(information)S +2918(in)S +3026(RCS)S +3246(\256les)S +4728 V +720(A)S +822(synopsis)S +1197(of)S +1310(these)S +1545(commands)S +2008(appears)S +2342(in)S +2450(the)S +2602(Appendix.)S +4968 V +10 B +720(2.1.)S +930(Automatic)S +1409(Identi\256cation)S +5124 V +10 R +970(RCS)S +1201(can)S +1381(stamp)S +1662(source)S +1964(and)S +2150(object)S +2436(code)S +2666(with)S +2886(special)S +3205(identi\256cation)S +3775(strings,)S +4109(similar)S +4429(to)S +4549(product)S +4896(and)S +5244 V +720(serial)S +966(numbers.)S +1395(To)S +1536(obtain)S +1816(such)S +2029(identi\256cation,)S +2612(place)S +2852(the)S +3004(marker)S +5424 V +10 I +1080($Id$)S +5664 V +10 R +720(into)S +923(the)S +1092(text)S +1289(of)S +1419(a)S +1510(revision,)S +1904(for)S +2067(instance)S +2441(inside)S +2727(a)S +2818(comment.)S +3292(The)S +3494(check-out)S +3934(operation)S +4358(will)S +4561(replace)S +4895(this)S +5844 V +720(marker)S +1032(with)S +1240(a)S +1314(string)S +1572(of)S +1685(the)S +1837(form)S +6024 V +10 I +1080($Id:)S +1306(filename)S +1710(revisionnumber)S +2397(date)S +2629(time)S +2861(author)S +3188(state)S +3437(locker)S +3716($)S +6264 V +10 R +720(This)S +929(string)S +1188(need)S +1407(never)S +1659(be)S +1784(touched,)S +2156(because)S +10 I +2502(co)S +10 R +2627(keeps)S +2885(it)S +2972(up)S +3103(to)S +3212(date)S +3409(automatically.)S +4039(To)S +4181(propagate)S +4605(the)S +4758(marker)S +6444 V +720(into)S +906(object)S +1180(code,)S +1423(simply)S +1726(put)S +1884(it)S +1970(into)S +2156(a)S +2230(literal)S +2493(character)S +2887(string.)S +3200(In)S +3313(C,)S +3435(this)S +3610(is)S +3707(done)S +3931(as)S +4044(follows:)S +6702 V +8 Y1 +720(333333333333333333)S +6820 V +8 R +820(\262)S +900(Pairs)S +1088(of)S +1184(RCS)S +1367(and)S +1512(working)S +1808(\256les)S +1971(can)S +2111(actually)S +2392(be)S +2497(speci\256ed)S +2810(in)S +2902(3)S +2972(ways:)S +3188(a\))S +3279(both)S +3451(are)S +3577(given,)S +3804(b\))S +3900(only)S +4072(the)S +4199(working)S +4495(\256le)S +4627(is)S +6920 V +720(given,)S +945(c\))S +1034(only)S +1204(the)S +1329(RCS)S +1510(\256le)S +1640(is)S +1721(given.)S +1970(If)S +2050(a)S +2113(pair)S +2264(is)S +2345(given,)S +2570(both)S +2740(\256les)S +2900(may)S +3064(have)S +3241(arbitrary)S +3540(path)S +3704(pre\256xes;)S +4005(RCS)S +4185(commands)S +4557(pair)S +7020 V +720(them)S +903(up)S +1007(intelligently.)S +7920 V +EP +%%Page: 4 5 +BP +/slant 0 def +/height 1.000000 def +8 R +8 R +40 V +10 R +0(-)S +520 V +2792(- 4 -)S +900 V +10 I +1080(static)S +1327(char)S +1540(rcsid[])S +1848(=)S +1946("$Id$";)S +1140 V +10 R +720(The)S +914(command)S +10 I +1347(ident)S +10 R +1586(extracts)S +1935(such)S +2157(markers)S +2517(from)S +2750(any)S +2933(\256le,)S +3125(in)S +3243(particular)S +3665(from)S +3899(object)S +4183(code.)S +10 I +4466(Ident)S +10 R +4711(helps)S +4962(to)S +1320 V +720(\256nd)S +921(out)S +1094(which)S +1383(revisions)S +1789(of)S +1917(which)S +2206(modules)S +2590(were)S +2828(used)S +3056(in)S +3179(a)S +3268(given)S +3535(program.)S +3972(It)S +4077(returns)S +4398(a)S +4486(complete)S +4896(and)S +1500 V +720(unambiguous)S +1300(component)S +1785(list,)S +1974(from)S +2209(which)S +2494(a)S +2579(copy)S +2814(of)S +2938(the)S +3101(program)S +3480(can)S +3659(be)S +3794(reconstructed.)S +4428(This)S +4648(facility)S +4973(is)S +1680 V +720(invaluable)S +1166(for)S +1312(program)S +1680(maintenance.)S +1896 V +970(There)S +1232(are)S +1383(several)S +1695(additional)S +2125(identi\256cation)S +2683(markers,)S +3059(one)S +3233(for)S +3379(each)S +3591(component)S +4065(of)S +4178($Id$.)S +4446(The)S +4631(marker)S +2076 V +10 I +1080($Log$)S +2316 V +10 R +720(has)S +894(a)S +979(similar)S +1298(function.)S +1727(It)S +1829(accumulates)S +2363(the)S +2526(log)S +2695(messages)S +3113(that)S +3304(are)S +3466(requested)S +3889(during)S +4191(check-in.)S +4630(Thus,)S +4896(one)S +2496 V +720(can)S +891(maintain)S +1274(the)S +1429(complete)S +1828(history)S +2139(of)S +2255(a)S +2332(revision)S +2687(directly)S +3025(inside)S +3297(it,)S +3411(by)S +3544(enclosing)S +3960(it)S +4049(in)S +4160(a)S +4237(comment.)S +4697(Figure)S +4990(1)S +2676 V +720(is)S +822(a)S +901(partial)S +1191(reproduction)S +1736(of)S +1854(a)S +1933(log)S +2096(contained)S +2519(in)S +2632(revision)S +2990(4.1)S +3151(of)S +3270(the)S +3428(\256le)S +10 I +3592(ci.c)S +10 R +3733(.)S +3824(The)S +4015(log)S +4179(appears)S +4519(at)S +4627(the)S +4785(begin-)S +2856 V +720(ning)S +928(of)S +1041(the)S +1193(\256le,)S +1376(and)S +1550(makes)S +1835(it)S +1921(easy)S +2128(to)S +2236(determine)S +2665(what)S +2889(the)S +3041(recent)S +3314(modi\256cations)S +3889(were.)S +3156 V +1080(/*)S +1188($Log:)S +1457(ci.c,v)S +1703($)S +3276 V +1110(*)S +1190(Revision)S +1576(4.1)S +1761(1983/05/10)S +2277(17:03:06)S +2693(wft)S +3396 V +1110(*)S +1190(Added)S +1486(option)S +1772(\261d)S +1902(and)S +2076(\261w,)S +2253(and)S +2427(updated)S +2773(assignment)S +3253(of)S +3366(date,)S +3587(etc.)S +3758(to)S +3866(new)S +4062(delta.)S +3516 V +1110(*)S +1190(Added)S +1486(handling)S +1866(of)S +1979(default)S +2286(branches.)S +3636 V +1110(*)S +3756 V +1110(*)S +1190(Revision)S +1576(3.9)S +1761(1983/02/15)S +2277(15:25:44)S +2693(wft)S +3876 V +1110(*)S +1190(Added)S +1486(call)S +1660(to)S +1768(fastcopy\(\))S +2202(to)S +2310(copy)S +2534(remainder)S +2968(of)S +3081(RCS)S +3301(\256le.)S +3996 V +1110(*)S +4116 V +1110(*)S +1190(Revision)S +1576(3.8)S +1761(1983/01/14)S +2277(15:34:05)S +2693(wft)S +4236 V +1110(*)S +1190(Added)S +1486(ignoring)S +1855(of)S +1968(interrupts)S +2381(while)S +2633(new)S +2829(RCS)S +3049(\256le)S +3207(is)S +3304(renamed;)S +4356 V +1110(*)S +1190(avoids)S +1481(deletion)S +1833(of)S +1946(RCS)S +2166(\256les)S +2363(by)S +2493(interrupts.)S +4476 V +1110(*)S +4596 V +1110(*)S +1190(Revision)S +1576(3.7)S +1761(1982/12/10)S +2277(16:09:20)S +2693(wft)S +4716 V +1110(*)S +1190(Corrected)S +1613(checking)S +2003(of)S +2116(return)S +2384(code)S +2602(from)S +2826(di)S +2904 H + (f)show 10 -.5 mul h (f)show +10 R +2965(.)S +4836 V +1110(*)S +1190(An)S +1342(RCS)S +1562(\256le)S +1720(now)S +1922(inherits)S +2252(its)S +2377(mode)S +2629(during)S +2920(the)S +3072(\256rst)S +3258(ci)S +3360(from)S +3584(the)S +3736(working)S +4099(\256le,)S +4956 V +1110(*)S +1190(except)S +1480(that)S +1660(write)S +1895(permission)S +2364(is)S +2461(removed.)S +5076 V +1110(*/)S +5196 V +1783(Figure)S +2074(1.)S +2209(Log)S +2400(entries)S +2696(produced)S +3097(by)S +3227(the)S +3379(marker)S +3691($Log$.)S +5412 V +720(Since)S +973(revisions)S +1365(are)S +1517(stored)S +1792(in)S +1901(the)S +2054(form)S +2279(of)S +2393(di)S +2471 H + (f)show 10 -.5 mul h (f)show +10 R +2532(erences,)S +2886(each)S +3099(log)S +3258(message)S +3628(is)S +3727(physically)S +4170(stored)S +4446(once,)S +4691(indepen-)S +5592 V +720(dent)S +922(of)S +1035(the)S +1187(number)S +1522(of)S +1635(revisions)S +2026(present.)S +2399(Thus,)S +2654(the)S +2806($Log$)S +3097(marker)S +3409(incurs)S +3683(negligible)S +4113(space)S +4364(overhead.)S +5952 V +10 B +720(3.)S +855(The)S +1052(RCS)S +1282(Revision)S +1679(Tree)S +6168 V +10 R +970(RCS)S +1198(arranges)S +1573(revisions)S +1972(in)S +2089(an)S +2222(ancestral)S +2615(tree.)S +2858(The)S +10 I +3052(ci)S +10 R +3163(command)S +3596(builds)S +3880(this)S +4064(tree;)S +4280(the)S +4441(auxiliary)S +4835(com-)S +6348 V +720(mand)S +10 I +983(rcs)S +10 R +1146(prunes)S +1453(it.)S +1605(The)S +1801(tree)S +1991(has)S +2165(a)S +2250(root)S +2452(revision,)S +2840(normally)S +3242(numbered)S +3682(1.1,)S +3873(and)S +4057(successive)S +4518(revisions)S +4919(are)S +6528 V +720(numbered)S +1154(1.2,)S +1339(1.3,)S +1524(etc.)S +1730(The)S +1921(\256rst)S +2113(\256eld)S +2327(of)S +2446(a)S +2526(revision)S +2884(number)S +3225(is)S +3328(called)S +3602(the)S +10 I +3760(release)S +4084(number)S +10 R +4425(and)S +4605(the)S +4763(second)S +6708 V +720(one)S +900(the)S +10 I +1058(level)S +1282(number)S +10 R +1587(.)S +1677(Unless)S +1984(given)S +2241(explicitly,)S +2679(the)S +10 I +2836(ci)S +10 R +2943(command)S +3372(assigns)S +3696(a)S +3775(new)S +3976(revision)S +4333(number)S +4673(by)S +4808(incre-)S +6888 V +720(menting)S +1085(the)S +1244(level)S +1475(number)S +1817(of)S +1937(the)S +2096(previous)S +2477(revision.)S +2891(The)S +3084(release)S +3398(number)S +3741(must)S +3974(be)S +4106(incremented)S +4637(explicitly,)S +7068 V +720(using)S +974(the)S +10 I +1133(\261r)S +10 R +1259(option)S +1551(of)S +10 I +1670(ci)S +10 R +1742(.)S +1833(Assuming)S +2275(there)S +2510(are)S +2667(revisions)S +3064(1.1,)S +3250(1.2,)S +3436(and)S +3616(1.3)S +3777(in)S +3891(the)S +4049(RCS)S +4275(\256le)S +4439(f.c,v,)S +4677(the)S +4835(com-)S +7248 V +720(mand)S +7920 V +EP +%%Page: 5 6 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2792(- 5 -)S +900 V +10 I +1080(ci)S +1212(\261r2.1)S +1486(f.c)S +10 R +1793(or)S +10 I +2086(ci)S +2218(\261r2)S +2417(f.c)S +1140 V +10 R +720(assigns)S +1061(the)S +1235(number)S +1592(2.1)S +1769(to)S +1899(the)S +2074(new)S +2293(revision.)S +2723(Later)S +2986(check-ins)S +3421(without)S +3780(the)S +10 I +3955(\261r)S +10 R +4097(option)S +4406(will)S +4615(assign)S +4918(the)S +1320 V +720(numbers)S +1095(2.2,)S +1276(2.3,)S +1457(and)S +1632(so)S +1751(on.)S +1936(The)S +2121(release)S +2427(number)S +2762(should)S +3059(be)S +3183(incremented)S +3706(only)S +3914(at)S +4016(major)S +4279(transition)S +4687(points)S +4962(in)S +1500 V +720(the)S +872(development,)S +1443(for)S +1589(instance)S +1946(when)S +2192(a)S +2266(new)S +2462(release)S +2768(of)S +2881(a)S +2955(software)S +3328(product)S +3663(has)S +3826(been)S +4044(completed.)S +1860 V +10 B +720(3.1.)S +930(When)S +1216(are)S +1384(branches)S +1803(needed?)S +2076 V +10 R +970(A)S +1075(young)S +1358(revision)S +1713(tree)S +1895(is)S +1995(slender:)S +2344(It)S +2438(consists)S +2789(of)S +2906(only)S +3118(one)S +3296(branch,)S +3626(called)S +3898(the)S +4054(trunk.)S +4354(As)S +4499(the)S +4655(tree)S +4838(ages,)S +2256 V +720(side)S +911(branches)S +1295(may)S +1497(form.)S +1776(Branches)S +2177(are)S +2328(needed)S +2640(in)S +2748(the)S +2900(following)S +3319(4)S +3399(situations.)S +2472 V +10 I +720(Temporary)S +1194(fixes)S +2652 V +10 R +970(Suppose)S +1346(a)S +1427(tree)S +1614(has)S +1785(5)S +1873(revisions)S +2272(grouped)S +2637(in)S +2753(2)S +2841(releases,)S +3219(as)S +3340(illustrated)S +3778(in)S +3894(Figure)S +4193(2.)S +4336(Revision)S +4730(1.3,)S +4918(the)S +2832 V +970(last)S +1139(one)S +1313(of)S +1426(release)S +1732(1,)S +1837(is)S +1934(in)S +2042(operation)S +2449(at)S +2551(customer)S +2947(sites,)S +3180(while)S +3432(release)S +3738(2)S +3818(is)S +3915(in)S +4023(active)S +4291(development.)S +3143 V +8 R +2532(1.1)S +3242 V +2410 H +2410 3012 lc +2410 3012 mc +2410 H +2755 3012 lc +2755 3012 mc +2755 H +2755 3242 lc +2755 3242 mc +2755 H +2410 3242 lc +2410 3242 mc +3127 V +2755 H +2985 3127 lc +2985 3127 mc +3138 V +2939 H +2985 3127 lc +2985 3127 mc +3115 V +2939 H +2985 3126 lc +2985 3126 mc +3143 V +3108(1.2)S +3242 V +2986 H +2986 3012 lc +2986 3012 mc +2986 H +3331 3012 lc +3331 3012 mc +3331 H +3331 3242 lc +3331 3242 mc +3331 H +2986 3242 lc +2986 3242 mc +3127 V +3331 H +3561 3127 lc +3561 3127 mc +3138 V +3515 H +3561 3127 lc +3561 3127 mc +3115 V +3515 H +3561 3126 lc +3561 3126 mc +3143 V +3684(1.3)S +3242 V +3562 H +3562 3012 lc +3562 3012 mc +3562 H +3907 3012 lc +3907 3012 mc +3907 H +3907 3242 lc +3907 3242 mc +3907 H +3562 3242 lc +3562 3242 mc +3127 V +3907 H +4137 3127 lc +4137 3127 mc +3138 V +4091 H +4137 3127 lc +4137 3127 mc +3115 V +4091 H +4137 3126 lc +4137 3126 mc +3143 V +4260(2.1)S +3242 V +4138 H +4138 3012 lc +4138 3012 mc +4138 H +4483 3012 lc +4483 3012 mc +4483 H +4483 3242 lc +4483 3242 mc +4483 H +4138 3242 lc +4138 3242 mc +3127 V +4483 H +4713 3127 lc +4713 3127 mc +3138 V +4667 H +4713 3127 lc +4713 3127 mc +3115 V +4667 H +4713 3126 lc +4713 3126 mc +3143 V +4836(2.2)S +3242 V +4714 H +4714 3012 lc +4714 3012 mc +4714 H +5059 3012 lc +5059 3012 mc +5059 H +5059 3242 lc +5059 3242 mc +5059 H +4714 3242 lc +4714 3242 mc +3127 V +5059 H +5082 3127 lc +5082 3127 mc +5111 H +5134 3127 lc +5134 3127 mc +5163 H +5186 3127 lc +5186 3127 mc +5215 H +5238 3127 lc +5238 3127 mc +5266 H +5289 3127 lc +5289 3127 mc +3138 V +5243 H +5289 3127 lc +5289 3127 mc +3115 V +5243 H +5289 3126 lc +5289 3126 mc +3422 V +10 R +2319(Figure)S +2610(2.)S +2745(A)S +2847(slender)S +3165(revision)S +3517(tree.)S +3602 V +970(Now)S +1194(imagine)S +1547(a)S +1622(customer)S +2019(requesting)S +2466(a)S +2541(\256x)S +2678(of)S +2792(a)S +2867(problem)S +3231(in)S +3340(revision)S +3693(1.3,)S +3874(although)S +4255(actual)S +4524(development)S +3782 V +970(has)S +1135(moved)S +1439(on)S +1571(to)S +1681(release)S +1989(2.)S +2126(RCS)S +2347(does)S +2561(not)S +2720(permit)S +3012(an)S +3137(extra)S +3367(revision)S +3720(to)S +3829(be)S +3954(spliced)S +4268(in)S +4377(between)S +4740(1.3)S +4896(and)S +3962 V +970(2.1,)S +1151(since)S +1387(that)S +1568(would)S +1849(not)S +2008(re\257ect)S +2288(the)S +2441(actual)S +2710(development)S +3257(history.)S +3621(Instead,)S +3966(create)S +4235(a)S +4311(branch)S +4614(at)S +4718(revision)S +4142 V +970(1.3,)S +1155(and)S +1334(check)S +1601(in)S +1714(the)S +1871(\256x)S +2012(on)S +2147(that)S +2332(branch.)S +2692(The)S +2881(\256rst)S +3071(branch)S +3376(starting)S +3710(at)S +3816(1.3)S +3975(has)S +4142(number)S +4481(1.3.1,)S +4740(and)S +4918(the)S +4322 V +970(revisions)S +1374(on)S +1517(that)S +1710(branch)S +2024(are)S +2188(numbered)S +2630(1.3.1.1,)S +2974(1.3.1.2,)S +3318(etc.)S +3533(The)S +3732(double)S +4048(numbering)S +4525(is)S +4636(needed)S +4962(to)S +4502 V +970(allow)S +1235(for)S +1394(another)S +1736(branch)S +2050(at)S +2165(1.3,)S +2358(say)S +2534(1.3.2.)S +2832(Revisions)S +3270(on)S +3413(the)S +3578(second)S +3898(branch)S +4212(would)S +4505(be)S +4641(numbered)S +4682 V +970(1.3.2.1,)S +1300(1.3.2.2,)S +1630(and)S +1804(so)S +1923(on.)S +2108(The)S +2293(following)S +2712(steps)S +2942(create)S +3209(branch)S +3510(1.3.1)S +3740(and)S +3914(add)S +4088(revision)S +4440(1.3.1.1:)S +4862 V +10 I +1270(co)S +1424(\261r1.3)S +1698(f.c)S +2028(\320)S +2147(check)S +2403(out)S +2561(revision)S +2913(1.3)S +4982 V +1270(edit)S +1480(f.c)S +2028(\320)S +2147(change)S +2465(it)S +5102 V +1270(ci)S +1402(\261r1.3.1)S +1751(f.c)S +2028(\320)S +2147(check)S +2403(it)S +2489(in)S +2597(on)S +2727(branch)S +3040(1.3.1)S +5342 V +10 R +970(This)S +1184(sequence)S +1585(of)S +1704(commands)S +2173(transforms)S +2636(the)S +2794(tree)S +2979(of)S +3098(Figure)S +3395(2)S +3481(into)S +3673(the)S +3831(one)S +4011(in)S +4126(Figure)S +4424(3.)S +4566(Note)S +4797(that)S +4984(it)S +5522 V +970(may)S +1179(be)S +1310(necessary)S +1734(to)S +1849(incorporate)S +2340(the)S +2499(di)S +2577 H + (f)show 10 -.5 mul h (f)show +10 R +2638(erences)S +2973(between)S +3342(1.3)S +3504(and)S +3685(1.3.1.1)S +3997(into)S +4189(a)S +4269(revision)S +4627(at)S +4735(level)S +4965(2.)S +5702 V +970(The)S +1155(operation)S +10 I +1562(rcsmerge)S +10 R +1963(automates)S +2398(this)S +2573(process)S +2902(\(see)S +3092(the)S +3244(Appendix\).)S +6013 V +8 R +2532(1.1)S +6112 V +2410 H +2410 5882 lc +2410 5882 mc +2410 H +2755 5882 lc +2755 5882 mc +2755 H +2755 6112 lc +2755 6112 mc +2755 H +2410 6112 lc +2410 6112 mc +5997 V +2755 H +2985 5997 lc +2985 5997 mc +6008 V +2939 H +2985 5997 lc +2985 5997 mc +5985 V +2939 H +2985 5996 lc +2985 5996 mc +6013 V +3108(1.2)S +6112 V +2986 H +2986 5882 lc +2986 5882 mc +2986 H +3331 5882 lc +3331 5882 mc +3331 H +3331 6112 lc +3331 6112 mc +3331 H +2986 6112 lc +2986 6112 mc +5997 V +3331 H +3561 5997 lc +3561 5997 mc +6008 V +3515 H +3561 5997 lc +3561 5997 mc +5985 V +3515 H +3561 5996 lc +3561 5996 mc +6013 V +3684(1.3)S +6112 V +3562 H +3562 5882 lc +3562 5882 mc +3562 H +3907 5882 lc +3907 5882 mc +3907 H +3907 6112 lc +3907 6112 mc +3907 H +3562 6112 lc +3562 6112 mc +5997 V +3907 H +4137 5997 lc +4137 5997 mc +6008 V +4091 H +4137 5997 lc +4137 5997 mc +5985 V +4091 H +4137 5996 lc +4137 5996 mc +6013 V +4260(2.1)S +6112 V +4138 H +4138 5882 lc +4138 5882 mc +4138 H +4483 5882 lc +4483 5882 mc +4483 H +4483 6112 lc +4483 6112 mc +4483 H +4138 6112 lc +4138 6112 mc +5997 V +4483 H +4713 5997 lc +4713 5997 mc +6008 V +4667 H +4713 5997 lc +4713 5997 mc +5985 V +4667 H +4713 5996 lc +4713 5996 mc +6013 V +4836(2.2)S +6112 V +4714 H +4714 5882 lc +4714 5882 mc +4714 H +5059 5882 lc +5059 5882 mc +5059 H +5059 6112 lc +5059 6112 mc +5059 H +4714 6112 lc +4714 6112 mc +5997 V +5059 H +5082 5997 lc +5082 5997 mc +5111 H +5134 5997 lc +5134 5997 mc +5163 H +5186 5997 lc +5186 5997 mc +5215 H +5238 5997 lc +5238 5997 mc +5266 H +5289 5997 lc +5289 5997 mc +6008 V +5243 H +5289 5997 lc +5289 5997 mc +5985 V +5243 H +5289 5996 lc +5289 5996 mc +6474 V +4200(1.3.1.1)S +6573 V +4138 H +4138 6343 lc +4138 6343 mc +6342 V +4138 H +4483 6342 lc +4483 6342 mc +4483 H +4483 6572 lc +4483 6572 mc +6573 V +4483 H +4138 6573 lc +4138 6573 mc +6458 V +4483 H +4506 6458 lc +4506 6458 mc +4535 H +4558 6458 lc +4558 6458 mc +4587 H +4610 6458 lc +4610 6458 mc +4639 H +4662 6458 lc +4662 6458 mc +4690 H +4713 6458 lc +4713 6458 mc +6469 V +4667 H +4713 6458 lc +4713 6458 mc +6446 V +4667 H +4713 6457 lc +4713 6457 mc +6112 V +3734 H +4137 6457 lc +4137 6457 mc +6436 V +4095 H +4137 6457 lc +4137 6457 mc +6419 V +4110 H +4137 6457 lc +4137 6457 mc +6753 V +10 R +2053(Figure)S +2344(3.)S +2479(A)S +2581(revision)S +2933(tree)S +3112(with)S +3320(one)S +3494(side)S +3685(branch)S +7149 V +10 I +720(Distributed)S +1206(development)S +1740(and)S +1920(customer)S +2316(modifications)S +7329 V +10 R +970(Assume)S +1337(a)S +1426(situation)S +1816(as)S +1944(in)S +2067(Figure)S +2373(2,)S +2493(where)S +2781(revision)S +3148(1.3)S +3319(is)S +3432(in)S +3556(operation)S +3979(at)S +4097(several)S +4425(customer)S +4837(sites,)S +7920 V +EP +%%Page: 6 7 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2792(- 6 -)S +900 V +970(while)S +1223(release)S +1530(2)S +1611(is)S +1709(in)S +1818(development.)S +2420(Customer)S +2840(sites)S +3049(should)S +3347(use)S +3510(RCS)S +3730(to)S +3838(store)S +4062(the)S +4214(distributed)S +4672(software.)S +1080 V +970(However,)S +1413(customer)S +1832(modi\256cations)S +2430(should)S +2750(not)S +2931(be)S +3078(placed)S +3391(on)S +3544(the)S +3719(same)S +3977(branch)S +4301(as)S +4437(the)S +4612(distributed)S +1260 V +970(source;)S +1309(instead,)S +1668(they)S +1891(should)S +2209(be)S +2354(placed)S +2665(on)S +2816(a)S +2911(side)S +3123(branch.)S +3500(When)S +3789(the)S +3962(next)S +4185(software)S +4578(distribution)S +1440 V +970(arrives,)S +1303(it)S +1396(should)S +1700(be)S +1831(appended)S +2250(to)S +2365(the)S +2524(trunk)S +2772(of)S +2892(the)S +3051(customer's)S +3527(RCS)S +3755(\256le,)S +3946(and)S +4128(the)S +4288(customer)S +4692(can)S +4868(then)S +1620 V +970(merge)S +1254(the)S +1411(local)S +1640(modi\256cations)S +2220(back)S +2443(into)S +2634(the)S +2791(new)S +2992(release.)S +3358(In)S +3475(the)S +3631(above)S +3903(example,)S +4300(a)S +4378(customer's)S +4850(RCS)S +1800 V +970(\256le)S +1134(would)S +1421(contain)S +1752(the)S +1911(following)S +2337(tree,)S +2548(assuming)S +2963(that)S +3150(the)S +3309(customer)S +3712(has)S +3882(received)S +4256(revision)S +4615(1.3,)S +4802(added)S +1980 V +970(his)S +1124(local)S +1355(modi\256cations)S +1937(as)S +2057(revision)S +2416(1.3.1.1,)S +2753(then)S +2962(received)S +3336(revision)S +3695(2.4,)S +3882(and)S +4063(merged)S +4399(2.4)S +4560(and)S +4740(1.3.1.1,)S +2160 V +970(resulting)S +1350(in)S +1458(2.4.1.1.)S +2471 V +8 R +2532(1.3)S +2570 V +2410 H +2410 2340 lc +2410 2340 mc +2410 H +2755 2340 lc +2755 2340 mc +2755 H +2755 2570 lc +2755 2570 mc +2755 H +2410 2570 lc +2410 2570 mc +2471 V +4260(2.4)S +2570 V +4138 H +4138 2340 lc +4138 2340 mc +4138 H +4483 2340 lc +4483 2340 mc +4483 H +4483 2570 lc +4483 2570 mc +4483 H +4138 2570 lc +4138 2570 mc +2455 V +2755 H +4137 2455 lc +4137 2455 mc +2466 V +4091 H +4137 2455 lc +4137 2455 mc +2443 V +4091 H +4137 2454 lc +4137 2454 mc +2932 V +3048(1.3.1.1)S +3031 V +2986 H +2986 2801 lc +2986 2801 mc +2800 V +2986 H +3331 2800 lc +3331 2800 mc +3331 H +3331 3030 lc +3331 3030 mc +3031 V +3331 H +2986 3031 lc +2986 3031 mc +2570 V +2582 H +2985 2915 lc +2985 2915 mc +2894 V +2943 H +2985 2915 lc +2985 2915 mc +2877 V +2958 H +2985 2915 lc +2985 2915 mc +2932 V +4776(2.4.1.1)S +3031 V +4714 H +4714 2801 lc +4714 2801 mc +2800 V +4714 H +5059 2800 lc +5059 2800 mc +5059 H +5059 3030 lc +5059 3030 mc +3031 V +5059 H +4714 3031 lc +4714 3031 mc +2570 V +4310 H +4713 2915 lc +4713 2915 mc +2894 V +4671 H +4713 2915 lc +4713 2915 mc +2877 V +4686 H +4713 2915 lc +4713 2915 mc +3211 V +10 R +1740(Figure)S +2031(4.)S +2166(A)S +2268(customer's)S +2736(revision)S +3088(tree)S +3267(with)S +3475(local)S +3699(modi\256cations.)S +3571 V +970(This)S +1178(approach)S +1573(is)S +1670(actually)S +2016(practiced)S +2411(in)S +2519(the)S +2671(CSNET)S +3018(project,)S +3350(where)S +3623(several)S +3935(universities)S +4426(and)S +4600(a)S +4674(company)S +3751 V +970(cooperate)S +1387(in)S +1495(developing)S +1969(a)S +2043(national)S +2395(computer)S +2802(network.)S +3967 V +10 I +720(Parallel)S +1078(development)S +4147 V +10 R +970(Sometimes)S +1451(it)S +1543(is)S +1646(desirable)S +2042(to)S +2156(explore)S +2491(an)S +2621(alternate)S +3000(design)S +3297(or)S +3416(a)S +3497(di)S +3575 H + (f)show 10 -.5 mul h (f)show +10 R +3636(erent)S +3872(implementation)S +4537(technique)S +4962(in)S +4327 V +970(parallel)S +1301(with)S +1511(the)S +1665(main)S +1896(line)S +2077(development.)S +2679(Such)S +2910(development)S +3457(should)S +3755(be)S +3880(carried)S +4187(out)S +4346(on)S +4477(a)S +4552(side)S +4744(branch.)S +4507 V +970(The)S +1155(experimental)S +1706(changes)S +2057(may)S +2259(later)S +2466(be)S +2590(moved)S +2892(into)S +3078(the)S +3230(main)S +3460(line,)S +3665(or)S +3778(abandoned.)S +4723 V +10 I +720(Conflicting)S +1201(updates)S +4903 V +10 R +970(A)S +1075(common)S +1458(occurrence)S +1927(is)S +2027(that)S +2210(one)S +2387(programmer)S +2913(has)S +3079(checked)S +3438(out)S +3599(a)S +3676(revision,)S +4056(but)S +4218(cannot)S +4518(complete)S +4918(the)S +5083 V +970(assignment)S +1459(for)S +1614(some)S +1864(reason.)S +2218(In)S +2340(the)S +2501(meantime,)S +2959(another)S +3297(person)S +3602(must)S +3836(perform)S +4196(another)S +4534(modi\256cation)S +5263 V +970(immediately.)S +1565(In)S +1689(that)S +1880(case,)S +2117(the)S +2280(second)S +2598(person)S +2905(should)S +3213(check-out)S +3647(the)S +3810(same)S +4056(revision,)S +4444(modify)S +4774(it,)S +4896(and)S +5443 V +970(check)S +1232(it)S +1318(in)S +1426(on)S +1556(a)S +1630(side)S +1821(branch,)S +2147(for)S +2293(later)S +2500(merging.)S +5659 V +970(Every)S +1238(node)S +1462(in)S +1570(a)S +1644(revision)S +1996(tree)S +2175(consists)S +2522(of)S +2635(the)S +2787(following)S +3206(attributes:)S +3636(a)S +3711(revision)S +4064(number,)S +4425(a)S +4500(check-in)S +4874(date)S +5839 V +720(and)S +896(time,)S +1131(the)S +1285(author's)S +1644(identi\256cation,)S +2229(a)S +2305(log)S +2465(entry,)S +2727(a)S +2803(state)S +3018(and)S +3194(the)S +3348(actual)S +3618(text.)S +3855(All)S +4015(these)S +4252(attributes)S +4656(are)S +4808(deter-)S +6019 V +720(mined)S +1000(at)S +1102(the)S +1254(time)S +1462(the)S +1614(revision)S +1966(is)S +2063(checked)S +2419(in.)S +2582(The)S +2767(state)S +2980(attribute)S +3344(indicates)S +3730(the)S +3883(status)S +4142(of)S +4256(a)S +4331(revision.)S +4739(It)S +4831(is)S +4929(set)S +6199 V +720(automatically)S +1299(to)S +1412(`experimental')S +2034(during)S +2330(check-in.)S +2763(A)S +2870(revision)S +3227(can)S +3400(later)S +3612(be)S +3741(promoted)S +4158(to)S +4270(a)S +4348(higher)S +4637(status,)S +4924(for)S +6379 V +720(example)S +1088(`stable')S +1417(or)S +1530(`released'.)S +2007(The)S +2192(set)S +2333(of)S +2446(states)S +2698(is)S +2795(user-de\256ned.)S +6739 V +10 B +720(3.2.)S +930(Revisions)S +1366(are)S +1534(represented)S +2068(as)S +2187(deltas)S +6955 V +10 R +970(For)S +1145(conserving)S +1619(space,)S +1901(RCS)S +2127(stores)S +2396(revisions)S +2793(in)S +2907(the)S +3065(form)S +3295(of)S +3414(deltas,)S +3708(i.e.,)S +3891(as)S +4010(di)S +4088 H + (f)show 10 -.5 mul h (f)show +10 R +4149(erences)S +4483(between)S +4852(revi-)S +7135 V +720(sions.)S +1011(The)S +1196(user)S +1392(interface)S +1770(completely)S +2244(hides)S +2485(this)S +2660(fact.)S +7920 V +EP +%%Page: 7 8 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2792(- 7 -)S +900 V +970(A)S +1096(delta)S +1344(is)S +1465(a)S +1563(sequence)S +1982(of)S +2119(edit)S +2323(commands)S +2810(that)S +3014(transforms)S +3495(one)S +3694(string)S +3977(into)S +4188(another.)S +4597(The)S +4807(deltas)S +1080 V +720(employed)S +1156(by)S +1298(RCS)S +1529(are)S +1691(line-based,)S +2167(which)S +2452(means)S +2748(that)S +2939(the)S +3102(only)S +3321(edit)S +3512(commands)S +3986(allowed)S +4343(are)S +4505(insertion)S +4896(and)S +1260 V +720(deletion)S +1091(of)S +1223(lines.)S +1516(If)S +1631(a)S +1724(single)S +2012(character)S +2425(in)S +2552(a)S +2646(line)S +2846(is)S +2963(changed,)S +3370(the)S +3542(edit)S +3742(scripts)S +4053(consider)S +4441(the)S +4613(entire)S +4890(line)S +1440 V +720(changed.)S +1145(The)S +1337(program)S +10 I +1712(diff)S +1390 V +10 R +1846(2)S +1440 V +1933(produces)S +2330(a)S +2411(small,)S +2690(line-based)S +3137(delta)S +3368(between)S +3737(pairs)S +3968(of)S +4088(text)S +4275(\256les.)S +4534(A)S +4643(character-)S +1620 V +720(based)S +977(edit)S +1157(script)S +1409(would)S +1689(take)S +1885(much)S +2137(longer)S +2422(to)S +2530(compute,)S +2929(and)S +3103(would)S +3383(not)S +3541(be)S +3665(signi\256cantly)S +4190(shorter.)S +1836 V +970(Using)S +1259(deltas)S +1542(is)S +1659(a)S +1753(classical)S +2141(space-time)S +2623(tradeo)S +2872 H + (f)show 10 -.5 mul h (f)show +10 R +2933(:)S +3011(deltas)S +3294(reduce)S +3609(the)S +3782(space)S +4054(consumed,)S +4535(but)S +4714(increase)S +2016 V +720(access)S +1012(time.)S +1283(However,)S +1711(a)S +1793(version)S +2124(control)S +2444(tool)S +2637(should)S +2941(impose)S +3267(as)S +3387(little)S +3608(delay)S +3861(as)S +3981(possible)S +4346(on)S +4483(programmers.)S +2196 V +720(Excessive)S +1163(delays)S +1462(discourage)S +1938(the)S +2104(use)S +2281(of)S +2408(version)S +2746(controls,)S +3137(or)S +3264(induce)S +3574(programmers)S +4150(to)S +4273(take)S +4484(shortcuts)S +4890(that)S +2376 V +720(compromise)S +1252(system)S +1568(integrity.)S +2000(To)S +2149(gain)S +2359(reasonably)S +2829(fast)S +3011(access)S +3303(time)S +3518(for)S +3671(both)S +3886(editing)S +4201(and)S +4382(compiling,)S +4850(RCS)S +2556 V +720(arranges)S +1096(deltas)S +1368(in)S +1485(the)S +1646(following)S +2074(way.)S +2334(The)S +2528(most)S +2762(recent)S +3044(revision)S +3406(on)S +3546(the)S +3708(trunk)S +3959(is)S +4066(stored)S +4350(intact.)S +4667(All)S +4835(other)S +2736 V +720(revisions)S +1117(on)S +1253(the)S +1411(trunk)S +1658(are)S +1815(stored)S +2095(as)S +2214(reverse)S +2537(deltas.)S +2861(A)S +2969(reverse)S +3292(delta)S +3522(describes)S +3928(how)S +4135(to)S +4248(go)S +4383(backward)S +4805(in)S +4918(the)S +2916 V +720(development)S +1277(history:)S +1624(it)S +1721(produces)S +2122(the)S +2285(desired)S +2615(revision)S +2979(if)S +3082(applied)S +3418(to)S +3538(the)S +3702(successor)S +4126(of)S +4251(that)S +4443(revision.)S +4862(This)S +3096 V +720(implementation)S +1379(has)S +1543(the)S +1696(advantage)S +2131(that)S +2311(extraction)S +2740(of)S +2853(the)S +3005(latest)S +3246(revision)S +3598(is)S +3695(a)S +3769(simple)S +4066(and)S +4240(fast)S +4414(copy)S +4638(operation.)S +3276 V +720(Adding)S +1051(a)S +1126(new)S +1324(revision)S +1678(to)S +1788(the)S +1942(trunk)S +2185(is)S +2284(also)S +2477(fast:)S +10 I +2681(ci)S +10 R +2785(simply)S +3090(adds)S +3305(the)S +3459(new)S +3657(revision)S +4011(intact,)S +4290(replaces)S +4648(the)S +4802(previ-)S +3456 V +720(ous)S +895(revision)S +1253(with)S +1467(a)S +1546(reverse)S +1868(delta,)S +2122(and)S +2301(keeps)S +2563(the)S +2720(rest)S +2899(of)S +3017(the)S +3174(old)S +3337(deltas.)S +3660(Thus,)S +10 I +3920(ci)S +10 R +4027(requires)S +4383(the)S +4540(computation)S +3636 V +720(of)S +833(only)S +1041(one)S +1215(new)S +1411(delta.)S +3852 V +970(Branches)S +1373(need)S +1593(special)S +1902(treatment.)S +2366(The)S +2553(naive)S +2801(solution)S +3156(would)S +3439(be)S +3566(to)S +3677(store)S +3904(complete)S +4303(copies)S +4591(for)S +4740(the)S +4895(tips)S +4032 V +720(of)S +836(all)S +969(branches.)S +1411(Clearly,)S +1762(this)S +1939(approach)S +2336(would)S +2618(cost)S +2811(too)S +2971(much)S +3225(space.)S +3533(Instead,)S +3878(RCS)S +4100(uses)S +10 I +4304(forward)S +10 R +4659(deltas)S +4924(for)S +4212 V +720(branches.)S +1163(Regenerating)S +1729(a)S +1807(revision)S +2163(on)S +2297(a)S +2375(side)S +2570(branch)S +2875(proceeds)S +3263(as)S +3380(follows.)S +3769(First,)S +4012(extract)S +4317(the)S +4473(latest)S +4718(revision)S +4392 V +720(on)S +864(the)S +1030(trunk;)S +1313(secondly,)S +1737(apply)S +2003(reverse)S +2334(deltas)S +2611(until)S +2839(the)S +3005(fork)S +3215(revision)S +3581(for)S +3741(the)S +3907(branch)S +4222(is)S +4333(obtained;)S +4748(thirdly,)S +4572 V +720(apply)S +974(forward)S +1321(deltas)S +1586(until)S +1802(the)S +1956(desired)S +2277(branch)S +2581(revision)S +2936(is)S +3036(reached.)S +3433(Figure)S +3727(5)S +3810(illustrates)S +4232(a)S +4309(tree)S +4491(with)S +4702(one)S +4879(side)S +4752 V +720(branch.)S +1076(Triangles)S +1483(pointing)S +1847(to)S +1955(the)S +2107(left)S +2270(and)S +2444(right)S +2663(represent)S +3058(reverse)S +3375(and)S +3549(forward)S +3894(deltas,)S +4182(respectively.)S +5130 V +8 R +2273(1.1)S +5114 V +2463 H +2463 4932 lc +2463 4932 mc +2463 H +2160 5114 lc +2160 5114 mc +2160 H +2463 5296 lc +2463 5296 mc +5295 V +2463 H +2463 5113 lc +2463 5113 mc +5114 V +2463 H +2766 5114 lc +2766 5114 mc +5129 V +2705 H +2765 5114 lc +2765 5114 mc +5099 V +2705 H +2765 5114 lc +2765 5114 mc +5130 V +2880(1.2)S +5114 V +3069 H +3069 4932 lc +3069 4932 mc +3069 H +2766 5114 lc +2766 5114 mc +2766 H +3069 5296 lc +3069 5296 mc +5295 V +3069 H +3069 5113 lc +3069 5113 mc +5114 V +3069 H +3372 5114 lc +3372 5114 mc +5129 V +3312 H +3372 5114 lc +3372 5114 mc +5099 V +3312 H +3372 5114 lc +3372 5114 mc +5130 V +3486(1.3)S +5114 V +3675 H +3675 4932 lc +3675 4932 mc +3675 H +3372 5114 lc +3372 5114 mc +3372 H +3675 5296 lc +3675 5296 mc +5295 V +3675 H +3675 5113 lc +3675 5113 mc +5114 V +3675 H +3978 5114 lc +3978 5114 mc +5129 V +3918 H +3978 5114 lc +3978 5114 mc +5099 V +3918 H +3978 5114 lc +3978 5114 mc +5130 V +4092(2.1)S +5114 V +4281 H +4281 4932 lc +4281 4932 mc +4281 H +3978 5114 lc +3978 5114 mc +3978 H +4281 5296 lc +4281 5296 mc +5295 V +4281 H +4281 5113 lc +4281 5113 mc +5114 V +4281 H +4584 5114 lc +4584 5114 mc +5129 V +4524 H +4584 5114 lc +4584 5114 mc +5099 V +4524 H +4584 5114 lc +4584 5114 mc +5130 V +4762(2.2)S +5265 V +4584 H +4584 4962 lc +4584 4962 mc +4584 H +5039 4962 lc +5039 4962 mc +5040 H +5040 5265 lc +5040 5265 mc +5040 H +4585 5265 lc +4585 5265 mc +5796 V +4008(1.3.1.1)S +5780 V +4281 H +3978 5962 lc +3978 5962 mc +5963 V +3978 H +3978 5600 lc +3978 5600 mc +5598 V +3978 H +4281 5780 lc +4281 5780 mc +5295 V +3675 H +3978 5780 lc +3978 5780 mc +5737 V +3934 H +3978 5780 lc +3978 5780 mc +5721 V +3960 H +3979 5780 lc +3979 5780 mc +4281 H +4584 5780 lc +4584 5780 mc +5796 V +4524 H +4584 5781 lc +4584 5781 mc +5765 V +4524 H +4584 5780 lc +4584 5780 mc +5796 V +4614(1.3.1.2)S +5780 V +4888 H +4585 5962 lc +4585 5962 mc +5963 V +4584 H +4584 5600 lc +4584 5600 mc +5598 V +4584 H +4887 5780 lc +4887 5780 mc +6143 V +10 R +1699(Figure)S +1990(5.)S +2125(A)S +2227(revision)S +2579(tree)S +2758(with)S +2966(reverse)S +3283(and)S +3457(forward)S +3802(deltas.)S +6359 V +970(Although)S +1382(implementing)S +1972(fast)S +2150(check-out)S +2577(for)S +2727(the)S +2884(latest)S +3130(trunk)S +3376(revision,)S +3758(this)S +3938(arrangement)S +4471(has)S +4639(the)S +4796(disad-)S +6539 V +720(vantage)S +1071(that)S +1262(generation)S +1724(of)S +1848(other)S +2093(revisions)S +2494(takes)S +2739(time)S +2957(proportional)S +3491(to)S +3609(the)S +3771(number)S +4116(of)S +4239(deltas)S +4512(applied.)S +4901(For)S +6719 V +720(example,)S +1121(regenerating)S +1657(the)S +1817(branch)S +2126(tip)S +2270(in)S +2386(Figure)S +2685(5)S +2773(requires)S +3132(application)S +3614(of)S +3735(\256ve)S +3923(deltas)S +4195(\(including)S +4645(the)S +4806(initial)S +6899 V +720(one\).)S +983(Since)S +1236(usage)S +1494(statistics)S +1870(show)S +2112(that)S +2293(the)S +2446(latest)S +2688(trunk)S +2930(revision)S +3282(is)S +3379(the)S +3531(one)S +3705(that)S +3885(is)S +3982(retrieved)S +4366(in)S +4474(95)S +4604(per)S +4761(cent)S +4957(of)S +7079 V +720(all)S +859(cases)S +1108(\(see)S +1307(the)S +1468(section)S +1790(on)S +1929(usage)S +2195(statistics\),)S +2638(biasing)S +2967(check-out)S +3400(time)S +3618(in)S +3736(favor)S +3986(of)S +4109(that)S +4299(revision)S +4661(results)S +4962(in)S +7259 V +720(signi\256cant)S +1186(savings.)S +1590(However,)S +2029(careful)S +2354(implementation)S +3030(of)S +3161(the)S +3331(delta)S +3573(application)S +4065(process)S +4412(is)S +4527(necessary)S +4962(to)S +7920 V +EP +%%Page: 8 9 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2792(- 8 -)S +900 V +720(provide)S +1055(low)S +1235(retrieval)S +1597(overhead)S +1992(for)S +2138(other)S +2373(revisions,)S +2789(in)S +2897(particular)S +3309(for)S +3455(branch)S +3756(tips.)S +1116 V +970(There)S +1233(are)S +1386(several)S +1700(techniques)S +2159(for)S +2307(delta)S +2533(application.)S +3064(The)S +3251(naive)S +3499(one)S +3675(is)S +3774(to)S +3884(pass)S +4088(each)S +4302(delta)S +4528(to)S +4638(a)S +4714(general-)S +1296 V +720(purpose)S +1077(text)S +1267(editor.)S +1595(A)S +1707(prototype)S +2130(of)S +2253(RCS)S +2483(invoked)S +2845(the)S +3007(UNIX)S +3296(editor)S +10 I +3569(ed)S +10 R +3703(both)S +3921(for)S +4077(applying)S +4467(deltas)S +4740(and)S +4924(for)S +1476 V +720(expanding)S +1172(the)S +1330(identi\256cation)S +1894(markers.)S +2306(Although)S +2720(easy)S +2934(to)S +3049(implement,)S +3539(performance)S +4079(was)S +4271(poor,)S +4516(owing)S +4803(to)S +4918(the)S +1656 V +720(high)S +934(start-up)S +1275(costs)S +1511(and)S +1691(excess)S +1987(generality)S +2422(of)S +10 I +2541(ed)S +10 R +2635(.)S +2726(An)S +2884(intermediate)S +3419(version)S +3749(of)S +3867(RCS)S +4092(used)S +4310(a)S +4389(special-purpose,)S +1836 V +720(stream-oriented)S +1376(editor.)S +1694(This)S +1902(technique)S +2320(reduced)S +2665(the)S +2817(cost)S +3008(of)S +3121(applying)S +3501(a)S +3575(delta)S +3800(to)S +3909(the)S +4062(cost)S +4254(of)S +4368(checking)S +4759(out)S +4918(the)S +2016 V +720(latest)S +965(trunk)S +1210(revision.)S +1621(The)S +1810(reason)S +2104(for)S +2254(this)S +2433(behavior)S +2816(is)S +2917(that)S +3101(each)S +3316(delta)S +3543(application)S +4020(involves)S +4392(a)S +4469(complete)S +4868(pass)S +2196 V +720(over)S +927(the)S +1079(preceding)S +1502(revision.)S +2412 V +970(However,)S +1395(there)S +1629(is)S +1731(a)S +1810(much)S +2068(better)S +2331(algorithm.)S +2811(Note)S +3041(that)S +3227(the)S +3385(deltas)S +3654(are)S +3811(line)S +3997(oriented)S +4360(and)S +4540(that)S +4726(most)S +4957(of)S +2592 V +720(the)S +884(work)S +1131(of)S +1256(a)S +1342(stream)S +1650(editor)S +1925(involves)S +2306(copying)S +2670(unchanged)S +3143(lines)S +3373(from)S +3608(one)S +3793(revision)S +4156(to)S +4275(the)S +4438(next.)S +4706(A)S +4819(faster)S +2772 V +720(algorithm)S +1141(avoids)S +1434(unnecessary)S +1953(copying)S +2307(of)S +2423(character)S +2820(strings)S +3120(by)S +3253(using)S +3503(a)S +10 I +3580(piece)S +3823(table)S +10 R +4023(.)S +4111(A)S +4216(piece)S +4459(table)S +4686(is)S +4786(a)S +4863(one-)S +2952 V +720(dimensional)S +1245(array,)S +1509(specifying)S +1960(how)S +2167(a)S +2246(given)S +2503(revision)S +2860(is)S +2962(`pieced)S +3290(together')S +3685(from)S +3914(lines)S +4138(in)S +4251(the)S +4408(RCS)S +4633(\256le.)S +4851(Sup-)S +3132 V +720(pose)S +935(piece)S +1177(table)S +10 I +1403(PT)S +3182 V +1520(r)S +3132 V +10 R +1591(represents)S +2027(revision)S +10 I +2381(r)S +10 R +2420(.)S +2507(Then)S +10 I +2744(PT)S +3182 V +2861(r)S +3132 V +2900([i])S +10 R +3038(contains)S +3403(the)S +3557(starting)S +3889(position)S +4244(of)S +4359(line)S +10 I +4541(i)S +10 R +4602(of)S +4718(revision)S +3312 V +10 I +720(r)S +10 R +759(.)S +848(Application)S +1354(of)S +1471(the)S +1627(next)S +1833(delta)S +2061(transforms)S +2522(piece)S +2766(table)S +10 I +2994(PT)S +3362 V +3111(r)S +3312 V +10 R +3184(into)S +10 I +3374(PT)S +3362 V +3491(r+1)S +3312 V +10 R +3648(.)S +3737(For)S +3910(instance,)S +4296(a)S +4374(delete)S +4646(command)S +3492 V +720(removes)S +1093(a)S +1173(series)S +1436(of)S +1555(entries)S +1857(from)S +2087(the)S +2245(piece)S +2491(table.)S +2776(An)S +2934(insertion)S +3320(command)S +3750(inserts)S +4047(new)S +4249(entries,)S +4576(moving)S +4918(the)S +3672 V +720(entries)S +1019(following)S +1441(the)S +1596(insertion)S +1979(point)S +2218(further)S +2522(down)S +2777(the)S +2932(array.)S +3224(The)S +3411(inserted)S +3759(entries)S +4057(point)S +4295(to)S +4405(the)S +4559(text)S +4741(lines)S +4962(in)S +3852 V +720(the)S +874(delta.)S +1155(Thus,)S +1412(no)S +1544(I/O)S +1709(is)S +1808(involved)S +2190(except)S +2483(for)S +2632(reading)S +2964(the)S +3119(delta)S +3346(itself.)S +3634(When)S +3905(all)S +4038(deltas)S +4304(have)S +4525(been)S +4746(applied)S +4032 V +720(to)S +834(the)S +992(piece)S +1238(table,)S +1493(a)S +1573(sequential)S +2014(pass)S +2222(through)S +2569(the)S +2726(table)S +2955(looks)S +3207(up)S +3342(each)S +3559(line)S +3744(in)S +3857(the)S +4014(RCS)S +4239(\256le)S +4402(and)S +4581(copies)S +4871(it)S +4962(to)S +4212 V +720(the)S +872(output)S +1158(\256le,)S +1341(updating)S +1721(identi\256cation)S +2279(markers)S +2630(at)S +2732(the)S +2884(same)S +3119(time.)S +3382(Of)S +3517(course,)S +3832(the)S +3984(RCS)S +4204(\256le)S +4362(must)S +4588(permit)S +4880(ran-)S +4392 V +720(dom)S +930(access,)S +1241(since)S +1478(the)S +1632(copied)S +1930(lines)S +2151(are)S +2304(scattered)S +2690(throughout)S +3161(that)S +3343(\256le.)S +3558(Figure)S +3851(6)S +3933(illustrates)S +4354(an)S +4480(RCS)S +4702(\256le)S +4862(with)S +4572 V +720(two)S +900(revisions)S +1291(and)S +1465(the)S +1617(corresponding)S +2218(piece)S +2458(tables.)S +5832 V +10 I +2363(Figure)S +2665(6)S +2745(is)S +2842(not)S +3000(available.)S +6912 V +10 R +2016(Figure)S +2307(6.)S +2442(An)S +2594(RCS)S +2814(\256le)S +2972(and)S +3146(its)S +3271(piece)S +3511(tables)S +7128 V +970(The)S +1157(piece)S +1399(table)S +1625(approach)S +2022(has)S +2187(the)S +2341(property)S +2711(that)S +2893(the)S +3047(time)S +3257(for)S +3405(applying)S +3788(a)S +3865(single)S +4137(delta)S +4364(is)S +4464(roughly)S +4808(deter-)S +7308 V +720(mined)S +1004(by)S +1138(the)S +1294(size)S +1483(of)S +1600(the)S +1756(delta,)S +2009(and)S +2187(not)S +2349(by)S +2483(the)S +2639(size)S +2828(of)S +2945(the)S +3101(revision.)S +3512(For)S +3685(example,)S +4082(if)S +4177(a)S +4254(delta)S +4481(is)S +4581(10)S +4714(per)S +4874(cent)S +7920 V +EP +%%Page: 9 10 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2792(- 9 -)S +900 V +720(of)S +840(the)S +999(size)S +1191(of)S +1311(a)S +1392(revision,)S +1776(then)S +1985(applying)S +2372(it)S +2466(takes)S +2709(only)S +2925(10)S +3063(per)S +3228(cent)S +3432(of)S +3553(the)S +3713(time)S +3929(to)S +4045(generate)S +4420(the)S +4580(latest)S +4829(trunk)S +1080 V +720(revision.)S +1127(\(The)S +1345(stream)S +1641(editor)S +1904(would)S +2184(take)S +2380(100)S +2560(per)S +2717(cent.\))S +1296 V +970(There)S +1233(is)S +1331(an)S +1456(important)S +1876(alternative)S +2328(for)S +2475(representing)S +2999(deltas)S +3263(that)S +3444(a)S +3488 H + (f)show 10 -.5 mul h (f)show +10 R +3549(ects)S +3735(performance.)S +4324(SCCS)S +1246 V +4570(3)S +1296 V +4620(,)S +4677(a)S +4753(precur-)S +1476 V +720(sor)S +889(of)S +1019(RCS,)S +1281(uses)S +10 I +1499(interleaved)S +10 R +1994(deltas.)S +2328(A)S +2446(\256le)S +2620(containing)S +3088(interleaved)S +3577(deltas)S +3856(is)S +3969(partitioned)S +4448(into)S +4650(blocks)S +4957(of)S +1656 V +720(lines.)S +1009(Each)S +1253(block)S +1520(has)S +1698(a)S +1787(header)S +2097(that)S +2292(speci\256es)S +2681(to)S +2804(which)S +3093(revision\(s\))S +3565(the)S +3732(block)S +3999(belongs.)S +4411(The)S +4612(blocks)S +4919(are)S +1836 V +720(sorted)S +995(out)S +1154(in)S +1262(such)S +1475(a)S +1549(way)S +1745(that)S +1925(a)S +1999(single)S +2268(pass)S +2470(over)S +2677(the)S +2829(\256le)S +2987(can)S +3155(pick)S +3357(up)S +3487(all)S +3617(the)S +3769(lines)S +3988(belonging)S +4418(to)S +4526(a)S +4600(given)S +4852(revi-)S +2016 V +720(sion.)S +984(Thus,)S +1251(the)S +1415(regeneration)S +1955(time)S +2175(for)S +2333(all)S +2475(revisions)S +2878(is)S +2987(the)S +3151(same:)S +3426(all)S +3568(headers)S +3914(must)S +4151(be)S +4287(inspected,)S +4731(and)S +4918(the)S +2196 V +720(associated)S +1169(blocks)S +1469(either)S +1735(copied)S +2040(or)S +2162(skipped.)S +2567(As)S +2717(the)S +2878(number)S +3222(of)S +3344(revisions)S +3744(increases,)S +4172(the)S +4332(cost)S +4531(of)S +4652(retrieving)S +2376 V +720(any)S +896(revision)S +1251(is)S +1351(much)S +1606(higher)S +1894(than)S +2099(the)S +2254(cost)S +2448(of)S +2564(checking)S +2957(out)S +3118(the)S +3273(latest)S +3517(trunk)S +3761(revision)S +4116(with)S +4327(reverse)S +4647(deltas.)S +4968(A)S +2556 V +720(detailed)S +1071(comparison)S +1572(of)S +1690(SCCS's)S +2043(interleaved)S +2520(deltas)S +2787(and)S +2965(RCS's)S +3261(reverse)S +3582(deltas)S +3849(can)S +4021(be)S +4149(found)S +4416(in)S +4528(Reference)S +4965(4.)S +2736 V +720(This)S +952(reference)S +1375(considers)S +1806(the)S +1982(version)S +2330(of)S +2467(RCS)S +2711(with)S +2943(the)S +3119(stream)S +3440(editor)S +3728(only.)S +4016(The)S +4226(piece)S +4491(table)S +4740(method)S +2916 V +720(improves)S +1131(performance)S +1673(further,)S +2008(so)S +2135(that)S +2323(RCS)S +2551(is)S +2656(always)S +2971(faster)S +3230(than)S +3440(SCCS,)S +3749(except)S +4047(if)S +4146(10)S +4284(or)S +4405(more)S +4648(deltas)S +4919(are)S +3096 V +720(applied.)S +3312 V +970(Additional)S +1429(speed-up)S +1820(for)S +1967(both)S +2176(delta)S +2402(methods)S +2773(can)S +2943(be)S +3069(obtained)S +3445(by)S +3577(caching)S +3919(the)S +4073(most)S +4300(recently)S +4653(generated)S +3492 V +720(revision,)S +1101(as)S +1218(has)S +1385(been)S +1607(implemented)S +2163(in)S +2275(DSEE.)S +3442 V +2550(5)S +3492 V +2634(With)S +2868(caching,)S +3237(access)S +3525(time)S +3737(to)S +3849(frequently)S +4292(used)S +4508(revisions)S +4902(can)S +3672 V +720(approach)S +1115(normal)S +1428(\256le)S +1586(access)S +1870(time,)S +2103(at)S +2205(the)S +2357(cost)S +2548(of)S +2661(some)S +2902(additional)S +3332(space.)S +4032 V +10 B +720(4.)S +855(Locking:)S +1269(A)S +1371(Controversial)S +1989(Issue)S +4248 V +10 R +970(The)S +1169(locking)S +1513(mechanism)S +2012(for)S +2172(RCS)S +2406(was)S +2605(di)S +2683 H + (f)show 10 -.5 mul h (\256)show +10 R +2767(cult)S +2961(to)S +3083(design.)S +3443(The)S +3643(problem)S +4021(and)S +4210(its)S +4350(solution)S +4718(are)S +4884(\256rst)S +4428 V +720(presented)S +1136(in)S +1248(their)S +1465(`pure')S +1742(form,)S +1995(followed)S +2384(by)S +2518(a)S +2596(discussion)S +3047(of)S +3163(the)S +3318(complications)S +3912(caused)S +4216(by)S +4349(`real-world')S +4863(con-)S +4608 V +720(siderations.)S +4824 V +970(RCS)S +1198(must)S +1431(prevent)S +1768(two)S +1956(or)S +2077(more)S +2320(persons)S +2663(from)S +2895(depositing)S +3350(competing)S +3810(changes)S +4169(of)S +4290(the)S +4450(same)S +4693(revision.)S +5004 V +720(Suppose)S +1104(two)S +1299(programmers)S +1875(check)S +2151(out)S +2323(revision)S +2689(2.4)S +2858(and)S +3046(modify)S +3379(it.)S +3534(Programmer)S +4077(A)S +4193(checks)S +4508(in)S +4630(a)S +4718(revision)S +5184 V +720(before)S +1010(programmer)S +1539(B.)S +1697(Unfortunately,)S +2318(programmer)S +2847(B)S +2950(has)S +3119(not)S +3284(seen)S +3498(A's)S +3679(changes,)S +4062(so)S +4188(the)S +4347(e)S +4391 H + (f)show 10 -.5 mul h (f)show +10 R +4452(ect)S +4605(is)S +4709(that)S +4896(A's)S +5364 V +720(changes)S +1079(are)S +1238(covered)S +1591(up)S +1729(by)S +1867(B's)S +2044(deposit.)S +2426(A's)S +2608(changes)S +2967(are)S +3126(not)S +3292(lost)S +3475(since)S +3718(all)S +3856(revisions)S +4255(are)S +4414(saved,)S +4703(but)S +4868(they)S +5544 V +720(are)S +871(con\256ned)S +1245(to)S +1353(a)S +1427(single)S +1696(revision.\263)S +5760 V +970(This)S +1191(con\257ict)S +1534(is)S +1644(prevented)S +2080(in)S +2201(RCS)S +2434(by)S +2577(locking.)S +2975(Whenever)S +3427(someone)S +3825(intends)S +4157(to)S +4278(edit)S +4471(a)S +4558(revision)S +4924(\(as)S +5940 V +720(opposed)S +1083(to)S +1191(reading)S +1520(or)S +1633(compiling)S +2069(it\),)S +2213(the)S +2365(revision)S +2717(should)S +3014(be)S +3138(checked)S +3494(out)S +3652(and)S +3826(locked,)S +4147(using)S +4394(the)S +10 I +4546(\261l)S +10 R +4654(option)S +4940(on)S +6120 V +10 I +720(co)S +10 R +814(.)S +908(On)S +1069(subsequent)S +1552(check-in,)S +10 I +1959(ci)S +10 R +2070(tests)S +2287(the)S +2448(lock)S +2659(and)S +2842(then)S +3053(removes)S +3430(it.)S +3580(At)S +3719(most)S +3953(one)S +4136(programmer)S +4668(at)S +4779(a)S +4862(time)S +6300 V +720(may)S +932(lock)S +1144(a)S +1228(particular)S +1650(revision,)S +2037(and)S +2221(only)S +2439(this)S +2624(programmer)S +3157(may)S +3368(check)S +3639(in)S +3756(the)S +3917(succeeding)S +4399(revision.)S +4815(Thus,)S +6480 V +720(while)S +972(a)S +1046(revision)S +1398(is)S +1495(locked,)S +1816(it)S +1902(is)S +1999(the)S +2151(exclusive)S +2558(responsibility)S +3133(of)S +3246(the)S +3398(locker.)S +6702 V +8 Y1 +720(333333333333333333)S +6820 V +8 R +820(\263)S +900(Note)S +1088(that)S +1240(this)S +1388(problem)S +1686(is)S +1773(entirely)S +2049(di)S +2111 H + (f)show 8 -.5 mul h (f)show +8 R +2160(erent)S +2352(from)S +2540(the)S +2671(atomicity)S +3005(problem.)S +3348(Atomicity)S +3705(means)S +3942(that)S +4095(concurrent)S +4468(update)S +6920 V +720(operations)S +1082(on)S +1193(the)S +1321(same)S +1515(RCS)S +1698(\256le)S +1830(cannot)S +2072(be)S +2177(permitted,)S +2531(because)S +2812(that)S +2961(may)S +3128(result)S +3334(in)S +3426(inconsistent)S +3836(data.)S +4042(Atomic)S +4311(updates)S +4584(are)S +7020 V +720(essential)S +1017(\(and)S +1182(implemented)S +1621(in)S +1707(RCS\),)S +1930(but)S +2056(do)S +2160(not)S +2286(solve)S +2478(the)S +2599(con\257ict)S +2862(discussed)S +3191(here.)S +7920 V +EP +%%Page: 10 11 +BP +/slant 0 def +/height 1.000000 def +8 R +8 R +40 V +10 R +0(-)S +580 V +2767(- 10 -)S +900 V +970(An)S +1126(important)S +1549(maxim)S +1861(for)S +2011(software)S +2388(tools)S +2617(like)S +2801(RCS)S +3025(is)S +3126(that)S +3310(they)S +3516(must)S +3745(not)S +3907(stand)S +4152(in)S +4264(the)S +4421(way)S +4622(of)S +4740(making)S +1080 V +720(progress)S +1093(with)S +1305(a)S +1383(project.)S +1749(This)S +1961(consideration)S +2533(leads)S +2772(to)S +2884(several)S +3200(weakenings)S +3705(of)S +3822(the)S +3978(locking)S +4312(mechanism.)S +4856(First)S +1260 V +720(of)S +839(all,)S +1000(even)S +1224(if)S +1321(a)S +1401(revision)S +1759(is)S +1862(locked,)S +2189(it)S +2281(can)S +2455(still)S +2642(be)S +2772(checked)S +3134(out.)S +3353(This)S +3567(is)S +3670(necessary)S +4093(if)S +4191(other)S +4433(people)S +4736(wish)S +4962(to)S +1440 V +720(compile)S +1073(or)S +1187(inspect)S +1501(the)S +1654(locked)S +1951(revision)S +2304(while)S +2556(the)S +2708(next)S +2910(one)S +3084(is)S +3181(in)S +3289(preparation.)S +3828(The)S +4013(only)S +4221(operations)S +4667(they)S +4869(can-)S +1620 V +720(not)S +880(do)S +1012(are)S +1165(to)S +1275(lock)S +1479(the)S +1633(revision)S +1987(or)S +2102(to)S +2212(check)S +2476(in)S +2586(the)S +2740(succeeding)S +3215(one.)S +3447(Secondly,)S +3877(check-in)S +4253(operations)S +4702(on)S +4835(other)S +1800 V +720(branches)S +1109(in)S +1222(the)S +1379(RCS)S +1604(\256le)S +1767(are)S +1923(still)S +2109(possible;)S +2500(the)S +2657(locking)S +2991(of)S +3108(one)S +3286(revision)S +3642(does)S +3859(not)S +4021(a)S +4065 H + (f)show 10 -.5 mul h (f)show +10 R +4126(ect)S +4276(any)S +4454(other)S +4693(revision.)S +1980 V +720(Thirdly,)S +1084(revisions)S +1484(are)S +1644(occasionally)S +2183(locked)S +2489(for)S +2645(a)S +2729(long)S +2947(period)S +3242(of)S +3365(time)S +3583(because)S +3938(a)S +4022(programmer)S +4555(is)S +4662(absent)S +4957(or)S +2160 V +720(otherwise)S +1153(unable)S +1464(to)S +1587(complete)S +1998(the)S +2165(assignment.)S +2715(If)S +2826(another)S +3170(programmer)S +3708(has)S +3886(to)S +4008(make)S +4268(a)S +4356(pressing)S +4733(change,)S +2340 V +720(there)S +950(are)S +1102(the)S +1255(following)S +1675(three)S +1905(alternatives)S +2397(for)S +2545(making)S +2877(progress:)S +3275(a\))S +3384(\256nd)S +3572(out)S +3732(who)S +3936(is)S +4035(holding)S +4373(the)S +4527(lock)S +4731(and)S +4907(ask)S +2520 V +720(that)S +906(person)S +1208(to)S +1322(release)S +1634(it;)S +1754(b\))S +1873(check)S +2141(out)S +2305(the)S +2463(locked)S +2765(revision,)S +3148(modify)S +3473(it,)S +3590(check)S +3858(it)S +3950(in)S +4064(on)S +4200(a)S +4280(branch,)S +4612(and)S +4791(merge)S +2700 V +720(the)S +878(changes)S +1236(later;)S +1478(c\))S +1592(break)S +1850(the)S +2009(lock.)S +2273(Breaking)S +2676(a)S +2757(lock)S +2966(leaves)S +3252(a)S +3333(highly)S +3626(visible)S +3930(trace,)S +4185(namely)S +4516(an)S +4647(electronic)S +2880 V +720(mail)S +930(message)S +1300(that)S +1482(is)S +1581(sent)S +1774(automatically)S +2350(to)S +2460(the)S +2614(holder)S +2901(of)S +3015(the)S +3168(lock,)S +3396(recording)S +3809(the)S +3962(breaker)S +4291(and)S +4466(a)S +4541(commentary)S +3060 V +720(requested)S +1135(from)S +1362(him.)S +1606(Thus,)S +1864(breaking)S +2246(locks)S +2490(is)S +2590(tolerated)S +2972(under)S +3232(certain)S +3536(circumstances,)S +4159(but)S +4321(will)S +4511(not)S +4673(go)S +4807(unno-)S +3240 V +720(ticed.)S +1016(Experience)S +1511(has)S +1691(shown)S +1998(that)S +2194(the)S +2362(automatic)S +2802(mail)S +3026(message)S +3410(attaches)S +3777(a)S +3867(high)S +4091(enough)S +4431(stigma)S +4744(to)S +4868(lock)S +3420 V +720(breaking,)S +1130(such)S +1349(that)S +1535(programmers)S +2103(break)S +2360(locks)S +2607(only)S +2821(in)S +2935(real)S +3120(emergencies,)S +3679(or)S +3798(when)S +4050(a)S +4130(co-worker)S +4576(resigns)S +4896(and)S +3600 V +720(leaves)S +999(locked)S +1295(revisions)S +1686(behind.)S +3816 V +970(If)S +1074(an)S +1206(RCS)S +1434(\256le)S +1600(is)S +1705(private,)S +2046(i.e.,)S +2232(when)S +2487(a)S +2570(programmer)S +3102(owns)S +3352(an)S +3485(RCS)S +3714(\256le)S +3881(and)S +4064(does)S +4286(not)S +4453(expect)S +4752(anyone)S +3996 V +720(else)S +912(to)S +1027(perform)S +1385(check-in)S +1765(operations,)S +2243(locking)S +2580(is)S +2684(an)S +2815(unnecessary)S +3339(nuisance.)S +3780(In)S +3900(this)S +4081(case,)S +4313(the)S +4471(`strict)S +4740(locking)S +4176 V +720(feature')S +1069(discussed)S +1492(earlier)S +1786(may)S +1998(be)S +2133(disabled,)S +2532(provided)S +2928(that)S +3119(\256le)S +3288(protection)S +3734(is)S +3842(set)S +3994(such)S +4218(that)S +4409(only)S +4628(the)S +4791(owner)S +4356 V +720(may)S +927(write)S +1167(the)S +1324(RCS)S +1549(\256le.)S +1767(This)S +1980(has)S +2148(the)S +2305(e)S +2349 H + (f)show 10 -.5 mul h (f)show +10 R +2410(ect)S +2561(that)S +2746(only)S +2959(the)S +3116(owner)S +3400(can)S +3573(check-in)S +3951(revisions,)S +4372(and)S +4550(that)S +4734(no)S +4868(lock)S +4536 V +720(is)S +817(needed)S +1129(for)S +1275(doing)S +1533(so.)S +4752 V +970(As)S +1113(added)S +1383(protection,)S +1845(each)S +2059(RCS)S +2281(\256le)S +2441(contains)S +2806(an)S +2932(access)S +3218(list)S +3373(that)S +3556(speci\256es)S +3933(the)S +4088(users)S +4326(who)S +4531(may)S +4736(execute)S +4932 V +720(update)S +1019(operations.)S +1523(If)S +1622(an)S +1749(access)S +2036(list)S +2192(is)S +2292(empty,)S +2600(only)S +2811(normal)S +3127(UNIX)S +3408(\256le)S +3568(protection)S +4005(applies.)S +4375(Thus,)S +4632(the)S +4786(access)S +5112 V +720(list)S +878(is)S +980(useful)S +1259(for)S +1410(restricting)S +1851(the)S +2009(set)S +2156(of)S +2275(people)S +2577(who)S +2785(would)S +3071(otherwise)S +3495(have)S +3719(update)S +4021(permission.)S +4551(Just)S +4743(as)S +4862(with)S +5292 V +720(locking,)S +1077(the)S +1231(access)S +1517(list)S +1672(has)S +1837(no)S +1969(e)S +2013 H + (f)show 10 -.5 mul h (f)show +10 R +2074(ect)S +2222(on)S +2354(read-only)S +2768(operations)S +3216(such)S +3431(as)S +10 I +3546(co)S +10 R +3640(.)S +3727(This)S +3937(approach)S +4333(is)S +4431(consistent)S +4862(with)S +5472 V +720(the)S +872(UNIX)S +1151(philosophy)S +1626(of)S +1739(openness,)S +2160(which)S +2434(contributes)S +2908(to)S +3016(a)S +3090(productive)S +3547(software)S +3920(development)S +4466(environment.)S +5832 V +10 B +720(5.)S +855(Con\256guration)S +1486(Management)S +6048 V +10 R +970(The)S +1156(preceding)S +1580(sections)S +1933(described)S +2346(how)S +2549(RCS)S +2770(deals)S +3006(with)S +3215(revisions)S +3607(of)S +3722(individual)S +4160(components;)S +4703(this)S +4880(sec-)S +6228 V +720(tion)S +917(discusses)S +1330(how)S +1543(to)S +1662(handle)S +1969(con\256gurations.)S +2637(A)S +2749(con\256guration)S +3322(is)S +3429(a)S +3513(set)S +3664(of)S +3787(revisions,)S +4213(where)S +4496(each)S +4718(revision)S +6408 V +720(comes)S +1007(from)S +1233(a)S +1309(di)S +1387 H + (f)show 10 -.5 mul h (f)show +10 R +1448(erent)S +1679(revision)S +2033(group,)S +2323(and)S +2500(the)S +2655(revisions)S +3049(are)S +3203(selected)S +3557(according)S +3983(to)S +4094(a)S +4171(certain)S +4475(criterion.)S +4901(For)S +6588 V +720(example,)S +1121(in)S +1237(order)S +1485(to)S +1601(build)S +1845(a)S +1927(functioning)S +2426(compiler,)S +2844(the)S +3004(`right')S +3297(revisions)S +3696(from)S +3928(the)S +4088(scanner,)S +4454(the)S +4613(parser,)S +4918(the)S +6768 V +720(optimizer)S +1154(and)S +1349(the)S +1522(code)S +1761(generator)S +2188(must)S +2434(be)S +2579(combined.)S +3079(RCS,)S +3345(in)S +3475(conjunction)S +3999(with)S +4229(MAKE,)S +4600(provides)S +4996(a)S +6948 V +720(number)S +1055(of)S +1168(facilities)S +1542(to)S +1650(e)S +1694 H + (f)show 10 -.5 mul h (f)show +10 R +1755(ect)S +1901(a)S +1975(smooth)S +2300(selection.)S +7920 V +EP +%%Page: 11 12 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2767(- 11 -)S +900 V +10 B +720(5.1.)S +930(RCS)S +1160(Selection)S +1573(Functions)S +1152 V +10 I +720(Default)S +1050(selection)S +1332 V +10 R +970(During)S +1285(development,)S +1858(the)S +2012(usual)S +2255(selection)S +2642(criterion)S +3012(is)S +3111(to)S +3221(choose)S +3530(the)S +3684(latest)S +3928(revision)S +4283(of)S +4399(all)S +4532(components.)S +1512 V +970(The)S +10 I +1155(co)S +10 R +1279(command)S +1703(makes)S +1988(this)S +2163(selection)S +2548(by)S +2678(default.)S +3040(For)S +3209(example,)S +3602(the)S +3754(command)S +1692 V +10 I +1330(co)S +1484(*,v)S +1932 V +10 R +970(retrieves)S +1354(the)S +1517(latest)S +1769(revision)S +2132(on)S +2273(the)S +2437(default)S +2756(branch)S +3069(of)S +3194(each)S +3418(RCS)S +3650(\256le)S +3820(in)S +3940(the)S +4104(current)S +4428(directory.)S +4885(The)S +2112 V +970(default)S +1285(branch)S +1594(is)S +1699(usually)S +2025(the)S +2184(trunk,)S +2457(but)S +2622(may)S +2831(be)S +2962(set)S +3110(to)S +3225(be)S +3356(a)S +3437(side)S +3635(branch.)S +3998(Side)S +4213(branches)S +4604(as)S +4724(defaults)S +2292 V +970(are)S +1133(needed)S +1457(in)S +1577(distributed)S +2047(software)S +2432(development,)S +3015(as)S +3140(discussed)S +3565(in)S +3686(the)S +3851(section)S +4177(on)S +4320(the)S +4485(RCS)S +4718(revision)S +2472 V +970(tree.)S +2868 V +10 I +720(Release)S +1060(based)S +1323(selection)S +3048 V +10 R +970(Specifying)S +1448(a)S +1537(release)S +1858(or)S +1986(branch)S +2302(number)S +2653(selects)S +2965(the)S +3133(latest)S +3390(revision)S +3758(in)S +3882(that)S +4078(release)S +4400(or)S +4529(branch.)S +4901(For)S +3228 V +970(instance,)S +3408 V +10 I +1330(co)S +1484(\261r2)S +1683(*,v)S +3648 V +10 R +970(retrieves)S +1344(the)S +1497(latest)S +1739(revision)S +2092(with)S +2302(release)S +2610(number)S +2947(2)S +3029(from)S +3255(each)S +3469(RCS)S +3691(\256le.)S +3906(This)S +4116(selection)S +4503(is)S +4602(convenient)S +3828 V +970(if)S +1061(a)S +1135(release)S +1441(has)S +1604(been)S +1822(completed)S +2268(and)S +2442(development)S +2988(has)S +3151(moved)S +3453(on)S +3583(to)S +3691(the)S +3843(next)S +4045(release.)S +4224 V +10 I +720(State)S +950(and)S +1130(author)S +1427(based)S +1690(selection)S +4404 V +10 R +970(If)S +1070(the)S +1226(highest)S +1549(level)S +1777(number)S +2116(within)S +2406(a)S +2484(given)S +2740(release)S +3050(number)S +3389(is)S +3490(not)S +3652(the)S +3808(desired)S +4130(one,)S +4333(the)S +4489(state)S +4707(attribute)S +4584 V +970(can)S +1138(help.)S +1395(For)S +1564(example,)S +4764 V +10 I +1330(co)S +1484(\261r2)S +1683(\261sReleased)S +2192(*,v)S +5004 V +10 R +970(retrieves)S +1352(the)S +1513(latest)S +1763(revision)S +2124(with)S +2341(release)S +2656(number)S +3001(2)S +3091(whose)S +3386(state)S +3609(attribute)S +3982(is)S +4089(`Released'.)S +4610(Of)S +4755(course,)S +5184 V +970(the)S +1126(state)S +1343(attribute)S +1710(has)S +1877(to)S +1989(be)S +2117(set)S +2262(appropriately,)S +2853(using)S +3104(the)S +10 I +3260(ci)S +10 R +3366(or)S +10 I +3483(rcs)S +10 R +3638(commands.)S +4159(Another)S +4519(alternative)S +4973(is)S +5364 V +970(to)S +1078(select)S +1335(a)S +1409(revision)S +1761(by)S +1891(its)S +2016(author,)S +2326(using)S +2573(the)S +10 I +2725(\261w)S +10 R +2872(option.)S +5760 V +10 I +720(Date)S +944(based)S +1207(selection)S +5940 V +10 R +970(Revisions)S +1399(may)S +1605(also)S +1800(be)S +1928(selected)S +2283(by)S +2417(date.)S +2672(Suppose)S +3045(a)S +3123(release)S +3433(of)S +3551(an)S +3680(entire)S +3942(system)S +4255(was)S +4445(completed)S +4896(and)S +6120 V +970(current)S +1282(on)S +1412(March)S +1702(4,)S +1807(at)S +1909(1:00)S +2117(p.m.)S +2325(local)S +2549(time.)S +2812(Then)S +3047(the)S +3199(command)S +6300 V +10 I +1330(co)S +1484(\261d'March)S +1913(4,)S +2018(1:00)S +2231(pm)S +2383(LT')S +2588(*,v)S +6540 V +10 R +970(checks)S +1293(out)S +1473(all)S +1626(the)S +1801(components)S +2337(of)S +2473(that)S +2676(release,)S +3030(independent)S +3571(of)S +3707(the)S +3882(numbering.)S +4423(The)S +10 I +4631(\261d)S +10 R +4784(option)S +6720 V +970(speci\256es)S +1346(a)S +1422(`cuto)S +1627 H + (f)show 10 -.5 mul h (f)show +10 R +1720(date',)S +1976(i.e.,)S +2155(the)S +2309(revision)S +2662(selected)S +3014(has)S +3178(a)S +3253(check-in)S +3627(date)S +3824(that)S +4005(is)S +4103(closest)S +4406(to,)S +4540(but)S +4699(not)S +4858(after)S +6900 V +970(the)S +1122(date)S +1318(given.)S +7116 V +10 I +720(Name)S +983(based)S +1246(selection)S +7296 V +10 R +970(The)S +1178(most)S +1426(powerful)S +1839(selection)S +2247(function)S +2633(is)S +2753(based)S +3033(on)S +3187(assigning)S +3619(symbolic)S +4040(names)S +4349(to)S +4481(revisions)S +4896(and)S +7920 V +EP +%%Page: 12 13 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2767(- 12 -)S +900 V +970(branches.)S +1412(In)S +1528(large)S +1760(systems,)S +2135(a)S +2212(single)S +2484(release)S +2793(number)S +3131(or)S +3247(date)S +3446(is)S +3546(not)S +3707(su)S +3796 H + (f)show 10 -.5 mul h (\256)show +10 R +3880(cient)S +4107(to)S +4217(collect)S +4515(the)S +4669(appropri-)S +1080 V +970(ate)S +1122(revisions)S +1519(from)S +1749(all)S +1885(groups.)S +2248(For)S +2423(example,)S +2822(suppose)S +3181(one)S +3362(wishes)S +3671(to)S +3786(combine)S +4167(release)S +4480(2)S +4567(of)S +4687(one)S +4868(sub-)S +1260 V +970(system)S +1296(and)S +1488(release)S +1812(15)S +1960(of)S +2091(another.)S +2493(Most)S +2747(likely,)S +3048(the)S +3218(creation)S +3587(dates)S +3840(of)S +3971(those)S +4229(releases)S +4591(di)S +4669 H + (f)show 10 -.5 mul h (f)show +10 R +4730(er)S +4854(also.)S +1440 V +970(Thus,)S +1226(a)S +1301(single)S +1571(revision)S +1924(number)S +2260(or)S +2375(date)S +2573(passed)S +2871(to)S +2981(the)S +10 I +3135(co)S +10 R +3261(command)S +3687(will)S +3875(not)S +4035(su)S +4124 H + (f)show 10 -.5 mul h (\256)show +10 R +4208(ce)S +4328(to)S +4438(select)S +4697(the)S +4851(right)S +1620 V +970(revisions.)S +1432(Symbolic)S +1862(revision)S +2230(numbers)S +2620(solve)S +2877(this)S +3068(problem.)S +3502(Each)S +3747(RCS)S +3983(\256le)S +4156(may)S +4373(contain)S +4712(a)S +4801(set)S +4957(of)S +1800 V +970(symbolic)S +1377(names)S +1672(that)S +1862(are)S +2023(mapped)S +2379(to)S +2497(numeric)S +2864(revision)S +3226(numbers.)S +3665(For)S +3844(example,)S +4247(assume)S +4582(the)S +4745(symbol)S +1980 V +10 I +970(V3)S +10 R +1122(is)S +1230(bound)S +1521(to)S +1640(release)S +1957(number)S +2303(2)S +2394(in)S +2513(\256le)S +10 I +2682(s,v)S +10 R +2790(,)S +2856(and)S +3041(to)S +3160(revision)S +3523(number)S +3869(15.9)S +4084(in)S +10 I +4202(t,v)S +10 R +4299(.)S +4394(Then)S +4639(the)S +4801(single)S +2160 V +970(command)S +2340 V +10 I +1330(co)S +1484(\261rV3)S +1744(s,v)S +1912(t,v)S +2580 V +10 R +970(retrieves)S +1344(the)S +1497(latest)S +1739(revision)S +2092(of)S +2206(release)S +2513(2)S +2594(from)S +10 I +2819(s,v)S +10 R +2927(,)S +2983(and)S +3159(revision)S +3513(15.9)S +3720(from)S +10 I +3946(t,v)S +10 R +4043(.)S +4130(In)S +4245(a)S +4321(large)S +4552(system)S +4862(with)S +2760 V +970(many)S +1249(modules,)S +1670(checking)S +2087(out)S +2271(all)S +2427(revisions)S +2844(with)S +3078(one)S +3278(command)S +3728(greatly)S +4061(simpli\256es)S +4507(con\256guration)S +2940 V +970(management.)S +3156 V +970(Judicious)S +1385(use)S +1555(of)S +1675(symbolic)S +2079(revision)S +2439(numbers)S +2821(helps)S +3070(with)S +3286(organizing)S +3751(large)S +3988(con\256gurations.)S +4653(A)S +4763(special)S +3336 V +720(command,)S +10 I +1195(rcsfreeze)S +10 R +1555(,)S +1636(assigns)S +1981(a)S +2081(symbolic)S +2504(revision)S +2882(number)S +3243(to)S +3377(a)S +3477(selected)S +3854(revision)S +4232(in)S +4366(every)S +4642(RCS)S +4887(\256le.)S +3516 V +10 I +720(Rcsfreeze)S +10 R +1147(e)S +1191 H + (f)show 10 -.5 mul h (f)show +10 R +1252(ectively)S +1613(freezes)S +1939(a)S +2028(con\256guration.)S +2661(The)S +2861(assigned)S +3250(symbolic)S +3662(revision)S +4029(number)S +4379(selects)S +4690(all)S +4835(com-)S +3696 V +720(ponents)S +1062(of)S +1176(the)S +1329(con\256guration.)S +1948(If)S +2045(necessary,)S +2488(symbolic)S +2886(numbers)S +3260(may)S +3462(even)S +3680(be)S +3804(intermixed)S +4267(with)S +4475(numeric)S +4832(ones.)S +3876 V +720(Thus,)S +10 I +975(V3.5)S +10 R +1191(in)S +1299(the)S +1451(above)S +1719(example)S +2087(would)S +2367(select)S +2624(revision)S +2976(2.5)S +3131(in)S +10 I +3239(s,v)S +10 R +3377(and)S +3551(branch)S +3852(15.9.5)S +4132(in)S +10 I +4240(t,v)S +10 R +4337(.)S +4092 V +970(The)S +1162(options)S +10 I +1494(\261r)S +10 R +1583(,)S +10 I +1645(\261s)S +10 R +1734(,)S +10 I +1796(\261w)S +10 R +1950(and)S +10 I +2131(\261d)S +10 R +2269(may)S +2479(be)S +2611(combined.)S +3098(If)S +3202(a)S +3284(branch)S +3593(is)S +3698(given,)S +3983(the)S +4143(latest)S +4392(revision)S +4752(on)S +4890(that)S +4272 V +720(branch)S +1021(satisfying)S +1440(all)S +1570(conditions)S +2017(is)S +2114(retrieved;)S +2526(otherwise,)S +2969(the)S +3121(default)S +3428(branch)S +3729(is)S +3826(used.)S +4632 V +10 B +720(5.2.)S +930(Combining)S +1439(MAKE)S +1780(and)S +1972(RCS)S +4848 V +10 R +970(MAKE)S +4798 V +1264(1)S +4848 V +1360(is)S +1473(a)S +1563(program)S +1947(that)S +2143(processes)S +2571(con\256gurations.)S +3245(It)S +3353(is)S +3467(driven)S +3769(by)S +3916(con\256guration)S +4496(speci\256cations)S +5028 V +720(recorded)S +1108(in)S +1226(a)S +1310(special)S +1627(\256le,)S +1820(called)S +2098(a)S +2182(`Make\256le'.)S +2698(MAKE)S +3031(avoids)S +3331(redundant)S +3769(processing)S +4235(steps)S +4474(by)S +4613(comparing)S +5208 V +720(creation)S +1072(dates)S +1308(of)S +1422(source)S +1713(and)S +1888(processed)S +2312(objects.)S +2681(For)S +2851(example,)S +3245(when)S +3492(instructed)S +3917(to)S +4026(compile)S +4379(all)S +4510(modules)S +4881(of)S +4996(a)S +5388 V +720(given)S +972(system,)S +1305(it)S +1391(only)S +1599(recompiles)S +2067(those)S +2308(source)S +2598(modules)S +2967(that)S +3147(were)S +3370(changed)S +3732(since)S +3967(they)S +4169(were)S +4392(processed)S +4815(last.)S +5604 V +970(MAKE)S +1298(has)S +1465(been)S +1687(extended)S +2081(with)S +2293(an)S +2421(auto-checkout)S +3020(feature)S +3330(for)S +3481(RCS.*)S +3811(When)S +4084(a)S +4163(certain)S +4469(\256le)S +4632(to)S +4745(be)S +4874(pro-)S +5784 V +720(cessed)S +1012(is)S +1111(not)S +1271(present,)S +1616(MAKE)S +1942(attempts)S +2313(a)S +2389(check-out)S +2813(operation.)S +3276(If)S +3373(successful,)S +3839(MAKE)S +4164(performs)S +4555(the)S +4708(required)S +5964 V +720(processing,)S +1210(and)S +1392(then)S +1602(deletes)S +1917(the)S +2077(checked)S +2441(out)S +2607(\256le)S +2773(to)S +2889(conserve)S +3281(space.)S +3595(The)S +3788(selection)S +4181(parameters)S +4657(discussed)S +6144 V +720(above)S +996(can)S +1172(be)S +1304(passed)S +1608(to)S +1724(MAKE)S +2056(either)S +2321(as)S +2442(parameters,)S +2942(or)S +3063(directly)S +3406(embedded)S +3854(in)S +3970(the)S +4129(Make\256le.)S +4576(MAKE)S +4907(has)S +6324 V +720(also)S +922(been)S +1152(extended)S +1554(to)S +1674(search)S +1970(the)S +2134(subdirectory)S +2675(named)S +10 I +2983(RCS)S +10 R +3203(for)S +3361(needed)S +3685(\256les,)S +3919(rather)S +4193(than)S +4407(just)S +4594(the)S +4758(current)S +6504 V +720(working)S +1090(directory.)S +1542(However,)S +1969(if)S +2067(a)S +2148(working)S +2517(\256le)S +2681(is)S +2784(present,)S +3133(MAKE)S +3463(totally)S +3755(ignores)S +4085(the)S +4243(corresponding)S +4850(RCS)S +6684 V +720(\256le)S +894(and)S +1085(uses)S +1304(the)S +1473(working)S +1853(\256le.)S +2083(\(In)S +2246(newer)S +2536(versions)S +2916(of)S +3046(MAKE)S +3387(distributed)S +3862(by)S +4009(AT&T)S +4328(and)S +4519(others,)S +4835(auto-)S +6864 V +720(checkout)S +1112(can)S +1282(be)S +1408(achieved)S +1794(with)S +2004(the)S +2158(rule)S +2345(DEFAULT,)S +2856(instead)S +3170(of)S +3284(a)S +3359(special)S +3667(extension)S +4081(of)S +4195(MAKE.)S +4575(However,)S +4996(a)S +6964 V +8 Y1 +720(333333333333333333)S +7082 V +8 R +820(*)S +900(This)S +1066(auto-checkout)S +1540(extension)S +1869(is)S +1946(available)S +2256(only)S +2422(in)S +2508(some)S +2700(versions)S +2989(of)S +3079(MAKE,)S +3359(e.g.)S +3498(GNU)S +3696(MAKE.)S +7920 V +EP +%%Page: 13 14 +BP +/slant 0 def +/height 1.000000 def +8 R +8 R +40 V +10 R +0(-)S +580 V +2767(- 13 -)S +900 V +720(\256le)S +879(checked)S +1236(out)S +1395(by)S +1526(the)S +1679(rule)S +1865(DEFAULT)S +2351(will)S +2538(not)S +2697(be)S +2822(deleted)S +3141(after)S +3355(processing.)S +10 I +3839(Rcsclean)S +10 R +4231(can)S +4401(be)S +4527(used)S +4742(for)S +4890(that)S +1080 V +720(purpose.\))S +1296 V +970(With)S +1225(auto-checkout,)S +1870(RCS/MAKE)S +2437(can)S +2630(e)S +2674 H + (f)show 10 -.5 mul h (f)show +10 R +2735(ect)S +2906(a)S +3005(selection)S +3415(rule)S +3625(especially)S +4079(tuned)S +4357(for)S +4529(multi-person)S +1476 V +720(software)S +1107(development)S +1667(and)S +1855(maintenance.)S +2458(In)S +2585(these)S +2834(situations,)S +3287(programmers)S +3863(should)S +4174(obtain)S +4468(con\256gurations)S +1656 V +720(that)S +910(consist)S +1228(of)S +1351(the)S +1513(revisions)S +1914(they)S +2126(have)S +2354(personally)S +2810(checked)S +3176(out)S +3344(plus)S +3552(the)S +3715(latest)S +3967(checked)S +4334(in)S +4453(revision)S +4816(of)S +4940(all)S +1836 V +720(other)S +955(revision)S +1307(groups.)S +1664(This)S +1872(schema)S +2201(can)S +2369(be)S +2493(set)S +2634(up)S +2764(as)S +2877(follows.)S +2052 V +970(Each)S +1207(programmer)S +1738(chooses)S +2092(a)S +2174(working)S +2546(directory)S +2945(and)S +3128(places)S +3416(into)S +3611(it)S +3706(a)S +3789(symbolic)S +4195(link,)S +4415(named)S +10 I +4720(RCS)S +10 R +4898(,)S +4962(to)S +2232 V +720(the)S +879(directory)S +1276(containing)S +1735(the)S +1894(relevant)S +2252(RCS)S +2479(\256les.)S +2738(The)S +2930(symbolic)S +3334(link)S +3527(makes)S +3818(sure)S +4020(that)S +10 I +4206(co)S +10 R +4336(and)S +10 I +4516(ci)S +10 R +4624(operations)S +2412 V +720(need)S +947(only)S +1164(specify)S +1491(the)S +1652(working)S +2024(\256les,)S +2255(and)S +2438(that)S +2627(the)S +2788(Make\256le)S +3183(need)S +3411(not)S +3579(be)S +3713(changed.)S +4140(The)S +4335(programmer)S +4868(then)S +2592 V +720(checks)S +1039(out)S +1215(the)S +1385(needed)S +1715(\256les)S +1930(and)S +2121(modi\256es)S +2513(them.)S +2815(If)S +2928(MAKE)S +3269(is)S +3383(invoked,)S +3777(it)S +3880(composes)S +4321(con\256gurations)S +4940(by)S +2772 V +720(selecting)S +1112(those)S +1360(revisions)S +1758(that)S +1945(are)S +2103(checked)S +2466(out,)S +2656(and)S +2837(the)S +2996(rest)S +3177(from)S +3408(the)S +3567(subdirectory)S +10 I +4103(RCS)S +10 R +4281(.)S +4373(The)S +4565(latter)S +4808(selec-)S +2952 V +720(tion)S +912(may)S +1120(be)S +1250(controlled)S +1691(by)S +1827(a)S +1907(symbolic)S +2310(revision)S +2668(number)S +3009(or)S +3128(any)S +3307(of)S +3425(the)S +3582(other)S +3822(selection)S +4212(criteria.)S +4584(If)S +4685(there)S +4919(are)S +3132 V +720(several)S +1034(programmers)S +1598(editing)S +1908(in)S +2018(separate)S +2376(working)S +2741(directories,)S +3219(they)S +3423(are)S +3576(insulated)S +3969(from)S +4195(each)S +4409(other's)S +4719(changes)S +3312 V +720(until)S +934(checking)S +1324(in)S +1432(their)S +1645(modi\256cations.)S +3528 V +970(Similarly,)S +1399(a)S +1475(maintainer)S +1934(can)S +2104(recreate)S +2450(an)S +2576(older)S +2813(con\256guration)S +3378(by)S +3510(starting)S +3842(to)S +3952(work)S +4189(in)S +4299(an)S +4425(empty)S +4707(working)S +3708 V +720(directory.)S +1172(During)S +1492(the)S +1651(initial)S +1922(MAKE)S +2253(invocation,)S +2737(all)S +2874(revisions)S +3272(are)S +3430(selected)S +3788(from)S +4018(RCS)S +4244(\256les.)S +4502(As)S +4649(the)S +4807(main-)S +3888 V +720(tainer)S +977(checks)S +1278(out)S +1436(\256les)S +1633(and)S +1807(modi\256es)S +2182(them,)S +2437(a)S +2511(new)S +2707(con\256guration)S +3270(is)S +3367(gradually)S +3774(built)S +3988(up.)S +4173(Every)S +4441(time)S +4649(MAKE)S +4973(is)S +4068 V +720(invoked,)S +1097(it)S +1183(substitutes)S +1636(the)S +1788(modi\256ed)S +2174(revisions)S +2565(into)S +2751(the)S +2903(con\256guration)S +3466(being)S +3718(manipulated.)S +4284 V +970(A)S +1096(\256nal)S +1328(application)S +1826(of)S +1963(RCS)S +2208(is)S +2330(to)S +2463(use)S +2651(it)S +2762(for)S +2933(storing)S +3266(Make\256les.)S +3770(Revision)S +4181(groups)S +4508(of)S +4646(Make\256les)S +4464 V +720(represent)S +1126(multiple)S +1501(versions)S +1875(of)S +1999(con\256gurations.)S +2667(Whenever)S +3117(a)S +3202(con\256guration)S +3776(is)S +3884(baselined)S +4302(or)S +4425(distributed,)S +4918(the)S +4644 V +720(best)S +929(approach)S +1342(is)S +1457(to)S +1584(unambiguously)S +2250(\256x)S +2405(the)S +2576(con\256guration)S +3158(with)S +3385(a)S +3478(symbolic)S +3894(revision)S +4265(number)S +4619(by)S +4768(calling)S +4824 V +10 I +720(rcsfreeze)S +10 R +1080(,)S +1137(to)S +1247(embed)S +1545(that)S +1727(symbol)S +2054(into)S +2242(the)S +2396(Make\256le,)S +2808(and)S +2983(to)S +3092(check)S +3355(in)S +3464(the)S +3617(Make\256le)S +4003(\(using)S +4284(the)S +4437(same)S +4673(symbolic)S +5004 V +720(revision)S +1072(number\).)S +1495(With)S +1725(this)S +1900(approach,)S +2320(old)S +2478(con\256gurations)S +3080(can)S +3248(be)S +3372(regenerated)S +3866(easily)S +4129(and)S +4303(reliably.)S +5364 V +10 B +720(6.)S +855(Usage)S +1140(Statistics)S +5580 V +10 R +970(The)S +1165(following)S +1594(usage)S +1861(statistics)S +2246(were)S +2479(collected)S +2879(on)S +3019(two)S +3209(DEC)S +3449(VAX-11/780)S +4016(computers)S +4472(of)S +4595(the)S +4757(Purdue)S +5760 V +720(Computer)S +1164(Science)S +1517(Department.)S +2086(Both)S +2324(machines)S +2744(are)S +2908(mainly)S +3229(used)S +3455(for)S +3614(research)S +3988(purposes.)S +4441(Thus,)S +4709(the)S +4874(data)S +5940 V +720(re\257ect)S +1019(an)S +1163(environment)S +1718(in)S +1847(which)S +2142(the)S +2315(majority)S +2705(of)S +2839(projects)S +3206(involve)S +3557(prototyping)S +4075(and)S +4270(advanced)S +4697(software)S +6120 V +720(development,)S +1291(but)S +1449(relatively)S +1856(little)S +2070(long-term)S +2494(maintenance.)S +6336 V +970(For)S +1141(the)S +1295(\256rst)S +1483(experiment,)S +1989(the)S +10 I +2143(ci)S +10 R +2247(and)S +10 I +2423(co)S +10 R +2549(operations)S +2997(were)S +3222(instrumented)S +3776(to)S +3886(log)S +4046(the)S +4200(number)S +4537(of)S +4653(backward)S +6516 V +720(and)S +903(forward)S +1256(deltas)S +1527(applied.)S +1914(The)S +2107(data)S +2311(were)S +2542(collected)S +2940(during)S +3239(a)S +3321(13)S +3459(month)S +3753(period)S +4046(from)S +4278(Dec.)S +4501(1982)S +4739(to)S +4855(Dec.)S +6696 V +720(1983.)S +1005(Table)S +1262(I)S +1325(summarizes)S +1832(the)S +1984(results.)S +7920 V +EP +%%Page: 14 15 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +520 V +2767(- 14 -)S +740 V +10 Y1 +1032(2)S +1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S +860 V +10 R +1082(Operation)S +1748(Total)S +2227(Total)S +2468(deltas)S +2851(Mean)S +3108(deltas)S +3541(Operations)S +4284(Branch)S +980 V +1631(operations)S +2317(applied)S +2949(applied)S +3491(with)S +3699(>1)S +3835(delta)S +4220(operations)S +1000 V +10 Y1 +1032(2)S +1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S +1120 V +10 R +1082(co)S +1779(7867)S +2389(9320)S +3008(1.18)S +3491(509)S +3810(\(6%\))S +4179(203)S +4479(\(3%\))S +1240 V +1082(ci)S +1779(3468)S +2389(2207)S +3008(0.64)S +3541(85)S +3810(\(2%\))S +4229(75)S +4479(\(2%\))S +1360 V +1082(ci)S +1184(&)S +1292(co)S +1729(11335)S +2339(11527)S +3008(1.02)S +3491(594)S +3810(\(5%\))S +4179(278)S +4479(\(2%\))S +1380 V +10 Y1 +1032(2)S +1078(2222222222222222222222222222222222222222222222222222222222222222222222222)S +1032(1)S +1340 V +1032(1)S +1240 V +1032(1)S +1140 V +1032(1)S +1040 V +1032(1)S +940 V +1032(1)S +840 V +1032(1)S +1380 V +1556(1)S +1340 V +1556(1)S +1240 V +1556(1)S +1140 V +1556(1)S +1040 V +1556(1)S +940 V +1556(1)S +840 V +1556(1)S +1380 V +2152(1)S +1340 V +2152(1)S +1240 V +2152(1)S +1140 V +2152(1)S +1040 V +2152(1)S +940 V +2152(1)S +840 V +2152(1)S +1380 V +2776(1)S +1340 V +2776(1)S +1240 V +2776(1)S +1140 V +2776(1)S +1040 V +2776(1)S +940 V +2776(1)S +840 V +2776(1)S +1380 V +3416(1)S +1340 V +3416(1)S +1240 V +3416(1)S +1140 V +3416(1)S +1040 V +3416(1)S +940 V +3416(1)S +840 V +3416(1)S +1380 V +4104(1)S +1340 V +4104(1)S +1240 V +4104(1)S +1140 V +4104(1)S +1040 V +4104(1)S +940 V +4104(1)S +840 V +4104(1)S +1380 V +4728(1)S +1340 V +4728(1)S +1240 V +4728(1)S +1140 V +4728(1)S +1040 V +4728(1)S +940 V +4728(1)S +840 V +4728(1)S +1560 V +10 R +2003(Table)S +2260(I.)S +2378(Statistics)S +2770(for)S +10 I +2916(co)S +10 R +3040(and)S +10 I +3214(ci)S +10 R +3316(operations.)S +1776 V +970(The)S +1157(\256rst)S +1345(two)S +1527(lines)S +1748(show)S +1991(statistics)S +2368(for)S +2516(check-out)S +2941(and)S +3117(check-in;)S +3520(the)S +3674(third)S +3895(line)S +4077(shows)S +4360(the)S +4515(combination.)S +1956 V +720(Recall)S +1006(that)S +10 I +1187(ci)S +10 R +1290(performs)S +1681(an)S +1806(implicit)S +2149(check-out)S +2573(to)S +2682(obtain)S +2963(a)S +3038(revision)S +3391(for)S +3537(computing)S +3995(the)S +4147(delta.)S +4426(In)S +4539(all)S +4669(measures)S +2136 V +720(presented,)S +1173(the)S +1341(most)S +1582(recent)S +1871(revision)S +2239(\(stored)S +2562(intact\))S +2863(counts)S +3170(as)S +3299(one)S +3489(delta.)S +3784(The)S +3985(number)S +4336(of)S +4466(deltas)S +4746(applied)S +2316 V +720(represents)S +1154(the)S +1306(number)S +1641(of)S +1754(passes)S +2039(necessary,)S +2481(where)S +2754(the)S +2906(\256rst)S +3092(`pass')S +3360(is)S +3457(a)S +3531(copying)S +3883(step.)S +2532 V +970(Note)S +1199(that)S +1384(the)S +1541(check-out)S +1969(operation)S +2381(is)S +2483(executed)S +2872(more)S +3112(than)S +3319(twice)S +3570(as)S +3688(frequently)S +4133(as)S +4251(the)S +4408(check-in)S +4786(opera-)S +2712 V +720(tion.)S +972(The)S +1168(fourth)S +1453(column)S +1794(gives)S +2046(the)S +2209(mean)S +2466(number)S +2812(of)S +2936(deltas)S +3210(applied)S +3544(in)S +3662(all)S +3802(three)S +4041(cases.)S +4346(For)S +10 I +4525(ci)S +10 R +4597(,)S +4662(the)S +4824(mean)S +2892 V +720(number)S +1055(of)S +1168(deltas)S +1431(applied)S +1755(is)S +1852(less)S +2032(than)S +2234(one.)S +2463(The)S +2649(reasons)S +2979(are)S +3131(that)S +3312(the)S +3465(initial)S +3730(check-in)S +4104(requires)S +4456(no)S +4587(delta)S +4812(at)S +4915(all,)S +3072 V +720(and)S +913(that)S +1111(the)S +1281(only)S +1507(time)S +10 I +1733(ci)S +10 R +1853(requires)S +2222(more)S +2475(than)S +2695(one)S +2887(delta)S +3129(is)S +3244(for)S +3408(branches.)S +3865(Column)S +4236(5)S +4334(shows)S +4632(the)S +4802(actual)S +3252 V +720(number)S +1058(of)S +1174(operations)S +1623(that)S +1806(applied)S +2133(more)S +2371(than)S +2576(one)S +2753(delta.)S +3035(The)S +3223(last)S +3395(column)S +3728(indicates)S +4116(that)S +4299(branches)S +4686(were)S +4912(not)S +3432 V +720(used)S +933(often.)S +3648 V +970(The)S +1156(last)S +1326(three)S +1556(columns)S +1926(demonstrate)S +2445(that)S +2626(the)S +2779(most)S +3005(recent)S +3279(trunk)S +3522(revision)S +3876(is)S +3975(by)S +4107(far)S +4249(the)S +4403(most)S +4630(frequently)S +3828 V +720(accessed.)S +1154(For)S +1324(RCS,)S +1570(check-out)S +1994(of)S +2108(this)S +2284(revision)S +2637(is)S +2735(a)S +2810(simple)S +3108(copy)S +3332(operation,)S +3764(which)S +4038(is)S +4135(the)S +4287(absolute)S +4650(minimum)S +4008 V +720(given)S +996(the)S +1172(copy-semantics)S +1847(of)S +10 I +1984(co)S +10 R +2078(.)S +2187(Access)S +2523(to)S +2655(older)S +2914(revisions)S +3329(and)S +3528(branches)S +3937(is)S +4059(more)S +4319(common)S +4724(in)S +4857(non-)S +4188 V +720(academic)S +1131(environments,)S +1735(yet)S +1892(even)S +2115(if)S +2210(access)S +2498(to)S +2610(older)S +2849(deltas)S +3116(were)S +3343(an)S +3471(order)S +3715(of)S +3832(magnitude)S +4288(more)S +4527(frequent,)S +4918(the)S +4368 V +720(combined)S +1155(average)S +1505(number)S +1851(of)S +1975(deltas)S +2249(applied)S +2584(would)S +2875(still)S +3068(be)S +3204(below)S +3490(1.2.)S +3712(Since)S +3976(RCS)S +4208(is)S +4317(faster)S +4580(than)S +4794(SCCS)S +4548 V +720(until)S +934(up)S +1064(to)S +1172(10)S +1302(delta)S +1526(applications,)S +2064(reverse)S +2381(deltas)S +2644(are)S +2795(clearly)S +3096(the)S +3248(method)S +3578(of)S +3691(choice.)S +4764 V +970(The)S +1158(second)S +1468(experiment,)S +1975(conducted)S +2418(in)S +2529(March)S +2822(of)S +2938(1984,)S +3196(involved)S +3580(surveying)S +4008(the)S +4164(existing)S +4515(RCS)S +4739(\256les)S +4940(on)S +4944 V +720(our)S +887(two)S +1071(machines.)S +1536(The)S +1724(goal)S +1929(was)S +2117(to)S +2228(determine)S +2660(the)S +2815(mean)S +3064(number)S +3402(of)S +3518(revisions)S +3912(per)S +4072(RCS)S +4295(\256le,)S +4481(as)S +4597(well)S +4802(as)S +4918(the)S +5124 V +720(space)S +977(consumed)S +1418(by)S +1554(them.)S +1845(Table)S +2109(II)S +2212(shows)S +2499(the)S +2658(results.)S +3011(\(Tables)S +3347(I)S +3417(and)S +3598(II)S +3701(were)S +3931(produced)S +4339(at)S +4448(di)S +4526 H + (f)show 10 -.5 mul h (f)show +10 R +4587(erent)S +4823(times)S +5304 V +720(and)S +894(are)S +1045(unrelated.\))S +5384 V +10 Y1 +883(2)S +926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S +5504 V +10 R +1486(Total)S +1727(RCS)S +2142(Total)S +2645(Mean)S +3089(Mean)S +3346(size)S +3531(of)S +3764(Mean)S +4021(size)S +4206(of)S +4439(Overhead)S +5624 V +1618(\256les)S +2067(revisions)S +2578(revisions)S +3158(RCS)S +3378(\256les)S +3846(revisions)S +5644 V +10 Y1 +883(2)S +926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S +5764 V +10 R +933(All)S +1091(\256les)S +1601(8033)S +2122(11133)S +2671(1.39)S +3251(6156)S +3926(5585)S +4545(1.10)S +5884 V +933(Files)S +1158(with)S +1601(1477)S +2172(4578)S +2671(3.10)S +3251(8074)S +3926(6041)S +4545(1.34)S +6004 V +10 Y +933(\263)S +10 R +1018(2)S +1098(deltas)S +6024 V +10 Y1 +883(2)S +926(2222222222222222222222222222222222222222222222222222222222222222222222222222222)S +883(1)S +5984 V +883(1)S +5884 V +883(1)S +5784 V +883(1)S +5684 V +883(1)S +5584 V +883(1)S +5484 V +883(1)S +6024 V +1411(1)S +5984 V +1411(1)S +5884 V +1411(1)S +5784 V +1411(1)S +5684 V +1411(1)S +5584 V +1411(1)S +5484 V +1411(1)S +6024 V +1992(1)S +5984 V +1992(1)S +5884 V +1992(1)S +5784 V +1992(1)S +5684 V +1992(1)S +5584 V +1992(1)S +5484 V +1992(1)S +6024 V +2503(1)S +5984 V +2503(1)S +5884 V +2503(1)S +5784 V +2503(1)S +5684 V +2503(1)S +5584 V +2503(1)S +5484 V +2503(1)S +6024 V +3014(1)S +5984 V +3014(1)S +5884 V +3014(1)S +5784 V +3014(1)S +5684 V +3014(1)S +5584 V +3014(1)S +5484 V +3014(1)S +6024 V +3689(1)S +5984 V +3689(1)S +5884 V +3689(1)S +5784 V +3689(1)S +5684 V +3689(1)S +5584 V +3689(1)S +5484 V +3689(1)S +6024 V +4364(1)S +5984 V +4364(1)S +5884 V +4364(1)S +5784 V +4364(1)S +5684 V +4364(1)S +5584 V +4364(1)S +5484 V +4364(1)S +6024 V +4876(1)S +5984 V +4876(1)S +5884 V +4876(1)S +5784 V +4876(1)S +5684 V +4876(1)S +5584 V +4876(1)S +5484 V +4876(1)S +6204 V +10 R +2201(Table)S +2458(II.)S +2609(Statistics)S +3001(for)S +3147(RCS)S +3367(\256les.)S +6420 V +970(The)S +1166(mean)S +1423(number)S +1769(of)S +1893(revisions)S +2295(per)S +2463(RCS)S +2694(\256le)S +2863(is)S +2972(1.39.)S +3244(Columns)S +3648(5)S +3740(and)S +3926(6)S +4018(show)S +4271(the)S +4435(mean)S +4693(sizes)S +4929(\(in)S +6600 V +720(bytes\))S +1004(of)S +1127(an)S +1261(RCS)S +1491(\256le)S +1659(and)S +1842(of)S +1964(the)S +2125(latest)S +2375(revision)S +2736(of)S +2858(each)S +3079(RCS)S +3308(\256le,)S +3500(respectively.)S +4076(The)S +4270(`overhead')S +4740(column)S +6780 V +720(contains)S +1093(the)S +1255(ratio)S +1478(of)S +1601(the)S +1763(mean)S +2019(sizes.)S +2308(Assuming)S +2754(that)S +2944(all)S +3084(revisions)S +3485(in)S +3603(an)S +3738(RCS)S +3969(\256le)S +4138(are)S +4300(approximately)S +4918(the)S +6960 V +720(same)S +955(size,)S +1165(this)S +1340(ratio)S +1553(gives)S +1794(a)S +1868(measure)S +2230(of)S +2343(the)S +2495(space)S +2746(consumed)S +3181(by)S +3311(the)S +3463(extra)S +3692(revisions.)S +7176 V +970(In)S +1092(our)S +1264(sample,)S +1611(over)S +1827(80)S +1966(per)S +2132(cent)S +2337(of)S +2459(the)S +2620(RCS)S +2849(\256les)S +3055(contained)S +3482(only)S +3699(a)S +3782(single)S +4061(revision.)S +4478(The)S +4673(reason)S +4973(is)S +7356 V +720(that)S +911(our)S +1085(systems)S +1443(programmers)S +2016(routinely)S +2418(check)S +2691(in)S +2810(all)S +2951(source)S +3252(\256les)S +3460(on)S +3600(the)S +3762(distribution)S +4264(tapes,)S +4534(even)S +4762(though)S +7920 V +EP +%%Page: 15 16 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2767(- 15 -)S +900 V +720(they)S +933(may)S +1146(never)S +1408(touch)S +1672(them)S +1914(again.)S +2227(To)S +2380(get)S +2544(a)S +2630(better)S +2899(indication)S +3341(of)S +3466(how)S +3680(much)S +3944(space)S +4207(savings)S +4549(are)S +4712(possible)S +1080 V +720(with)S +935(deltas,)S +1230(all)S +1367(measures)S +1775(with)S +1990(those)S +2238(\256les)S +2442(that)S +2629(contained)S +3054(2)S +3140(or)S +3259(more)S +3500(revisions)S +3897(were)S +4126(recomputed.)S +4688(Only)S +4924(for)S +1260 V +720(those)S +961(\256les)S +1158(is)S +1255(RCS)S +1475(necessary.)S +1947(As)S +2088(shown)S +2379(in)S +2487(the)S +2639(second)S +2946(line,)S +3151(the)S +3303(average)S +3642(number)S +3978(of)S +4092(revisions)S +4484(for)S +4631(those)S +4873(\256les)S +1440 V +720(is)S +823(3.10,)S +1059(with)S +1273(an)S +1403(overhead)S +1804(of)S +1923(1.34.)S +2188(This)S +2401(means)S +2691(that)S +2876(the)S +3033(extra)S +3267(2.10)S +3477(deltas)S +3745(require)S +4062(34)S +4197(per)S +4359(cent)S +4560(extra)S +4794(space,)S +1620 V +720(or)S +842(16)S +981(per)S +1147(cent)S +1352(per)S +1518(extra)S +1756(revision.)S +2172(Rochkind)S +1570 V +2561(3)S +1620 V +2650(measured)S +3071(the)S +3233(space)S +3494(consumed)S +3939(by)S +4079(SCCS,)S +4390(and)S +4574(reported)S +4946(an)S +1800 V +720(average)S +1067(of)S +1188(5)S +1276(revisions)S +1675(per)S +1840(group)S +2111(and)S +2293(an)S +2425(overhead)S +2828(of)S +2949(1.37)S +3162(\(or)S +3316(about)S +3575(9)S +3662(per)S +3826(cent)S +4029(per)S +4193(extra)S +4429(revision\).)S +4876(In)S +4996(a)S +1980 V +720(later)S +930(paper,)S +1209(Glasser)S +1930 V +1508(6)S +1980 V +1591(observed)S +1984(an)S +2111(average)S +2453(of)S +2569(7)S +2652(revisions)S +3046(per)S +3206(group)S +3472(in)S +3583(a)S +3660(single,)S +3957(large)S +4189(project,)S +4524(but)S +4685(provided)S +2160 V +720(no)S +863(overhead)S +1271(\256gure.)S +1602(In)S +1728(his)S +1888(paper)S +2152(on)S +2294(DSEE)S +2110 V +2544(5)S +2160 V +2594(,)S +2661(Leblang)S +3030(reported)S +3404(that)S +3596(delta)S +3832(storage)S +4162(combined)S +4598(with)S +4818(blank)S +2340 V +720(compression)S +1260(results)S +1556(in)S +1669(an)S +1798(overhead)S +2198(of)S +2316(a)S +2395(mere)S +2629(1\2612)S +2814(per)S +2976(cent)S +3177(per)S +3339(revision.)S +3751(Since)S +4009(leading)S +4339(blanks)S +4636(accounted)S +2520 V +720(for)S +870(about)S +1126(20)S +1260(per)S +1421(cent)S +1621(of)S +1738(the)S +1894(surveyed)S +2288(Pascal)S +2577(programs,)S +3013(a)S +3091(revision)S +3447(group)S +3714(with)S +3926(5\26110)S +4159(members)S +4558(was)S +4746(smaller)S +2700 V +720(than)S +922(a)S +996(single)S +1265(cleartext)S +1638(copy.)S +2916 V +970(The)S +1155(above)S +1423(observations)S +1958(demonstrate)S +2476(clearly)S +2777(that)S +2957(the)S +3109(space)S +3360(needed)S +3672(for)S +3818(extra)S +4047(revisions)S +4439(is)S +4537(small.)S +4840(With)S +3096 V +720(delta)S +950(storage,)S +1299(the)S +1457(luxury)S +1753(of)S +1871(keeping)S +2222(multiple)S +2591(revisions)S +2987(online)S +3272(is)S +3374(certainly)S +3758(a)S +3802 H + (f)show 10 -.5 mul h (f)show +10 R +3863(ordable.)S +4252(In)S +4370(fact,)S +4579(introducing)S +3276 V +720(a)S +803(system)S +1120(with)S +1337(delta)S +1571(storage)S +1899(may)S +2111(reduce)S +2416(storage)S +2744(requirements,)S +3330(because)S +3685(programmers)S +4257(often)S +4502(save)S +4719(back-up)S +3456 V +720(copies)S +1011(anyway.)S +1411(Since)S +1668(back-up)S +2024(copies)S +2314(are)S +2470(stored)S +2749(much)S +3006(more)S +3246(e)S +3290 H + (f)show 10 -.5 mul h (\256)show +10 R +3374(ciently)S +3681(with)S +3894(deltas,)S +4187(introducing)S +4683(a)S +4762(system)S +3636 V +720(such)S +933(as)S +1046(RCS)S +1266(may)S +1468(actually)S +1814(free)S +1998(a)S +2072(considerable)S +2606(amount)S +2936(of)S +3049(space.)S +3996 V +10 B +720(7.)S +855(Survey)S +1185(of)S +1298(Version)S +1661(Control)S +2024(Tools)S +4212 V +10 R +970(The)S +1159(need)S +1381(to)S +1493(keep)S +1715(back-up)S +2070(copies)S +2359(of)S +2477(software)S +2855(arose)S +3100(when)S +3351(programs)S +3763(and)S +3942(data)S +4143(were)S +4371(no)S +4506(longer)S +4796(stored)S +4392 V +720(on)S +861(paper)S +1123(media,)S +1433(but)S +1602(were)S +1836(entered)S +2170(from)S +2405(terminals)S +2818(and)S +3003(stored)S +3288(on)S +3428(disk.)S +3690(Back-up)S +4068(copies)S +4363(are)S +4524(desirable)S +4924(for)S +4572 V +720(reliability,)S +1166(and)S +1342(many)S +1596(modern)S +1934(editors)S +2239(automatically)S +2816(save)S +3026(a)S +3103(back-up)S +3457(copy)S +3684(for)S +3833(every)S +4087(\256le)S +4248(touched.)S +4652(This)S +4863(stra-)S +4752 V +720(tegy)S +928(is)S +1031(valuable)S +1405(for)S +1557(short-term)S +2009(back-ups,)S +2430(but)S +2593(not)S +2756(suitable)S +3102(for)S +3253(long-term)S +3682(version)S +4011(control,)S +4354(since)S +4594(an)S +4723(existing)S +4932 V +720(back-up)S +1071(copy)S +1295(is)S +1392(overwritten)S +1882(whenever)S +2299(the)S +2451(corresponding)S +3052(\256le)S +3210(is)S +3307(edited.)S +5148 V +970(Tape)S +1217(archives)S +1597(are)S +1766(suitable)S +2125(for)S +2289(long-term,)S +2756(o)S +2806 H + (f)show 10 -.5 mul h (\257)show +10 R +2890(ine)S +3060(storage.)S +3451(If)S +3565(all)S +3713(changed)S +4093(\256les)S +4308(are)S +4477(dumped)S +4847(on)S +4996(a)S +5328 V +720(back-up)S +1073(tape)S +1271(once)S +1491(per)S +1650(day,)S +1851(old)S +2010(revisions)S +2402(remain)S +2710(accessible.)S +3200(However,)S +3621(tape)S +3818(archives)S +4181(are)S +4333(unsatisfactory)S +4924(for)S +5508 V +720(version)S +1049(control)S +1367(in)S +1480(several)S +1797(ways.)S +2092(First,)S +2337(backing)S +2689(up)S +2825(the)S +2983(\256le)S +3147(system)S +3461(every)S +3718(24)S +3854(hours)S +4112(does)S +4331(not)S +4495(capture)S +4824(inter-)S +5688 V +720(mediate)S +1078(revisions.)S +1536(Secondly,)S +1975(the)S +2139(old)S +2308(revisions)S +2710(are)S +2872(not)S +3041(online,)S +3357(and)S +3542(accessing)S +3965(them)S +4206(is)S +4314(tedious)S +4644(and)S +4829(time-)S +5868 V +720(consuming.)S +1248(In)S +1365(particular,)S +1806(it)S +1896(is)S +1997(impractical)S +2480(to)S +2592(compare)S +2969(several)S +3285(old)S +3447(revisions)S +3843(of)S +3961(a)S +4040(group,)S +4333(because)S +4683(that)S +4868(may)S +6048 V +720(require)S +1037(mounting)S +1456(and)S +1635(searching)S +2052(several)S +2369(tapes.)S +2664(Tape)S +2898(archives)S +3265(are)S +3421(important)S +3845(fail-safe)S +4206(tools)S +4436(in)S +4549(the)S +4706(event)S +4957(of)S +6228 V +720(catastrophic)S +1240(disk)S +1445(failures)S +1782(or)S +1903(accidental)S +2345(deletions,)S +2769(but)S +2935(they)S +3145(are)S +3304(ill-suited)S +3698(for)S +3852(version)S +4184(control.)S +4560(Conversely,)S +6408 V +720(version)S +1044(control)S +1357(tools)S +1582(do)S +1712(not)S +1870(obviate)S +2194(the)S +2346(need)S +2564(for)S +2710(tape)S +2906(archives.)S +6624 V +970(A)S +1076(natural)S +1387(technique)S +1809(for)S +1959(keeping)S +2309(several)S +2625(old)S +2787(revisions)S +3182(online)S +3466(is)S +3567(to)S +3679(never)S +3934(delete)S +4206(a)S +4285(\256le.)S +4503(Editing)S +4833(a)S +4912(\256le)S +6804 V +720(simply)S +1036(creates)S +1355(a)S +1442(new)S +1651(\256le)S +1822(with)S +2043(the)S +2208(same)S +2456(name,)S +2740(but)S +2911(with)S +3132(a)S +3218(di)S +3296 H + (f)show 10 -.5 mul h (f)show +10 R +3357(erent)S +3598(sequence)S +4005(number.)S +4407(This)S +4627(technique,)S +6984 V +720(available)S +1119(as)S +1241(an)S +1374(option)S +1669(in)S +1786(DEC's)S +2097(VMS)S +2353(operating)S +2769(system,)S +3111(turns)S +3350(out)S +3518(to)S +3636(be)S +3770(inadequate)S +4242(for)S +4398(version)S +4732(control.)S +7164 V +720(First,)S +970(it)S +1067(is)S +1174(prohibitively)S +1731(expensive)S +2170(in)S +2288(terms)S +2550(of)S +2673(storage)S +3001(costs,)S +3266(especially)S +3705(since)S +3950(no)S +4090(data)S +4296(compression)S +4841(tech-)S +7344 V +720(niques)S +1016(are)S +1172(employed.)S +1656(Secondly,)S +2088(indiscriminately)S +2773(storing)S +3086(every)S +3342(change)S +3659(produces)S +4054(too)S +4217(many)S +4474(revisions,)S +4896(and)S +7920 V +EP +%%Page: 16 17 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2767(- 16 -)S +900 V +720(programmers)S +1289(have)S +1514(di)S +1592 H + (f)show 10 -.5 mul h (\256)show +10 R +1676(culties)S +1974(distinguishing)S +2579(them.)S +2871(The)S +3063(proliferation)S +3599(of)S +3718(revisions)S +4115(forces)S +4394(programmers)S +4962(to)S +1080 V +720(spend)S +989(much)S +1247(time)S +1461(on)S +1597(\256nding)S +1917(and)S +2097(deleting)S +2455(useless)S +2774(\256les.)S +3032(Thirdly,)S +3393(most)S +3624(of)S +3743(the)S +3902(support)S +4239(functions)S +4648(like)S +4835(lock-)S +1260 V +720(ing,)S +903(logging,)S +1264(revision)S +1616(selection,)S +2026(and)S +2200(identi\256cation)S +2758(described)S +3170(in)S +3278(this)S +3453(paper)S +3704(are)S +3855(not)S +4013(available.)S +1476 V +970(An)S +1122(alternative)S +1573(approach)S +1968(is)S +2065(to)S +2173(separate)S +2529(editing)S +2837(from)S +3061(revision)S +3414(control.)S +3783(The)S +3969(user)S +4166(may)S +4369(repeatedly)S +4815(edit)S +4996(a)S +1656 V +720(given)S +985(revision,)S +1374(until)S +1600(freezing)S +1968(it)S +2066(with)S +2286(an)S +2422(explicit)S +2764(command.)S +3255(Once)S +3507(a)S +3593(revision)S +3957(is)S +4066(frozen,)S +4387(it)S +4485(is)S +4594(stored)S +4880(per-)S +1836 V +720(manently)S +1122(and)S +1296(can)S +1464(no)S +1594(longer)S +1879(be)S +2003(modi\256ed.)S +2445(\(In)S +2592(RCS,)S +2838(freezing)S +3195(a)S +3270(revisions)S +3662(is)S +3760(done)S +3985(with)S +10 I +4194(ci)S +10 R +4266(.\))S +4385(Editing)S +4711(a)S +4786(frozen)S +2016 V +720(revision)S +1073(implicitly)S +1494(creates)S +1801(a)S +1876(new)S +2073(one,)S +2273(which)S +2548(can)S +2717(again)S +2964(be)S +3089(changed)S +3451(repeatedly)S +3896(until)S +4110(it)S +4196(is)S +4293(frozen)S +4577(itself.)S +4862(This)S +2196 V +720(approach)S +1123(saves)S +1377(exactly)S +1703(those)S +1952(revisions)S +2352(that)S +2541(the)S +2702(user)S +2907(considers)S +3323(important,)S +3776(and)S +3959(keeps)S +4225(the)S +4386(number)S +4730(of)S +4852(revi-)S +2376 V +720(sions)S +969(manageable.)S +1543(IBM's)S +1847(CLEAR/CASTER)S +2326 V +2587(7)S +2376 V +2637(,)S +2705(AT&T's)S +3092(SCCS)S +2326 V +3338(3)S +2376 V +3388(,)S +3456(CMU's)S +3799(SDC)S +2326 V +3994(8)S +2376 V +4087(and)S +4274(DEC's)S +4589(CMS)S +2326 V +4801(9)S +2376 V +4851(,)S +4919(are)S +2556 V +720(examples)S +1142(of)S +1270(version)S +1609(control)S +1937(systems)S +2299(using)S +2561(this)S +2751(approach.)S +3216(CLEAR/CASTER)S +4001(maintains)S +4435(a)S +4524(data)S +4735(base)S +4957(of)S +2736 V +720(programs,)S +1163(speci\256cations,)S +1773(documentation)S +2407(and)S +2591(messages,)S +3033(using)S +3290(deltas.)S +3618(Its)S +3758(goal)S +3970(is)S +4077(to)S +4195(provide)S +4540(control)S +4863(over)S +2916 V +720(the)S +873(development)S +1420(process)S +1750(from)S +1975(a)S +2050(management)S +2591(viewpoint.)S +3077(SCCS)S +3354(stores)S +3618(multiple)S +3983(revisions)S +4375(of)S +4489(source)S +4780(text)S +4962(in)S +3096 V +720(an)S +861(ancestral)S +1262(tree,)S +1483(records)S +1823(a)S +1913(log)S +2087(entry)S +2338(for)S +2500(each)S +2728(revision,)S +3121(provides)S +3511(access)S +3811(control,)S +4165(and)S +4355(has)S +4534(facilities)S +4924(for)S +3276 V +720(uniquely)S +1100(identifying)S +1569(each)S +1781(revision.)S +2188(An)S +2340(e)S +2384 H + (f)show 10 -.5 mul h (\256)show +10 R +2468(cient)S +2692(delta)S +2916(technique)S +3334(reduces)S +3668(the)S +3820(space)S +4072(consumed)S +4508(by)S +4639(each)S +4852(revi-)S +3456 V +720(sion)S +919(group.)S +1239(SDC)S +1466(is)S +1565(much)S +1819(simpler)S +2151(than)S +2355(SCCS)S +2633(because)S +2980(it)S +3068(stores)S +3333(not)S +3493(more)S +3730(than)S +3934(two)S +4116(revisions.)S +4563(However,)S +4984(it)S +3636 V +720(maintains)S +1140(a)S +1215(complete)S +1612(log)S +1771(for)S +1918(all)S +2049(old)S +2208(revisions,)S +2625(some)S +2867(of)S +2981(which)S +3256(may)S +3459(be)S +3584(on)S +3715(back-up)S +4067(tape.)S +4319(CMS,)S +4587(like)S +4769(SCCS,)S +3816 V +720(manages)S +1099(tree-structured)S +1710(revision)S +2062(groups,)S +2389(but)S +2547(o)S +2597 H + (f)show 10 -.5 mul h (f)show +10 R +2658(ers)S +2804(no)S +2934(identi\256cation)S +3492(mechanism.)S +4032 V +970(Tools)S +1228(for)S +1374(dealing)S +1698(with)S +1906(con\256gurations)S +2508(are)S +2659(still)S +2841(in)S +2950(a)S +3025(state)S +3239(of)S +3353(\257ux.)S +3595(SCCS,)S +3897(SDC)S +4123(and)S +4298(CMS)S +4541(can)S +4710(be)S +4835(com-)S +4212 V +720(bined)S +988(with)S +1211(MAKE)S +1550(or)S +1678(MAKE-like)S +2200(programs.)S +2677(Since)S +2944(\257exible)S +3289(selection)S +3689(rules)S +3928(are)S +4094(missing)S +4451(from)S +4690(all)S +4835(these)S +4392 V +720(tools,)S +986(it)S +1088(is)S +1201(sometimes)S +1675(di)S +1753 H + (f)show 10 -.5 mul h (\256)show +10 R +1837(cult)S +2033(to)S +2157(specify)S +2491(precisely)S +2897(which)S +3187(revision)S +3555(of)S +3685(each)S +3914(group)S +4194(should)S +4508(be)S +4649(passed)S +4962(to)S +4572 V +720(MAKE)S +1055(for)S +1211(building)S +1585(a)S +1669(desired)S +1997(con\256guration.)S +2625(The)S +2820(Xerox)S +3109(Cedar)S +3387(system)S +4522 V +3665(10)S +4572 V +3805(provides)S +4189(a)S +4273(`System)S +4641(Modeller')S +4752 V +720(that)S +903(can)S +1074(rebuild)S +1390(a)S +1467(con\256guration)S +2033(from)S +2260(an)S +2387(arbitrary)S +2763(set)S +2907(of)S +3023(module)S +3356(revisions.)S +3806(The)S +3995(revisions)S +4390(of)S +4507(a)S +4585(module)S +4919(are)S +4932 V +720(only)S +935(distinguished)S +1506(by)S +1643(creation)S +2001(time,)S +2241(and)S +2422(there)S +2658(is)S +2762(no)S +2899(tool)S +3092(for)S +3245(managing)S +3676(groups.)S +4039(Since)S +4297(the)S +4455(selection)S +4846(rules)S +5112 V +720(are)S +871(primitive,)S +1293(the)S +1445(System)S +1770(Modeller)S +2166(appears)S +2500(to)S +2608(be)S +2732(somewhat)S +3167(tedious)S +3486(to)S +3594(use.)S +3812(Apollo's)S +4192(DSEE)S +5062 V +4442(5)S +5112 V +4522(is)S +4620(a)S +4695(sophisti-)S +5292 V +720(cated)S +961(software)S +1335(engineering)S +1837(environment.)S +2428(It)S +2520(manages)S +2900(revision)S +3253(groups)S +3556(in)S +3665(a)S +3740(way)S +3937(similar)S +4245(to)S +4353(SCCS)S +4629(and)S +4803(CMS.)S +5472 V +720(Con\256gurations)S +1359(are)S +1524(built)S +1752(using)S +2013(`con\256guration)S +2624(threads'.)S +3045(A)S +3162(con\256guration)S +3740(thread)S +4034(states)S +4301(which)S +4590(revision)S +4957(of)S +5652 V +720(each)S +947(group)S +1225(named)S +1536(in)S +1659(a)S +1748(con\256guration)S +2326(should)S +2638(be)S +2777(chosen.)S +3154(A)S +3271(con\256guration)S +3849(thread)S +4142(may)S +4358(contain)S +4696(dynamic)S +5832 V +720(speci\256ers)S +1141(\(e.g.,)S +1387(`choose)S +1741(the)S +1908(revisions)S +2314(I)S +2392(am)S +2559(currently)S +2964(working)S +3342(on,)S +3512(and)S +3701(the)S +3868(most)S +4108(recent)S +4396(revisions)S +4802(other-)S +6012 V +720(wise'\),)S +1030(which)S +1310(are)S +1467(bound)S +1753(automatically)S +2332(at)S +2439(build)S +2680(time.)S +2948(It)S +3044(also)S +3240(provides)S +3619(a)S +3698(noti\256cation)S +4189(mechanism)S +4679(for)S +4830(alert-)S +6192 V +720(ing)S +878(maintainers)S +1374(about)S +1626(the)S +1778(need)S +1996(to)S +2104(rebuild)S +2417(a)S +2491(system)S +2799(after)S +3011(a)S +3085(change.)S +6408 V +970(RCS)S +1195(is)S +1298(based)S +1561(on)S +1697(a)S +1777(general)S +2106(model)S +2392(for)S +2544(describing)S +2996(multi-version/multi-con\256guration)S +4377(systems)S +6358 V +4694(11)S +6408 V +4794(.)S +4885(The)S +6588 V +720(model)S +1017(describes)S +1435(systems)S +1798(using)S +2061(AND/OR)S +2490(graphs,)S +2827(where)S +3116(AND)S +3378(nodes)S +3657(represent)S +4068(con\256gurations,)S +4711(and)S +4901(OR)S +6768 V +720(nodes)S +1012(represent)S +1436(version)S +1789(groups.)S +2175(The)S +2389(model)S +2698(gives)S +2968(rise)S +3171(to)S +3308(a)S +3411(suit)S +3615(of)S +3757(selection)S +4171(rules)S +4425(for)S +4601(composing)S +6948 V +720(con\256gurations,)S +1354(almost)S +1658(all)S +1795(of)S +1915(which)S +2196(are)S +2354(implemented)S +2913(in)S +3028(RCS.)S +3310(The)S +3501(revisions)S +3898(selected)S +4255(by)S +4391(RCS)S +4617(are)S +4774(passed)S +7128 V +720(to)S +831(MAKE)S +1158(for)S +1307(con\256guration)S +1873(building.)S +2295(Revision)S +2684(group)S +2950(management)S +3493(is)S +3593(modelled)S +3999(after)S +4215(SCCS.)S +4550(RCS)S +4774(retains)S +7308 V +720(SCCS's)S +1080(best)S +1283(features,)S +1665(but)S +1835(o)S +1885 H + (f)show 10 -.5 mul h (f)show +10 R +1946(ers)S +2104(a)S +2190(signi\256cantly)S +2727(simpler)S +3068(user)S +3275(interface,)S +3689(\257exible)S +4030(selection)S +4426(rules,)S +4686(adequate)S +7920 V +EP +%%Page: 17 18 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +580 V +2767(- 17 -)S +900 V +720(integration)S +1190(with)S +1405(MAKE)S +1736(and)S +1917(improved)S +2337(identi\256cation.)S +2957(A)S +3066(detailed)S +3419(comparison)S +3922(of)S +4042(RCS)S +4270(and)S +4452(SCCS)S +4736(appears)S +1080 V +720(in)S +828(Reference)S +1261(4.)S +1296 V +970(An)S +1126(important)S +1549(component)S +2027(of)S +2144(all)S +2278(revision)S +2634(control)S +2951(systems)S +3303(is)S +3405(a)S +3484(program)S +3857(for)S +4008(computing)S +4471(deltas.)S +4794(SCCS)S +1476 V +720(and)S +896(RCS)S +1118(use)S +1283(the)S +1437(program)S +10 I +1807(diff)S +1426 V +10 R +1941(2)S +1476 V +1991(,)S +2048(which)S +2324(\256rst)S +2512(computes)S +2927(the)S +3081(longest)S +3402(common)S +3784(substring)S +4183(of)S +4298(two)S +4479(revisions,)S +4896(and)S +1656 V +720(then)S +927(produces)S +1322(the)S +1479(delta)S +1708(from)S +1937(that)S +2122(substring.)S +2579(The)S +2769(delta)S +2998(is)S +3100(simply)S +3408(an)S +3537(edit)S +3722(script)S +3979(consisting)S +4420(of)S +4538(deletion)S +4896(and)S +1836 V +720(insertion)S +1100(commands)S +1563(that)S +1743(generate)S +2110(one)S +2284(revision)S +2636(from)S +2860(the)S +3012(other.)S +2052 V +970(A)S +1078(delta)S +1308(based)S +1571(on)S +1707(a)S +1787(longest)S +2112(common)S +2498(substring)S +2901(is)S +3004(not)S +3168(necessarily)S +3648(minimal,)S +4044(because)S +4396(it)S +4489(does)S +4709(not)S +4874(take)S +2232 V +720(advantage)S +1156(of)S +1271(crossing)S +1636(block)S +1890(moves.)S +2238(Crossing)S +2626(block)S +2880(moves)S +3173(arise)S +3392(if)S +3484(two)S +3665(or)S +3779(more)S +4015(blocks)S +4307(of)S +4421(lines)S +4641(\(e.g.,)S +4874(pro-)S +2412 V +720(cedures\))S +1090(appear)S +1388(in)S +1499(a)S +1576(di)S +1654 H + (f)show 10 -.5 mul h (f)show +10 R +1715(erent)S +1947(order)S +2190(in)S +2301(two)S +2484(revisions.)S +2933(An)S +3088(edit)S +3271(script)S +3526(derived)S +3858(from)S +4085(a)S +4162(longest)S +4484(common)S +4868(sub-)S +2592 V +720(string)S +987(\256rst)S +1182(deletes)S +1498(the)S +1659(shorter)S +1975(of)S +2097(the)S +2258(two)S +2447(blocks,)S +2772(and)S +2955(then)S +3166(reinserts)S +3543(it.)S +3693(Heckel)S +2542 V +3975(12)S +2592 V +4114(proposed)S +4519(an)S +4651(algorithm)S +2772 V +720(for)S +884(detecting)S +1298(block)S +1568(moves,)S +1902(but)S +2078(since)S +2331(the)S +2501(algorithm)S +2938(is)S +3053(based)S +3328(on)S +3476(heuristics,)S +3932(there)S +4179(are)S +4348(conditions)S +4813(under)S +2952 V +720(which)S +997(the)S +1152(generated)S +1572(delta)S +1799(is)S +1899(far)S +2042(from)S +2269(minimal.)S +2691(DSEE)S +2974(uses)S +3179(this)S +3357(algorithm)S +3779(combined)S +4205(with)S +4415(blank)S +4669(compres-)S +3132 V +720(sion,)S +965(apparently)S +1439(with)S +1670(satisfactory)S +2183(overall)S +2514(results.)S +2884(A)S +3010(new)S +3230(algorithm)S +3673(that)S +3877(is)S +3998(guaranteed)S +4489(to)S +4621(produce)S +4996(a)S +3312 V +720(minimal)S +1085(delta)S +1310(based)S +1568(on)S +1699(block)S +1951(moves)S +2242(appears)S +2576(in)S +2684(Reference)S +3117(13.)S +3302(A)S +3404(future)S +3672(release)S +3978(of)S +4091(RCS)S +4311(will)S +4497(use)S +4660(this)S +4835(algo-)S +3492 V +720(rithm.)S +3708 V +10 I +970(Acknowledgements)S +10 R +1735(:)S +1818(Many)S +2106(people)S +2427(have)S +2670(helped)S +2991(make)S +3262(RCS)S +3507(a)S +3606(success)S +3960(by)S +4115(contributed)S +4626(criticisms,)S +3888 V +720(suggestions,)S +1246(corrections,)S +1748(and)S +1926(even)S +2148(whole)S +2426(new)S +2626(commands)S +3093(\(including)S +3538(manual)S +3866(pages\).)S +4214(The)S +4402(list)S +4558(of)S +4674(people)S +4973(is)S +4068 V +720(too)S +878(long)S +1086(to)S +1194(be)S +1318(reproduced)S +1796(here,)S +2022(but)S +2180(my)S +2338(sincere)S +2650(thanks)S +2941(for)S +3087(their)S +3300(help)S +3502(and)S +3676(goodwill)S +4062(goes)S +4275(to)S +4383(all)S +4513(of)S +4626(them.)S +4488 V +10 B +720(Appendix:)S +1201(Synopsis)S +1605(of)S +1718(RCS)S +1948(Operations)S +4680 V +10 I +720(ci)S +10 B +822(\261)S +902(check)S +1176(in)S +1290(revisions)S +4800 V +10 I +970(Ci)S +10 R +1102(stores)S +1372(the)S +1531(contents)S +1901(of)S +2021(a)S +2102(working)S +2472(\256le)S +2637(into)S +2830(the)S +2989(corresponding)S +3598(RCS)S +3826(\256le)S +3992(as)S +4113(a)S +4195(new)S +4399(revision.)S +4814(If)S +4918(the)S +4920 V +970(RCS)S +1191(\256le)S +1350(doesn't)S +1675(exist,)S +10 I +1920(ci)S +10 R +2023(creates)S +2330(it.)S +10 I +2472(Ci)S +10 R +2598(removes)S +2967(the)S +3120(working)S +3484(\256le,)S +3668(unless)S +3949(one)S +4124(of)S +4238(the)S +4391(options)S +10 I +4717(\261u)S +10 R +4848(or)S +10 I +4962(\261l)S +5040 V +10 R +970(is)S +1071(present.)S +1448(For)S +1621(each)S +1837(check-in,)S +10 I +2239(ci)S +10 R +2345(asks)S +2551(for)S +2701(a)S +2779(commentary)S +3312(describing)S +3763(the)S +3920(changes)S +4276(relative)S +4610(to)S +4723(the)S +4880(pre-)S +5160 V +970(vious)S +1217(revision.)S +5400 V +10 I +970(Ci)S +10 R +1111(assigns)S +1446(the)S +1614(revision)S +1982(number)S +2333(given)S +2601(by)S +2747(the)S +10 I +2915(\261r)S +10 R +3050(option;)S +3380(if)S +3487(that)S +3683(option)S +3985(is)S +4098(missing,)S +4481(it)S +4583(derives)S +4918(the)S +5520 V +970(number)S +1313(from)S +1545(the)S +1705(lock)S +1915(held)S +2125(by)S +2263(the)S +2423(user;)S +2655(if)S +2754(there)S +2991(is)S +3096(no)S +3234(lock)S +3444(and)S +3625(locking)S +3962(is)S +4066(not)S +4231(strict,)S +10 I +4493(ci)S +10 R +4602(increments)S +5640 V +970(the)S +1136(number)S +1485(of)S +1612(the)S +1778(latest)S +2033(revision)S +2399(on)S +2544(the)S +2711(trunk.)S +3022(A)S +3139(side)S +3345(branch)S +3661(can)S +3844(only)S +4067(be)S +4206(started)S +4517(by)S +4662(explicitly)S +5760 V +970(specifying)S +1416(its)S +1541(number)S +1876(with)S +2084(the)S +10 I +2236(\261r)S +10 R +2355(option)S +2641(during)S +2932(check-in.)S +6000 V +10 I +970(Ci)S +10 R +1106(also)S +1308(determines)S +1787(whether)S +2149(the)S +2312(revision)S +2675(to)S +2794(be)S +2929(checked)S +3296(in)S +3415(is)S +3523(di)S +3601 H + (f)show 10 -.5 mul h (f)show +10 R +3662(erent)S +3902(from)S +4137(the)S +4300(previous)S +4685(one,)S +4896(and)S +6120 V +970(asks)S +1194(whether)S +1567(to)S +1697(proceed)S +2064(if)S +2177(not.)S +2412(This)S +2642(facility)S +2977(simpli\256es)S +3419(check-in)S +3814(operations)S +4281(for)S +4448(large)S +4698(systems,)S +6240 V +970(because)S +1315(one)S +1489(need)S +1707(not)S +1865(remember)S +2299(which)S +2573(\256les)S +2770(were)S +2993(changed.)S +6480 V +970(The)S +1161(option)S +10 I +1453(\261k)S +10 R +1583(searches)S +1956(the)S +2114(checked)S +2476(in)S +2590(\256le)S +2754(for)S +2906(identi\256cation)S +3470(markers)S +3827(containing)S +4285(the)S +4443(attributes)S +4852(revi-)S +6600 V +970(sion)S +1169(number,)S +1530(check-in)S +1904(date,)S +2126(author)S +2412(and)S +2587(state,)S +2826(and)S +3001(assigns)S +3321(these)S +3557(to)S +3666(the)S +3819(new)S +4016(revision)S +4369(rather)S +4632(than)S +4835(com-)S +6720 V +970(puting)S +1275(them.)S +1579(This)S +1806(option)S +2111(is)S +2227(useful)S +2520(for)S +2685(software)S +3077(distribution:)S +3616(Recipients)S +4087(of)S +4219(distributed)S +4697(software)S +6840 V +970(using)S +1227(RCS)S +1457(should)S +1764(check)S +2036(in)S +2154(updates)S +2499(with)S +2717(the)S +10 I +2879(\261k)S +10 R +3013(option.)S +3364(This)S +3581(convention)S +4064(guarantees)S +4529(that)S +4718(revision)S +6960 V +970(numbers,)S +1369(check-in)S +1742(dates,)S +2002(etc.,)S +2198(are)S +2349(the)S +2501(same)S +2736(at)S +2838(all)S +2968(sites.)S +7116 V +10 I +720(co)S +10 B +844(\261)S +924(check)S +1198(out)S +1367(revisions)S +7236 V +10 I +970(Co)S +10 R +1136(retrieves)S +1528(revisions)S +1938(according)S +2380(to)S +2507(revision)S +2878(number,)S +3257(date,)S +3497(author)S +3801(and)S +3994(state)S +4226(attributes.)S +4702(It)S +4813(either)S +7920 V +EP +%%Page: 18 19 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +40 V +0(-)S +520 V +2767(- 18 -)S +840 V +970(places)S +1251(the)S +1405(revision)S +1759(into)S +1947(the)S +2101(working)S +2465(\256le,)S +2649(or)S +2763(prints)S +3022(it)S +3109(on)S +3240(the)S +3393(standard)S +3762(output.)S +10 I +4104(Co)S +10 R +4252(always)S +4560(expands)S +4918(the)S +960 V +970(identi\256cation)S +1528(markers.)S +1116 V +10 I +720(ident)S +10 B +950(\261)S +1030(extract)S +1358(identi\256cation)S +1950(markers)S +1236 V +10 I +970(Ident)S +10 R +1205(extracts)S +1545(the)S +1697(identi\256cation)S +2255(markers)S +2606(expanded)S +3018(by)S +10 I +3148(co)S +10 R +3272(from)S +3496(any)S +3670(\256le)S +3828(and)S +4002(prints)S +4260(them.)S +1392 V +10 I +720(rcs)S +10 B +872(\261)S +952(change)S +1282(RCS)S +1512(\256le)S +1670(attributes)S +1512 V +10 I +970(Rcs)S +10 R +1144(is)S +1241(an)S +1365(administrative)S +1967(operation)S +2374(that)S +2554(changes)S +2905(access)S +3189(lists,)S +3406(locks,)S +3673(unlocks,)S +4040(breaks)S +4331(locks,)S +4598(toggles)S +4918(the)S +1632 V +970(strict-locking)S +1541(feature,)S +1880(sets)S +2068(state)S +2289(attributes)S +2699(and)S +2881(symbolic)S +3286(revision)S +3646(numbers,)S +4053(changes)S +4412(the)S +4571(description,)S +1752 V +970(and)S +1144(deletes)S +1451(revisions.)S +1897(A)S +1999(revision)S +2351(can)S +2519(only)S +2727(be)S +2851(deleted)S +3169(if)S +3260(it)S +3346(is)S +3443(not)S +3601(the)S +3753(fork)S +3949(of)S +4062(a)S +4136(side)S +4327(branch.)S +1908 V +10 I +720(rcsclean)S +10 B +1088(\261)S +1168(clean)S +1420(working)S +1806(directory)S +2028 V +10 I +970(Rcsclean)S +10 R +1360(removes)S +1728(working)S +2091(\256les)S +2288(that)S +2468(were)S +2691(checked)S +3047(out)S +3205(but)S +3363(never)S +3614(changed.*)S +2184 V +10 I +720(rcsdiff)S +10 B +1006(\261)S +1086(compare)S +1487(revisions)S +2304 V +10 I +970(Rcsdiff)S +10 R +1289(compares)S +1712(two)S +1903(revisions)S +2305(and)S +2490(prints)S +2759(their)S +2983(di)S +3061 H + (f)show 10 -.5 mul h (f)show +10 R +3122(erence,)S +3447(using)S +3705(the)S +3868(UNIX)S +4158(tool)S +10 I +4355(diff)S +10 R +4489(.)S +4585(One)S +4793(of)S +4918(the)S +2424 V +970(revisions)S +1361(compared)S +1784(may)S +1986(be)S +2110(checked)S +2466(out.)S +2679(This)S +2887(command)S +3311(is)S +3408(useful)S +3682(for)S +3828(\256nding)S +4142(out)S +4300(about)S +4552(changes.)S +2580 V +10 I +720(rcsfreeze)S +10 B +1110(\261)S +1190(freeze)S +1473(a)S +1553(con\256guration)S +2700 V +10 I +970(Rcsfreeze)S +10 R +1394(assigns)S +1726(the)S +1891(same)S +2139(symbolic)S +2549(revision)S +2914(number)S +3262(to)S +3383(a)S +3470(given)S +3735(revision)S +4100(in)S +4221(all)S +4364(RCS)S +4597(\256les.)S +4862(This)S +2820 V +970(command)S +1394(is)S +1491(useful)S +1765(for)S +1911(accurately)S +2350(recording)S +2762(a)S +2836(con\256guration.*)S +2976 V +10 I +720(rcsmerge)S +10 B +1121(\261)S +1201(merge)S +1496(revisions)S +3096 V +10 I +970(Rcsmerge)S +10 R +1400(merges)S +1725(two)S +1912(revisions,)S +10 I +2335(rev1)S +10 R +2549(and)S +10 I +2730(rev2)S +10 R +2907(,)S +2969(with)S +3184(respect)S +3504(to)S +3620(a)S +3702(common)S +4090(ancestor.)S +4515(A)S +4625(3-way)S +4912(\256le)S +3216 V +970(comparison)S +1472(determines)S +1946(the)S +2104(segments)S +2512(of)S +2631(lines)S +2856(that)S +3042(are)S +3199(\(a\))S +3345(the)S +3503(same)S +3744(in)S +3858(all)S +3994(three)S +4228(revisions,)S +4649(or)S +4767(\(b\))S +4918(the)S +3336 V +970(same)S +1216(in)S +1336(2)S +1428(revisions,)S +1856(or)S +1981(\(c\))S +2133(di)S +2211 H + (f)show 10 -.5 mul h (f)show +10 R +2272(erent)S +2513(in)S +2633(all)S +2775(three.)S +3071(For)S +3252(all)S +3394(segments)S +3808(of)S +3933(type)S +4147(\(b\))S +4305(where)S +10 I +4590(rev1)S +10 R +4809(is)S +4918(the)S +3456 V +970(di)S +1048 H + (f)show 10 -.5 mul h (f)show +10 R +1109(ering)S +1350(revision,)S +1733(the)S +1891(segment)S +2260(in)S +10 I +2374(rev1)S +10 R +2587(replaces)S +2949(the)S +3107(corresponding)S +3713(segment)S +4081(of)S +10 I +4199(rev2)S +10 R +4376(.)S +4466(Type)S +4706(\(c\))S +4851(indi-)S +3576 V +970(cates)S +1215(an)S +1355(overlapping)S +1878(change,)S +2231(is)S +2344(\257agged)S +2684(as)S +2813(an)S +2953(error,)S +3217(and)S +3408(requires)S +3776(user)S +3989(intervention)S +4519(to)S +4644(select)S +4918(the)S +3696 V +970(correct)S +1276(alternative.)S +3852 V +10 I +720(rlog)S +10 B +917(\261)S +997(read)S +1221(log)S +1379(messages)S +3972 V +10 I +970(Rlog)S +10 R +1189(prints)S +1447(the)S +1599(log)S +1757(messages)S +2164(and)S +2338(other)S +2573(information)S +3075(in)S +3183(an)S +3307(RCS)S +3527(\256le.)S +6962 V +8 Y1 +720(333333333333333333)S +7080 V +8 R +820(*)S +900(The)S +8 I +1048(rcsclean)S +8 R +1341(and)S +8 I +1480(rcsfreeze)S +8 R +1790(commands)S +2159(are)S +2279(optional)S +2564(and)S +2703(are)S +2823(not)S +2949(always)S +3194(installed.)S +7920 V +EP +%%Page: 19 20 +BP +/slant 0 def +/height 1.000000 def +8 R +8 R +40 V +10 R +0(-)S +520 V +2767(- 19 -)S +840 V +10 B +720(References)S +1032 V +10 R +720(1.)S +970(Feldman,)S +1378(Stuart)S +1650(I.,)S +1766(``Make\320A)S +2264(Program)S +2642(for)S +2792(Maintaining)S +3315(Computer)S +3749(Programs,'')S +10 I +4257(Software\320Practice)S +1152 V +970(&)S +1078(Experience)S +10 R +1526(,)S +1581(vol.)S +1764(9,)S +1869(no.)S +2024(3,)S +2129(pp.)S +2284(255-265,)S +2672(March)S +2962(1979.)S +1308 V +720(2.)S +970(Hunt,)S +1229(James)S +1507(W.)S +1660(and)S +1838(McIlroy,)S +2224(M.)S +2372(D.,)S +2528(``An)S +2750(Algorithm)S +3201(for)S +3351(Di)S +3451 H + (f)show 10 -.5 mul h (f)show +10 R +3512(erential)S +3846(File)S +4037(Comparison,'')S +4652(41,)S +4812(Com-)S +1428 V +970(puting)S +1256(Science)S +1596(Technical)S +2019(Report,)S +2346(Bell)S +2543(Laboratories,)S +3102(June)S +3315(1976.)S +1584 V +720(3.)S +970(Rochkind,)S +1414(Marc)S +1654(J.,)S +1773(``The)S +2024(Source)S +2331(Code)S +2572(Control)S +2908(System,'')S +10 I +3324(IEEE)S +3570(Transactions)S +4123(on)S +4254(Software)S +4641(Engineer-)S +1704 V +970(ing)S +10 R +1098(,)S +1153(vol.)S +1336(SE-1,)S +1591(no.)S +1746(4,)S +1851(pp.)S +2006(364-370,)S +2394(Dec.)S +2609(1975.)S +1860 V +720(4.)S +970(Tichy,)S +1275(Walter)S +1593(F.,)S +1746(``Design,)S +2168(Implementation,)S +2874(and)S +3066(Evaluation)S +3547(of)S +3678(a)S +3770(Revision)S +4174(Control)S +4528(System,'')S +4962(in)S +1980 V +10 I +970(Proceedings)S +1503(of)S +1615(the)S +1771(6th)S +1933(International)S +2495(Conference)S +2989(on)S +3123(Software)S +3512(Engineering)S +10 R +4006(,)S +4064(pp.)S +4222(58-67,)S +4513(ACM,)S +4799(IEEE,)S +2100 V +970(IPS,)S +1170(NBS,)S +1420(September)S +1877(1982.)S +2256 V +720(5.)S +970(Leblang,)S +1357(David)S +1636(B.)S +1763(and)S +1942(Chase,)S +2247(Robert)S +2555(P.,)S +2697(``Computer-Aided)S +3476(Software)S +3872(Engineering)S +4396(in)S +4510(a)S +4590(Distributed)S +2376 V +970(Workstation)S +1505(Environment,'')S +10 I +2159(SIGPLAN)S +2600(Notices)S +10 R +2900(,)S +2966(vol.)S +3160(19,)S +3325(no.)S +3490(5,)S +3605(pp.)S +3770(104-112,)S +4168(May)S +4391(1984.)S +4686(Proceed-)S +2496 V +970(ings)S +1184(of)S +1314(the)S +1484(ACM)S +1760(SIGSOFT/SIGPLAN)S +2664(Software)S +3072(Engineering)S +3608(Symposium)S +4135(on)S +4283(Practical)S +4680(Software)S +2616 V +970(Development)S +1538(Environments.)S +2772 V +720(6.)S +970(Glasser,)S +1325(Alan)S +1551(L.,)S +1694(``The)S +1947(Evolution)S +2374(of)S +2489(a)S +2565(Source)S +2874(Code)S +3117(Control)S +3455(System,'')S +10 I +3873(Software)S +4261(Engineering)S +4787(Notes)S +10 R +5015(,)S +2892 V +970(vol.)S +1180(3,)S +1312(no.)S +1494(5,)S +1626(pp.)S +1808(122-125,)S +2223(Nov.)S +2477(1978.)S +2789(Proceedings)S +3334(of)S +3474(the)S +3653(Software)S +4069(Quality)S +4425(and)S +4625(Assurance)S +3012 V +970(Workshop.)S +3168 V +720(7.)S +970(Brown,)S +1297(H.B.,)S +1541(``The)S +1792(Clear/Caster)S +2321(System,'')S +10 I +2737(Nato)S +2962(Conference)S +3452(on)S +3582(Software)S +3968(Engineering,)S +4517(Rome)S +10 R +4744(,)S +4799(1970.)S +3324 V +720(8.)S +970(Habermann,)S +1493(A.)S +1623(Nico,)S +10 I +1875(A)S +1969(Software)S +2358(Development)S +2918(Control)S +3264(System,)S +10 R +3600(Technical)S +4027(Report,)S +4358(Carnegie-Mellon)S +3444 V +970(University,)S +1447(Department)S +1948(of)S +2061(Computer)S +2491(Science,)S +2856(Jan.)S +3044(1979.)S +3600 V +720(9.)S +970(DEC,)S +10 I +1258(Code)S +1532(Management)S +2116(System,)S +10 R +2481(Digital)S +2823(Equipment)S +3326(Corporation,)S +3898(1982.)S +4217(Document)S +4697(No. EA-)S +3720 V +970(23134-82)S +3876 V +720(10.)S +970(Lampson,)S +1437(Butler)S +1757(W.)S +1946(and)S +2160(Schmidt,)S +2589(Eric)S +2825(E.,)S +3006(``Practical)S +3491(Use)S +3717(of)S +3871(a)S +3986(Polymorphic)S +4574(Applicative)S +3996 V +970(Language,'')S +1491(in)S +10 I +1606(Proceedings)S +2142(of)S +2257(the)S +2416(10th)S +2630(Symposium)S +3121(on)S +3257(Principles)S +3704(of)S +3818(Programming)S +4415(Languages)S +10 R +4854(,)S +4915(pp.)S +4116 V +970(237-255,)S +1358(ACM,)S +1641(January)S +1981(1983.)S +4272 V +720(11.)S +970(Tichy,)S +1260(Walter)S +1563(F.,)S +1701(``A)S +1871(Data)S +2091(Model)S +2385(for)S +2534(Programming)S +3117(Support)S +3467(Environments)S +4061(and)S +4238(its)S +4366(Application,'')S +4962(in)S +4392 V +10 I +970(Automated)S +1438(Tools)S +1696(for)S +1848(Information)S +2361(System)S +2673(Design)S +2991(and)S +3176(Development)S +10 R +3702(,)S +3761(ed.)S +3914(Hans-Jochen)S +4463(Schneider)S +4896(and)S +4512 V +970(Anthony)S +1350(I.)S +1438(Wasserman,)S +1958(North-Holland)S +2576(Publishing)S +3035(Company,)S +3479(Amsterdam,)S +4000(1982.)S +4668 V +720(12.)S +970(Heckel,)S +1328(Paul,)S +1582(``A)S +1771(Technique)S +2243(for)S +2410(Isolating)S +2811(Di)S +2911 H + (f)show 10 -.5 mul h (f)show +10 R +2972(erences)S +3321(Between)S +3721(Files,'')S +10 I +4058(Communications)S +4788(of)S +4918(the)S +4788 V +970(ACM)S +10 R +1181(,)S +1236(vol.)S +1419(21,)S +1574(no.)S +1729(4,)S +1834(pp.)S +1989(264-268,)S +2377(April)S +2618(1978.)S +4944 V +720(13.)S +970(Tichy,)S +1270(Walter)S +1583(F.,)S +1731(``The)S +1994(String-to-String)S +2670(Correction)S +3139(Problem)S +3520(with)S +3740(Block)S +4021(Moves,'')S +10 I +4426(ACM)S +4679(Transac-)S +5064 V +970(tions)S +1195(on)S +1325(Computer)S +1755(Systems)S +10 R +2071(,)S +2126(vol.)S +2309(2,)S +2414(no.)S +2569(4,)S +2674(pp.)S +2829(309-321,)S +3217(Nov.)S +3444(1984.)S +7950 V +0(-)S +7950 V +EP +%%Trailer +%%DocumentFonts: Courier Times-Roman Times-Bold Times-Italic Symbol Troff +%%Pages: 20 diff --git a/usr/src/contrib/rcs-V5.6/rcs_func.ms b/usr/src/contrib/rcs-V5.6/rcs_func.ms new file mode 100644 index 0000000000..9818086c3d --- /dev/null +++ b/usr/src/contrib/rcs-V5.6/rcs_func.ms @@ -0,0 +1,95 @@ +.SH +Functions of RCS (Revision Control System) +.PP +RCS manages software libraries. It greatly increases programmer productivity +by providing the following functions. +.IP 1. +RCS stores and retrieves multiple revisions of program and other text. +Thus, one can maintain one or more releases while developing the next +release, with a minimum of space overhead. Changes no longer destroy the +original -- previous revisions remain accessible. +.RS +.IP a. +Maintains each module as a tree of revisions. +.IP b. +Project libraries can +be organized centrally, decentralized, or any way you like. +.IP c. +RCS works for any type of text: programs, documentation, memos, papers, +graphics, VLSI layouts, form letters, etc. +.RE +.IP 2. +RCS maintains a complete history of changes. +Thus, one can find out what happened to a module easily +and quickly, without having to compare source listings or +having to track down colleagues. +.RS +.IP a. +RCS performs automatic record keeping. +.IP b. +RCS logs all changes automatically. +.IP c. +RCS guarantees project continuity. +.RE +.IP 3. +RCS manages multiple lines of development. +.IP 4. +RCS can merge multiple lines of development. +Thus, when several parallel lines of development must be consolidated +into one line, the merging of changes is automatic. +.IP 5. +RCS flags coding conflicts. +If two or more lines of development modify the same section of code, +RCS can alert programmers about overlapping changes. +.IP 6. +RCS resolves access conflicts. +When two or more programmers wish to modify the same revision, +RCS alerts the programmers and makes sure that one modification won't wipe +out the other one. +.IP 7. +RCS provides high-level retrieval functions. +Revisions can be retrieved according to ranges of revision numbers, +symbolic names, dates, authors, and states. +.IP 8. +RCS provides release and configuration control. +Revisions can be marked as released, stable, experimental, etc. +Configurations of modules can be described simply and directly. +.IP 9. +RCS performs automatic identification of modules with name, revision +number, creation time, author, etc. +Thus, it is always possible to determine which revisions of which +modules make up a given configuration. +.IP 10. +Provides high-level management visibility. +Thus, it is easy to track the status of a software project. +.RS +.IP a. +RCS provides a complete change history. +.IP b. +RCS records who did what when to which revision of which module. +.RE +.IP 11. +RCS is fully compatible with existing software development tools. +RCS is unobtrusive -- its interface to the file system is such that +all your existing software tools can be used as before. +.IP 12. +RCS' basic user interface is extremely simple. The novice need to learn +only two commands. Its more sophisticated features have been +tuned towards advanced software development environments and the +experienced software professional. +.IP 13. +RCS simplifies software distribution if customers +maintain sources with RCS also. This technique assures proper +identification of versions and configurations, and tracking of customer +modifications. Customer modifications can be merged into distributed +versions locally or by the development group. +.IP 14. +RCS needs little extra space for the revisions (only the differences). +If intermediate revisions are deleted, the corresponding +differences are compressed into the shortest possible form. +.IP 15. +RCS is implemented with reverse deltas. This means that +the latest revision, which is the one that is accessed most often, +is stored intact. All others are regenerated from the latest one +by applying reverse deltas (backward differences). This +results in fast access time for the revision needed most often. -- 2.20.1