home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / rcstxi11.zip / rcstexi.110 / rcs.inf (.txt) < prev    next >
GNU Info File  |  1997-03-30  |  202KB  |  4,213 lines

  1. This is Info file rcs.inf, produced by Makeinfo-1.63 from the input
  2. file vc.tex.
  3.    This file documents the Revision Control System (RCS).
  4.    Permission is granted to make and distribute verbatim copies of this
  5. manual provided the copyright notice and this permission notice are
  6. preserved on all copies.
  7.    Permission is granted to copy and distribute modified versions of
  8. this manual under the conditions for verbatim copying, provided that
  9. the entire resulting derived work is distributed under the terms of a
  10. permission notice identical to this one.
  11.    Permission is granted to copy and distribute translations of this
  12. manual into another language, under the above conditions for modified
  13. versions, except that this permission notice may be stated in a
  14. translation approved by the Foundation.
  15.    Copyright (C) 1982, 1988, 1989 Walter F. Tichy.
  16.    Copyright (C)  1990, 1991, 1992, 1993, 1994, 1995 Paul Eggert.
  17.    Copyright (C)  1996, 1997 Karl Heinz Marbaise (doing converting job)
  18. File: rcs,  Node: Top,  Up: (dir)
  19.    This manual(Edition 1.1) documents version 5.7 of the Revision
  20. Control System (RCS).
  21. * Menu:
  22. - About the manual -
  23. * About::               About the manul.
  24. * AboutDesc::           Informations about that manual.
  25. * Versions::            Versions of the troff/nroff manuals.
  26. * BugReport::           Bugs? suggestions?
  27. - RCS - A System for Version Control -
  28. * VersionControl::      RCS - A System for Version Control.
  29. * Introduction::        Introduction to RCS.
  30. * StartRCS::            Getting started with RCS.
  31. * Identification::      Automatic Identification.
  32. * RevisionTree::        The RCS Revision Tree.
  33. * Branches::            When are branches needed?.
  34. * Deltas::              Revisions are represented as deltas.
  35. * Controversial::       Locking: A Controversial Issue.
  36. * Configuration::       Configuration Management.
  37. * Functions::           RCS Selection Functions.
  38. * MAKERCS::             Combining MAKE and RCS.
  39. * Statistics::          Usage Statistics.
  40. * Survey::              Survey of Version Control Tools.
  41. - rcsintro - introduction to RCS commands -
  42. * rcsIntroduction::     Introduction to RCS commands.
  43. * rcsintroDesc::        Introduction to `RCS'.
  44. * rcsintroFunc::        Functions of `RCS'.
  45. * rcsintroStart::       Getting started with `RCS'.
  46. * rcsintroAutoIdent::   Automatic identification.
  47. - Synopsis of RCS Operations -
  48. * Synopsis::            Synopsis of RCS Operations.
  49. - ci - check in RCS revsisions -
  50. * CheckIn::             ci - check in RCS revsisions.
  51. * ciIntro::             Introduction to `ci'.
  52. * ciEnv::               Environment which can change
  53.                         the behaviour of `ci' and
  54.                         other RCS commands.
  55. * ciFileModes::         File modes.
  56. * ciFiles::             Files.
  57. * setuid use::          Using of uid.
  58. * ciExamples::          Examples.
  59. * ciDiag::              Diagnostic output of `ci'.
  60. * ciOptions::           command line options of `ci'.
  61. - co - check out RCS revsisions -
  62. * CheckOut::            co - check out RCS revsisions
  63. * coIntro::             Introduction to `co'.
  64. * coOptions::           command line options of `co'.
  65. * coKeyword::           Keyword expansion and valid keywords.
  66. * coEnv::               Environment which can change
  67.                         the behaviour of `co' and
  68.                         other RCS commands.
  69. * coFileModes::         File modes.
  70. * coFiles::             Files.
  71. * coDiag::              Diagnostic output of `co'.
  72. * coLimits::            Limits.
  73. - rcs - change RCS file attributes -
  74. * rcs::                 rcs - change RCS file attributes.
  75. * rcsIntro::            Introduction to `rcs'.
  76. * rcsOptions::          command line options of `rcs'.
  77. * rcsCompatibility::    Compatibility between RCS Versions.
  78. * rcsFiles::            Files.
  79. * rcsEnv::              The Environment which can change the
  80.                         behaviour of much of the RCS commands.
  81. * rcsDiag::             Diagnostic output of `rcs'.
  82. * rcsBugs::             Bugs.
  83. - ident - identify RCS keyword strings in files -
  84. * ident::               ident - identify RCS keyword strings in files.
  85. * identIntro::          Introduction to `rcs'.
  86. * identOptions::        command line options of `rcs'.
  87. * identKeywords::       Keywords.
  88. - rcsclean - clean up working files -
  89. * rcsclean::            rcsclean - clean up working files.
  90. * rcscleanIntro::       Introduction to `rcsclean'.
  91. * rcscleanOptions::     command line options of `rcsclean'.
  92. * rcscleanExamples::    Examples in using `rcsclean'.
  93. * rcscleanFiles::       Files.
  94. * rcscleanEnv::         The Environment which can change the
  95.                         behaviour of much of the RCS commands.
  96. * rcscleanDiag::        Diagnostic output of `rcsclean'.
  97. * rcscleanBugs::        Bugs.
  98. - rcsdiff - compare RCS revisions -
  99. * rcsdiff::             rcsdiff - compare RCS revisions.
  100. * rcsdiffIntro::        Introduction to `rcsdiff'.
  101. * rcsdiffOptions::      command line options of `rcsdiff'.
  102. * rcsdiffExamples::     Examples in using `rcsdiff'.
  103. * rcsdiffEnv::          The Environment which can change the
  104.                         behaviour of much of the RCS commands.
  105. * rcsdiffDiag::         Diagnostic output of `rcsdiff'.
  106. - rcsmerge - merge RCS versions -
  107. * rcsmerge::            rcsmerge - merge RCS versions.
  108. * rcsmergeIntro::       Introduction to `rcs'.
  109. * rcsmergeOptions::     command line options of `rcs'.
  110. * rcsmergeExamples::    Examples of `rcsmerge'.
  111. * rcsmergeEnv::         The Environment which can change the
  112.                         behaviour of much of the RCS commands.
  113. * rcsmergeDiag::        Diagnostic output of `rcs'.
  114. - rlog - print log messages and other information about RCS files -
  115. * rlog::                rlog - print log messages and other
  116.                         information about RCS files.
  117. * rlogIntro::           Introduction to `rlog'.
  118. * rlogOptions::         command line options of `rlog'.
  119. * rlogExamples::        Examples.
  120. * rlogEnv::             The Environment which can change the
  121.                         behaviour of much of the RCS commands.
  122. * rlogDiag::            Diagnostic output of `rlog'.
  123. * rlogBugs::            Bugs.
  124. - merge - three-way file merge -
  125. * merge::               merge - three-way file merge.
  126. * mergeIntro::          Introduction to `merge'.
  127. * mergeOptions::        command line options of `merge'.
  128. * mergeDiag::           Diagnostic output of `merge'.
  129. * mergeBugs::           Bugs.
  130. ----------- Appendencies -----------
  131. - Appendix A -
  132. * AppendixA::           Format of RCS file.
  133. - Appendix B -
  134. * AppendixB::           Books and related manuals.
  135. * Feldman::             GNU - Make.
  136. * Hunt::                GNU - diff.
  137. * Rochkind::            SCCS.
  138. * Tichy::               Design and implementation of RCS.
  139. * Leblang::             Computer-Aided Software Engineering.
  140. * Glasser::             The Evolution of a Source Code Control
  141.                         System.
  142. * Brown::               The Clear/Caster System.
  143. * Habermann::           A Software Development Control System.
  144. * DEC::                 Code Management System.
  145. * Lampson::             Practical Use of a Polymorphic Applicative
  146.                         Language.
  147. * Tichy1::              A Data Model for Programming Support
  148.                         Environments and its Application.
  149. * Heckel::              A Technique for Isolating Differences
  150.                         Between Files.
  151. * Tichy2::              The String-to-String Correction Problem
  152.                         with Block Moves.
  153. * Index::               Concept Index.
  154. File: rcs,  Node: About,  Next: VersionControl,  Up: Top
  155. About the manual
  156. ****************
  157. * Menu:
  158. * AboutDesc::           Informations about that manual.
  159. * Versions::            Versions of the troff/nroff manuals.
  160. * BugReport::           Bugs? suggestions?
  161. File: rcs,  Node: AboutDesc,  Next: Versions,  Up: Top
  162. Description
  163. ===========
  164.    These 'Texinfo' files are hand converted out of the troff/nroff
  165. files, which came with the RCS system.
  166.    This has done by hand, cause there does not exist a converter which
  167. is able to convert (nroff/troff) into GNU's 'Texinfo' format (I know
  168. one, which is able to do the other way,'texinfo' to nroff).
  169.    The main reason for doing such a stupid work was, to have the opinion
  170. to convert the 'Texinfo' into OS/2-IPF format.  This conversion is done
  171. with "Texinfo converting Tools Release 1.00" which are able to convert
  172. to OS/2-IPF format and HTML(not the Perl-script).
  173.    The next possibility is to get a well printed manual, using TeX(I
  174. use emTeX myself).
  175.    This is the first Edition of this manuals, so don't be angry about
  176. the cryptic node names within the 'Texinfo' files.  That's the only way
  177. to have unique node names for alle command line options.  And by the
  178. way this is the only way to make references to command line options of
  179. every command.
  180.    The next thing is to make this manual a little more readable, that
  181. means not to double subsection with command line options on every
  182. command (rlog, rcs, rcsdiff, ...).  The way out of this dilemma is to
  183. discribe these options within a chapter 'overall options' or 'global
  184. options' which can be used on every command(rlog, rcs, rcsdiff...).
  185. But this will be done in the next edition, if you like it.
  186.    If you like to make a printed manual yourself, you have to TeX it
  187. with the 'texinfo' macro package(V2.185), it also works with version
  188. 2.150 of the package. It should also work with edition 2 of the
  189. 'Texinfo' macro package.
  190. File: rcs,  Node: Versions,  Next: BugReport,  Prev: AboutDesc,  Up: Top
  191. Versions
  192. ========
  193.    If you found newer versions of troff/nroff manual then please mail
  194. to me.
  195.    Here are the exact RCS-versions of the troff/roff pages for checking:
  196.    * Identification of the "RCS - A System for Version Control" manual
  197.      part (rcs.ms):
  198.           $Id: rcs.ms,v 5.4 1995/06/01 16:23:43 eggert Exp $
  199.    * Identification of the ci manual part(ci.1):
  200.           $Id: ci.1,v 5.17 1995/06/16 06:19:24 eggert Exp $
  201.    * Identification of the co manual part(co.1):
  202.           $Id: co.1,v 5.13 1995/06/01 16:23:43 eggert Exp $
  203.    * Identification of the rcs manual part(rcs.1):
  204.           $Id: rcs.1,v 5.13 1995/06/05 08:28:35 eggert Exp $
  205.    * Identification of the ident manual part(ident.1):
  206.           $Id: ident.1,v 5.4 1993/11/09 17:40:15 eggert Exp $
  207.    * Identification of the rcsclean manual part(rcsclean.1):
  208.           $Id: rcsclean.1,v 1.12 1993/11/03 17:42:27 eggert Exp $
  209.    * Identification of the rcsdiff  manual part(rcsdiff.1):
  210.           $Id: rcsdiff.1,v 5.5 1993/11/03 17:42:27 eggert Exp $
  211.    * Identification of the rcsmerge  manual part(rcsmerge.1):
  212.           $Id: rcsmerge.1,v 5.6 1995/06/01 16:23:43 eggert Exp $
  213.    * Identification of the rlog manual part(rlog.1):
  214.           $Id: rlog.1,v 5.9 1995/06/16 06:19:24 eggert Exp $
  215.    * Identification of the merge manual part(merge.1):
  216.           $Id: merge.1,v 5.7 1995/06/01 16:23:43 eggert Exp $
  217. File: rcs,  Node: BugReport,  Prev: Versions,  Up: Top
  218. Bugs?, suggestions?
  219. ===================
  220.    If you think you have found a bug within this manual, you could write
  221. by electronic mail a report.
  222.    Also, if you have suggestions for this manual.  Changes of chapters,
  223. sections and so on.
  224.    Do you have good examples for this manual?
  225.    Or what else you like.
  226.    Please write to me:
  227.      Karl Heinz Marbaise
  228.      KHMarbaise@p69.ks.fido.de
  229.      Fido-Net: 2:2452/117.69
  230. File: rcs,  Node: VersionControl,  Next: rcsIntroduction,  Prev: About,  Up: Top
  231. RCS-A System for Version Control
  232. ********************************
  233.                             Walter F. Tichy
  234.                     Department of Computer Sciences
  235.                            Purdue University
  236.                      West Lafayette, Indiana 47907
  237.    An important problem in program development and maintenance is
  238. version control, i.e., the task of keeping a software system consisting
  239. of many versions and configurations well organized.  The Revision
  240. Control System (RCS) is a software tool that assists with that task.
  241. RCS manages revisions of text documents, in particular source programs,
  242. documentation, and test data. It automates the storing, retrieval,
  243. logging and identification of revisions, and it provides selection
  244. mechanisms for composing configurations. This paper introduces basic
  245. version control concepts and discusses the practice of version control
  246. using RCS.  For conserving space, RCS stores deltas, i.e., differences
  247. between successive revisions.  Several delta storage methods are
  248. discussed. Usage statistics show that RCS's delta storage method is
  249. space and time efficient. The paper concludes with a detailed survey of
  250. version control tools.
  251.    Keywords: configuration management, history management, version
  252. control, revisions, deltas.
  253.    An earlier version of this paper was published in `Software-Practice
  254. & Experience, 7 (July 1985), 637-654.'
  255. * Menu:
  256. * Introduction::        Introduction to RCS.
  257. * StartRCS::            Getting started with RCS.
  258. * Identification::      Automatic Identification.
  259. * RevisionTree::        The RCS Revision Tree.
  260. * Branches::            When are branches needed?.
  261. * Deltas::              Revisions are represented as deltas.
  262. * Controversial::       Locking: A Controversial Issue.
  263. * Configuration::       Configuration Management.
  264. * Functions::           RCS Selection Functions.
  265. * MAKERCS::             Combining MAKE and RCS.
  266. * Statistics::          Usage Statistics.
  267. * Survey::              Survey of Version Control Tools.
  268. File: rcs,  Node: Introduction,  Next: StartRCS,  Up: VersionControl
  269. Introduction
  270. ============
  271.    Version control is the task of keeping software systems consisting
  272. of many versions and configurations well organized.  The Revision
  273. Control System (RCS) is a set of UNIX commands that assist with that
  274. task.
  275.    RCS' primary function is to manage revision groups. A revision group
  276. is a set of text documents, called revisions, that evolved from each
  277. other. A new revision is created by manually editing an existing one.
  278. RCS organizes the revisions into an ancestral tree.  The initial
  279. revision is the root of the tree, and the tree edges indicate from
  280. which revision a given one evolved. Besides managing individual
  281. revision groups, RCS provides flexible selection functions for composing
  282. configurations. RCS may be combined with MAKE (*Note Feldman::),
  283. resulting in a powerful package for version control.
  284.    RCS also offers facilities for merging updates with customer
  285. modifications, for distributed software development, and for automatic
  286. identification. Identification is the `stamping' of revisions and
  287. configurations with unique markers. These markers are akin to serial
  288. numbers, telling software maintainers unambiguously which configuration
  289. is before them.
  290.    RCS is designed for both production and experimental environments.
  291. In production environments, access controls detect update conflicts and
  292. prevent overlapping changes. In experimental environments, where strong
  293. controls are counterproductive, it is possible to loosen the controls.
  294.    Although RCS was originally intended for programs, it is useful for
  295. any text that is revised frequently and whose previous revisions must
  296. be preserved.  RCS has been applied successfully to store the source
  297. text for drawings, VLSI layouts, documentation, specifications, test
  298. data, form letters and articles.
  299.    This paper discusses the practice of version control using RCS.  It
  300. also introduces basic version control concepts, useful for clarifying
  301. current practice and designing similar systems.  Revision groups of
  302. individual components are treated in the next three sections, and the
  303. extensions to configurations follow.  Because of its size, a survey of
  304. version control tools appears at the end of the paper.
  305. File: rcs,  Node: StartRCS,  Next: Identification,  Prev: Introduction,  Up: VersionControl
  306. Getting started with RCS
  307. ========================
  308.    Suppose a text file `f.c' is to be placed under control of RCS.
  309. Invoking the check-in command
  310.      ci  f.c
  311.    creates a new revision group with the contents of `f.c' as the
  312. initial revision (numbered 1.1) and stores the group into the file
  313. `f.c,v'. Unless told otherwise, the command deletes `f.c'. It also asks
  314. for a description of the group. The description should state the common
  315. purpose of all revisions in the group, and becomes part of the group's
  316. documentation. All later check-in commands will ask for a log entry,
  317. which should summarize the changes made. (The first revision is
  318. assigned a default log message, which just records the fact that it is
  319. the initial revision.)
  320.    Files ending in `,v' are called RCS files (v stands for Rersions);
  321. the others are called working files. To get back the working file `f.c'
  322. in the previous example, execute the check-out command:
  323.      co  f.c
  324.    This command extracts the latest revision from the revision group
  325. `f.c,v' and writes it into `f.c'. The file `f.c' can now be edited and,
  326. when finished, checked back in with `ci':
  327.      ci  f.c
  328.    `Ci' assigns number 1.2 to the new revision.  If `ci' complains with
  329. the message
  330.      ci error: no lock set by <login>
  331.    then the system administrator has decided to configure RCS for a
  332. production environment by enabling the `strict locking feature'. If
  333. this feature is enabled, all RCS files are initialized such that
  334. check-in operations require a lock on the previous revision (the one
  335. from which the current one evolved).  Locking prevents overlapping
  336. modifications if several people work on the same file. If locking is
  337. required, the revision should have been locked during the check-out by
  338. using the option `-l':
  339.      co -l  f.c
  340.    Of course it is too late now for the check-out with locking, because
  341. `f.c' has already been changed; checking out the file again would
  342. overwrite the modifications. (To prevent accidental overwrites, `co'
  343. senses the presence of a working file and asks whether the user really
  344. intended to overwrite it.  The overwriting check-out is sometimes
  345. useful for backing up to the previous revision.) To be able to proceed
  346. with the check-in in the present case, first execute
  347.      rcs  -l  f.c
  348.    command retroactively locks the latest revision, unless someone else
  349. locked it in the meantime.  In this case, the two programmers involved
  350. have to negotiate whose modifications should take precedence.
  351.    If an RCS file is private, i.e., if only the owner of the file is
  352. expected to deposit revisions into it, the strict locking feature is
  353. unnecessary and may be disabled. If strict locking is disabled, the
  354. owner of the RCS file need not have a lock for check-in. For safety
  355. reasons, all others still do.  Turning strict locking off and on is
  356. done with the commands:
  357.      rcs  -U  f.c   and rcs  -L  f.c
  358.    These commands enable or disable the strict locking feature for each
  359. RCS file individually. The system administrator only decides whether
  360. strict locking is enabled initially.
  361.    To reduce the clutter in a working directory, all RCS files can be
  362. moved to a subdirectory with the name `RCS'. RCS commands look first
  363. into that directory for RCS files. All the commands presented above
  364. work with the `RCS' subdirectory(1). without change.
  365.    It may be undesirable that `ci' deletes the working file.  For
  366. instance, sometimes one would like to save the current revision, but
  367. continue editing. Invoking
  368.      ci  -l  f.c
  369.    checks in `f.c' as usual, but performs an additional check-out with
  370. locking afterwards.  Thus, the working file does not disappear after
  371. the check-in. Similarly, the option `-u' does a check-in followed by a
  372. check-out without locking.  This option is useful if the file is needed
  373. for compilation after the check-in. Both options update the
  374. identification markers in the working file (see below).
  375.    Besides the operations `ci' and `co', RCS provides the following
  376. commands:
  377. `ident'
  378.      extract identification markers
  379. `rcs'
  380.      change RCS file attributes
  381. `rcsclean'
  382.      remove unchanged working files (optional)
  383. `rcsdiff'
  384.      compare revisions
  385. `rcsfreeze'
  386.      record a configuration (optional)
  387. `rcsmerge'
  388.      merge revisions
  389. `rlog'
  390.      read log messages and other information in RCS files
  391.    A synopsis of these commands appears in the Appendix.
  392.    ---------- Footnotes ----------
  393.    (1)  Pairs of RCS and working files can actually be specified in 3
  394. ways: a) both are given, b) only the working file is given, c) only the
  395. RCS file is given. If a pair is given, both files may have arbitrary
  396. path prefixes; RCS commands pair them up intelligently
  397. File: rcs,  Node: Identification,  Next: RevisionTree,  Prev: StartRCS,  Up: VersionControl
  398. Automatic Identification
  399. ------------------------
  400.    RCS can stamp source and object code with special identification
  401. strings, similar to product and serial numbers. To obtain such
  402. identification, place the marker
  403.      $Id$
  404.    into the text of a revision, for instance inside a comment.  The
  405. check-out operation will replace this marker with a string of the form
  406.      $Id:  filename  revisionnumber  date  time  author state  locker $
  407.    This string need never be touched, because `co' keeps it up to date
  408. automatically. To propagate the marker into object code, simply put it
  409. into a literal character string.  In C, this is done as follows:
  410.      static char rcsid[] = "$Id$";
  411.    The command `ident' extracts such markers from any file, in
  412. particular from object code.  `Ident' helps to find out which revisions
  413. of which modules were used in a given program. It returns a complete
  414. and unambiguous component list, from which a copy of the program can be
  415. reconstructed.  This facility is invaluable for program maintenance.
  416.    There are several additional identification markers, one for each
  417. component of $Id$. The marker
  418.      $Log$
  419.    has a similar function.  It accumulates the log messages that are
  420. requested during check-in.  Thus, one can maintain the complete history
  421. of a revision directly inside it, by enclosing it in a comment.  Figure
  422. 1 is an edited version of a log contained in revision 4.1 of the file
  423. `ci.c'.  The log appears at the beginning of the file, and makes it
  424. easy to determine what the recent modifications were.
  425.      /*
  426.       * $Log: ci.c,v $
  427.       * Revision 4.1  1983/05/10 17:03:06  wft
  428.       * Added option -d and -w, and updated assignment of date, etc.
  429.       * to new delta. Added handling of default branches.
  430.       *
  431.       * Revision 3.9  1983/02/15 15:25:44  wft
  432.       * Added call to fastcopy() to copy remainder of RCS file.
  433.       *
  434.       * Revision 3.8  1983/01/14 15:34:05  wft
  435.       * Added ignoring of interrupts while new RCS file is renamed;
  436.       * avoids deletion of RCS files by interrupts.
  437.       *
  438.       * Revision 3.7  1982/12/10 16:09:20  wft
  439.       * Corrected checking of return code from diff.
  440.       * An RCS file now inherits its mode during the first ci from the
  441.       * working file, except that write permission is removed.
  442.       */
  443.           Figure 1.  Log entries produced by the marker $Log$
  444.    Since revisions are stored in the form of differences, each log
  445. message is physically stored once, independent of the number of
  446. revisions present. Thus, the $Log$ marker incurs negligible space
  447. overhead.
  448. File: rcs,  Node: RevisionTree,  Next: Branches,  Prev: Identification,  Up: VersionControl
  449. The RCS Revision Tree
  450. =====================
  451.    RCS arranges revisions in an ancestral tree. The `ci' command builds
  452. this tree; the auxiliary command `rcs' prunes it. The tree has a root
  453. revision, normally numbered 1.1, and successive revisions are numbered
  454. 1.2, 1.3, etc.  The first field of a revision number is called the
  455. `release number' and the second one the `level number'.  Unless given
  456. explicitly, the `ci' command assigns a new revision number by
  457. incrementing the level number of the previous revision. The release
  458. number must be incremented explicitly, using the `-r' option of `ci'.
  459. Assuming there are revisions 1.1, 1.2, and 1.3 in the RCS file `f.c,v',
  460. the command
  461.      ci  -r2.1  f.c       or       ci  -r2  f.c
  462.    assigns the number 2.1 to the new revision. Later check-ins without
  463. the `-r' option will assign the numbers 2.2, 2.3, and so on. The
  464. release number should be incremented only at major transition points in
  465. the development, for instance when a new release of a software product
  466. has been completed.
  467. File: rcs,  Node: Branches,  Next: Deltas,  Prev: RevisionTree,  Up: VersionControl
  468. When are branches needed?
  469. -------------------------
  470.    A young revision tree is slender: It consists of only one branch,
  471. called the trunk. As the tree ages, side branches may form.  Branches
  472. are needed in the following 4 situations.
  473.   1. Temporary fixes
  474.      Suppose a tree has 5 revisions grouped in 2 releases, as
  475.      illustrated in Figure 2. Revision 1.3, the last one of release 1,
  476.      is in operation at customer sites, while release 2 is in active
  477.      development.
  478.           +-----+     +-----+     +-----+     +-----+     +-----+
  479.           ! 1.1 !---->! 1.2 !---->! 1.3 !---->! 2.1 !---->! 2.2 !--->>
  480.           +-----+     +-----+     +-----+     +-----+     +-----+
  481.                     Figure 2.  A slender revision tree.
  482.      Now imagine a customer requesting a fix of a problem in revision
  483. 1.3, although actual development has moved on to release 2.  RCS does
  484. not permit an extra revision to be spliced in between 1.3 and 2.1,
  485. since that would not reflect the actual development history.  Instead,
  486. create a branch at revision 1.3, and check in the fix on that branch.
  487. The first branch starting at 1.3 has number 1.3.1, and the revisions on
  488. that branch are numbered 1.3.1.1, 1.3.1.2, etc. The double numbering is
  489. needed to allow for another branch at 1.3, say 1.3.2. Revisions on the
  490. second branch would be numbered 1.3.2.1, 1.3.2.2, and so on. The
  491. following steps create branch 1.3.1 and add revision 1.3.1.1:
  492.           co -r1.3 f.c     -- check out revision 1.3
  493.           edit f.c         -- change it
  494.           ci  -r1.3.1  f.c -- check it in on branch 1.3.1
  495.      This sequence of commands transforms the tree of Figure 2 into the
  496. one in Figure 3. Note that it may be necessary to incorporate the
  497. differences between 1.3 and 1.3.1.1 into a revision at level 2.  The
  498. operation `rcsmerge' automates this process (see the Appendix).
  499.           +-----+     +-----+     +-----+     +-----+     +-----+
  500.           ! 1.1 !---->! 1.2 !---->! 1.3 !---->! 2.1 !---->! 2.2 !--->>
  501.           +-----+     +-----+     +--+--+     +-----+     +-----+
  502.                                      !
  503.                                      !        +---------+
  504.                                      +------->! 1.3.1.1 !---->>
  505.                                               +---------+
  506.               Figure 3.  A revision tree with one side branch
  507.   2. Distributed development and customer modifications
  508.      Assume a situation as in Figure 2, where revision 1.3 is in
  509.      operation at several customer sites, while release 2 is in
  510.      development. Customer sites should use RCS to store the
  511.      distributed software. However, customer modifications should not
  512.      be placed on the same branch as the distributed source; instead,
  513.      they should be placed on a side branch. When the next software
  514.      distribution arrives, it should be appended to the trunk of the
  515.      customer's RCS file, and the customer can then merge the local
  516.      modifications back into the new release. In the above example, a
  517.      customer's RCS file would contain the following tree, assuming
  518.      that the customer has received revision 1.3, added his local
  519.      modifications as revision 1.3.1.1, then received revision 2.4, and
  520.      merged 2.4 and 1.3.1.1, resulting in 2.4.1.1.
  521.               +-----+                 +-----+
  522.           --->! 1.3 !---------------->! 2.4 !---->>
  523.               +--+--+                 +---+-+
  524.                  !                        !
  525.                  !     +---------+        !       +---------+
  526.                  +---->! 1.3.1.1 !        +------>! 2.4.1.1 !
  527.                        +---------+                +---------+
  528.       Figure 4.  A customer's revision tree with local modifications.
  529.      This approach is actually practiced in the CSNET project, where
  530. several universities and a company cooperate in developing a national
  531. computer network.
  532.   3. Parallel development
  533.      Sometimes it is desirable to explore an alternate design or a
  534.      different implementation technique in parallel with the main line
  535.      development.  Such development should be carried out on a side
  536.      branch.  The experimental changes may later be moved into the main
  537.      line, or abandoned.
  538.   4. Conflicting updates
  539.      A common occurrence is that one programmer has checked out a
  540.      revision, but cannot complete the assignment for some reason.  In
  541.      the meantime, another person must perform another modification
  542.      immediately.  In that case, the second person should check-out the
  543.      same revision, modify it, and check it in on a side branch, for
  544.      later merging.
  545.      Every node in a revision tree consists of the following
  546.      attributes: a revision number, a check-in date and time, the
  547.      author's identification, a log entry, a state and the actual text.
  548.      All these attributes are determined at the time the revision is
  549.      checked in. The state attribute indicates the status of a
  550.      revision. It is set automatically to `experimental' during
  551.      check-in. A revision can later be promoted to a higher status, for
  552.      example `stable' or `released'.  The set of states is user-defined.
  553. File: rcs,  Node: Deltas,  Next: Controversial,  Prev: Branches,  Up: VersionControl
  554. Revisions are represented as deltas
  555. -----------------------------------
  556.    For conserving space, RCS stores revisions in the form of deltas,
  557. i.e., as differences between revisions. The user interface completely
  558. hides this fact.
  559.    A delta is a sequence of edit commands that transforms one string
  560. into another.  The deltas employed by RCS are line-based, which means
  561. that the only edit commands allowed are insertion and deletion of
  562. lines. If a single character in a line is changed, the edit scripts
  563. consider the entire line changed. The program `diff' produces a small,
  564. line-based delta between pairs of text files. A character-based edit
  565. script would take much longer to compute, and would not be
  566. significantly shorter.
  567.    Using deltas is a classical space-time tradeoff: deltas reduce the
  568. space consumed, but increase access time. However, a version control
  569. tool should impose as little delay as possible on programmers.
  570. Excessive delays discourage the use of version controls, or induce
  571. programmers to take shortcuts that compromise system integrity. To gain
  572. reasonably fast access time for both editing and compiling, RCS
  573. arranges deltas in the following way.  The most recent revision on the
  574. trunk is stored intact. All other revisions on the trunk are stored as
  575. reverse deltas. A reverse delta describes how to go backward in the
  576. development history: it produces the desired revision if applied to the
  577. successor of that revision. This implementation has the advantage that
  578. extraction of the latest revision is a simple and fast copy operation.
  579. Adding a new revision to the trunk is also fast: `ci' simply adds the
  580. new revision intact, replaces the previous revision with a reverse
  581. delta, and keeps the rest of the old deltas. Thus, `ci' requires the
  582. computation of only one new delta.
  583.    Branches need special treatment.  The naive solution would be to
  584. store complete copies for the tips of all branches. Clearly, this
  585. approach would cost too much space.  Instead, RCS uses `forward' deltas
  586. for branches.  Regenerating a revision on a side branch proceeds as
  587. follows.  First, extract the latest revision on the trunk; secondly,
  588. apply reverse deltas until the fork revision for the branch is
  589. obtained; thirdly, apply forward deltas until the desired branch
  590. revision is reached.  Figure 5 illustrates a tree with one side branch.
  591. Triangles pointing to the left and right(with five exclamation marks)
  592. represent reverse and forward deltas, respectively.
  593.            !           !           !           !           !
  594.      +-----!     +-----!     +-----!     +-----!     +-----!
  595.      ! 1.1 !---->! 1.2 !---->! 1.3 !---->! 2.1 !---->! 2.2 !--->>
  596.      +-----+     +-----!     +--+--!     +-----!     +-----!
  597.            !           !        !  !           !           !
  598.                                 !
  599.                                 !            !               !
  600.                                 !  +---------!     +---------!
  601.                                 +->! 1.3.1.1 !---->! 1.3.1.2 !
  602.                                    +---------!     +---------!
  603.                                              !               !
  604.             Figure 3.  A revision tree with one side branch
  605. Although implementing fast check-out for the latest trunk revision,
  606. this arrangement has the disadvantage that generation of other
  607. revisions takes time proportional to the number of deltas applied.  For
  608. example, regenerating the branch tip in Figure 5 requires application
  609. of five deltas (including the initial one).  Since usage statistics
  610. show that the latest trunk revision is the one that is retrieved in 95
  611. per cent of all cases (see the section on usage statistics), biasing
  612. check-out time in favor of that revision results in significant
  613. savings. However, careful implementation of the delta application
  614. process is necessary to provide low retrieval overhead for other
  615. revisions, in particular for branch tips.
  616.    There are several techniques for delta application. The naive one is
  617. to pass each delta to a general-purpose text editor. A prototype of RCS
  618. invoked the UNIX editor `ed' both for applying deltas and for expanding
  619. the identification markers.  Although easy to implement, performance
  620. was poor, owing to the high start-up costs and excess generality of
  621. `ed'.  An intermediate version of RCS used a special-purpose,
  622. stream-oriented editor. This technique reduced the cost of applying a
  623. delta to the cost of checking out the latest trunk revision.  The
  624. reason for this behavior is that each delta application involves a
  625. complete pass over the preceding revision.
  626.    However, there is a much better algorithm.  Note that the deltas are
  627. line oriented and that most of the work of a stream editor involves
  628. copying unchanged lines from one revision to the next. A faster
  629. algorithm avoids unnecessary copying of character strings by using a
  630. `piece table'. A piece table is a one-dimensional array, specifying how
  631. a given revision is `pieced-together' from lines in the RCS file.
  632. Suppose piece table `PTr' represents revision `r'. Then `PTr[i]'
  633. contains the starting position of line `i' of revision `r'.
  634. Application of the next delta transforms piece table `PTr' into
  635. `PTr+1'.  For instance, a delete command removes a series of entries
  636. from the piece table.  An insertion command inserts new entries, moving
  637. the entries following the insertion point further down the array.  The
  638. inserted entries point to the text lines in the delta. Thus, no I/O is
  639. involved except for reading the delta itself. When all deltas have been
  640. applied to the piece table, a sequential pass through the table looks up
  641. each line in the RCS file and copies it to the output file, updating
  642. identification markers at the same time. Of course, the RCS file must
  643. permit random access, since the copied lines are scattered throughout
  644. that file.  Figure 6 illustrates an RCS file with two revisions and the
  645. corresponding piece tables.
  646.    The piece table approach has the property that the time for applying
  647. a single delta is roughly determined by the size of the delta, and not
  648. by the size of the revision.  For example, if a delta is 10 per cent of
  649. the size of a revision, then applying it takes only 10 per cent of the
  650. time to generate the latest trunk revision.  (The stream editor would
  651. take 100 per cent.)
  652.    There is an important alternative for representing deltas that
  653. affects performance.  `SCCS', a precursor of RCS, uses `interleaved'
  654. deltas. A file containing interleaved deltas is partitioned into blocks
  655. of lines. Each block has a header that specifies to which revision(s)
  656. the block belongs.  The blocks are sorted out in such a way that a
  657. single pass over the file can pick up all the lines belonging to a
  658. given revision.  Thus, the regeneration time for all revisions is the
  659. same: all headers must be inspected, and the associated blocks either
  660. copied or skipped.  As the number of revisions increases, the cost of
  661. retrieving any revision is much higher than the cost of checking out
  662. the latest trunk revision with reverse deltas.  A detailed comparison of
  663. `SCCS's' interleaved deltas and RCS's reverse deltas can be found in
  664. Reference 4. This reference considers the version of RCS with the
  665. stream editor only.  The piece table method improves performance
  666. further, so that RCS is always faster than SCCS, except if 10 or more
  667. deltas are applied.
  668.    Additional speed-up for both delta methods can be obtained by
  669. caching the most recently generated revision, as has been implemented
  670. in `DSEE' With caching, access time to frequently used revisions can
  671. approach normal file access time, at the cost of some additional space.
  672. File: rcs,  Node: Controversial,  Next: Configuration,  Prev: Deltas,  Up: VersionControl
  673. Locking: A Controversial Issue
  674. ==============================
  675.    The locking mechanism for RCS was difficult to design. The problem
  676. and its solution are first presented in their `pure' form, followed by
  677. a discussion of the complications caused by `real-world' considerations.
  678.    RCS must prevent two or more persons from depositing competing
  679. changes of the same revision. Suppose two programmers check out
  680. revision 2.4 and modify it.  Programmer A checks in a revision before
  681. programmer B. Unfortunately, programmer B has not seen A's changes, so
  682. the effect is that A's changes are covered up by B's deposit. A's
  683. changes are not lost since all revisions are saved, but they are
  684. confined to a single revision(1).
  685.    This conflict is prevented in RCS by locking. Whenever someone
  686. intends to edit a revision (as opposed to reading or compiling it), the
  687. revision should be checked out and locked, using the `-l' option on
  688. `co'.  On subsequent check-in, `ci' tests the lock and then removes it.
  689. At most one programmer at a time may lock a particular revision, and
  690. only this programmer may check in the succeeding revision. Thus, while
  691. a revision is locked, it is the exclusive responsibility of the locker.
  692.    An important maxim for software tools like RCS is that they must not
  693. stand in the way of making progress with a project. This consideration
  694. leads to several weakenings of the locking mechanism. First of all,
  695. even if a revision is locked, it can still be checked out.  This is
  696. necessary if other people wish to compile or inspect the locked
  697. revision while the next one is in preparation.  The only operations
  698. they cannot do are to lock the revision or to check in the succeeding
  699. one.  Secondly, check-in operations on other branches in the RCS file
  700. are still possible; the locking of one revision does not affect any
  701. other revision.  Thirdly, revisions are occasionally locked for a long
  702. period of time because a programmer is absent or otherwise unable to
  703. complete the assignment.  If another programmer has to make a pressing
  704. change, there are the following three alternatives for making progress:
  705.    - find out who is holding the lock and ask that person to release it;
  706.    - check out the locked revision, modify it, check it in on a branch,
  707.      and merge the changes later;
  708.    - break the lock.  Breaking a lock leaves a highly visible trace,
  709.      namely an electronic mail message that is sent automatically to
  710.      the holder of the lock, recording the breaker and a commentary
  711.      requested from him. Thus, breaking locks is tolerated under
  712.      certain circumstances, but will not go unnoticed.  Experience has
  713.      shown that the automatic mail message attaches a high enough
  714.      stigma to lock breaking, such that programmers break locks only in
  715.      real emergencies, or when a co-worker resigns and leaves locked
  716.      revisions behind.
  717.    If an RCS file is private, i.e., when a programmer owns an RCS file
  718. and does not expect anyone else to perform check-in operations, locking
  719. is an unnecessary nuisance. In this case, the `strict locking feature'
  720. discussed earlier may be disabled, provided that file protection is set
  721. such that only the owner may write the RCS file. This has the effect
  722. that only the owner can check-in revisions, and that no lock is needed
  723. for doing so.
  724.    As added protection, each RCS file contains an access list that
  725. specifies the users who may execute update operations.  If an access
  726. list is empty, only normal UNIX file protection applies.  Thus, the
  727. access list is useful for restricting the set of people who would
  728. otherwise have update permission.  Just as with locking, the access
  729. list has no effect on read-only operations such as `co'.  This approach
  730. is consistent with the UNIX philosophy of openness, which contributes
  731. to a productive software development environment.
  732.    ---------- Footnotes ----------
  733.    (1)  Note that this problem is entirely different from the atomicity
  734. problem. Atomicity means that concurrent update operations on the same
  735. RCS file cannot be permitted, because that may result in inconsistent
  736. data. Atomic updates are essential (and implemented in RCS), but do not
  737. solve the conflict discussed here.
  738. File: rcs,  Node: Configuration,  Next: Functions,  Prev: Controversial,  Up: VersionControl
  739. Configuration Management
  740. ========================
  741.    The preceding sections described how `RCS' deals with revisions of
  742. individual components; this section discusses how to handle
  743. configurations. A configuration is a set of revisions, where each
  744. revision comes from a different revision group, and the revisions are
  745. selected according to a certain criterion. For example, in order to
  746. build a functioning compiler, the `right' revisions from the scanner,
  747. the parser, the optimizer and the code generator must be combined.
  748. `RCS', in conjunction with `MAKE', provides a number of facilities to
  749. effect a smooth selection.
  750. File: rcs,  Node: Functions,  Next: MAKERCS,  Prev: Configuration,  Up: VersionControl
  751. RCS Selection Functions
  752. -----------------------
  753.    - Default selection
  754.      During development, the usual selection criterion is to choose the
  755.      latest revision of all components.  The `co' command makes this
  756.      selection by default.  For example, the command
  757.           co  *,v
  758.      retrieves the latest revision on the default branch of each RCS
  759.      file in the current directory. The default branch is usually the
  760.      trunk, but may be set to be a side branch. Side branches as
  761.      defaults are needed in distributed software development, as
  762.      discussed in the section on the RCS revision tree.
  763.    - Release based selection
  764.      Specifying a release or branch number selects the latest revision
  765.      in that release or branch. For instance,
  766.           co  -r2  *,v
  767.      retrieves the latest revision with release number 2 from each RCS
  768.      file. This selection is convenient if a release has been completed
  769.      and development has moved on to the next release.
  770.    - State and author based selection
  771.      If the highest level number within a given release number is not
  772.      the desired one, the state attribute can help.  For example,
  773.           co  -r2  -sReleased  *,v
  774.      retrieves the latest revision with release number 2 whose state
  775.      attribute is `Released'. Of course, the state attribute has to be
  776.      set appropriately, using the `ci' or `rcs' commands.  Another
  777.      alternative is to select a revision by its author, using the `-w'
  778.      option.
  779.    - Date based selection
  780.      Revisions may also be selected by date. Suppose a release of an
  781.      entire system was completed and current on March 4, at 1:00 p.m.
  782.      local time.  Then the command
  783.           co  -d'March 4, 1:00 pm LT'  *,v
  784.      checks out all the components of that release, independent of the
  785.      numbering. The `-d' option specifies a `cutoff date', i.e., the
  786.      revision selected has a check-in date that is closest to, but not
  787.      after the date given.
  788.    - Name based selection
  789.      The most powerful selection function is based on assigning
  790.      symbolic names to revisions and branches. In large systems, a
  791.      single release number or date is not sufficient to collect the
  792.      appropriate revisions from all groups. For example, suppose one
  793.      wishes to combine release 2 of one subsystem and release 15 of
  794.      another. Most likely, the creation dates of those releases differ
  795.      also. Thus, a single revision number or date passed to the `co'
  796.      command will not suffice to select the right revisions.  Symbolic
  797.      revision numbers solve this problem. Each RCS file may contain a
  798.      set of symbolic names that are mapped to numeric revision numbers.
  799.      For example, assume the symbol `V3' is bound to release number 2
  800.      in file `s,v', and to revision number 15.9 in `t,v'. Then the
  801.      single command
  802.           co  -rV3  s,v  t,v
  803.      retrieves the latest revision of release 2 from `s,v', and
  804.      revision 15.9 from `t,v'. In a large system with many modules,
  805.      checking out all revisions with one command greatly simplifies
  806.      configuration management.
  807.      Judicious use of symbolic revision numbers helps with organizing
  808.      large configurations.
  809.      A special command, `rcsfreeze', assigns a symbolic revision number
  810.      to a selected revision in every RCS file. `rcsfreeze' effectively
  811.      freezes a configuration. The assigned symbolic revision number
  812.      selects all components of the configuration. If necessary,
  813.      symbolic numbers may even be intermixed with numeric ones.  Thus,
  814.      `V3.5' in the above example would select revision 2.5 in `s,v' and
  815.      branch 15.9.5 in `t,v'.
  816.      The options `-r', `-s', `-w' and `-d' may be combined.  If a
  817.      branch is given, the latest revision on that branch satisfying all
  818.      conditions is retrieved; otherwise, the default branch is used.
  819. File: rcs,  Node: MAKERCS,  Next: Statistics,  Prev: Functions,  Up: VersionControl
  820. Combining MAKE and RCS
  821. ----------------------
  822.    MAKE (*Note Feldman::) is a program that processes configurations.
  823. It is driven by configuration specifications recorded in a special
  824. file, called a `Makefile'. MAKE avoids redundant processing steps by
  825. comparing creation dates of source and processed objects. For example,
  826. when instructed to compile all modules of a given system, it only
  827. recompiles those source modules that were changed since they were
  828. processed last.
  829.    MAKE has been extended with an auto-checkout feature(1) for RCS.*
  830. When a certain file to be processed is not present, MAKE attempts a
  831. check-out operation. If successful, MAKE performs the required
  832. processing, and then deletes the checked out file to conserve space.
  833. The selection parameters discussed above can be passed to MAKE either
  834. as parameters, or directly embedded in the Makefile.  MAKE has also
  835. been extended to search the subdirectory named `RCS' for needed files,
  836. rather than just the current working directory. However, if a working
  837. file is present, MAKE totally ignores the corresponding RCS file and
  838. uses the working file. (In newer versions of MAKE distributed by AT&T
  839. and others, auto-checkout can be achieved with the rule DEFAULT,
  840. instead of a special extension of MAKE. However, a file checked out by
  841. the rule DEFAULT will not be deleted after processing.  `Rcsclean' can
  842. be used for that purpose.)
  843.    With auto-checkout, RCS/MAKE can effect a selection rule especially
  844. tuned for multi-person software development and maintenance. In these
  845. situations, programmers should obtain configurations that consist of
  846. the revisions they have personally checked out plus the latest checked
  847. in revision of all other revision groups. This schema can be set up as
  848. follows.
  849.    Each programmer chooses a working directory and places into it a
  850. symbolic link, named `RCS', to the directory containing the relevant
  851. RCS files. The symbolic link makes sure that `co' and `ci' operations
  852. need only specify the working files, and that the Makefile need not be
  853. changed. The programmer then checks out the needed files and modifies
  854. them. If MAKE is invoked, it composes configurations by selecting those
  855. revisions that are checked out, and the rest from the subdirectory
  856. `RCS'. The latter selection may be controlled by a symbolic revision
  857. number or any of the other selection criteria. If there are several
  858. programmers editing in separate working directories, they are insulated
  859. from each other's changes until checking in their modifications.
  860.    Similarly, a maintainer can recreate an older configuration by
  861. starting to work in an empty working directory. During the initial MAKE
  862. invocation, all revisions are selected from RCS files. As the
  863. maintainer checks out files and modifies them, a new configuration is
  864. gradually built up. Every time MAKE is invoked, it substitutes the
  865. modified revisions into the configuration being manipulated.
  866.    A final application of RCS is to use it for storing Makefiles.
  867. Revision groups of Makefiles represent multiple versions of
  868. configurations. Whenever a configuration is baselined or distributed,
  869. the best approach is to unambiguously fix the configuration with a
  870. symbolic revision number by calling `rcsfreeze', to embed that symbol
  871. into the Makefile, and to check in the Makefile (using the same
  872. symbolic revision number).  With this approach, old configurations can
  873. be regenerated easily and reliably.
  874.    ---------- Footnotes ----------
  875.    (1)  This auto-checkout extension is available only in some versions
  876. of MAKE, e.g. GNU MAKE.
  877. File: rcs,  Node: Statistics,  Next: Survey,  Prev: MAKERCS,  Up: VersionControl
  878. Usage Statistics
  879. ================
  880.    The following usage statistics were collected on two DEC VAX-11/780
  881. computers of the Purdue Computer Science Department.  Both machines are
  882. mainly used for research purposes.  Thus, the data reflect an
  883. environment in which the majority of projects involve prototyping and
  884. advanced software development, but relatively little long-term
  885. maintenance.
  886.    For the first experiment, the `ci' and `co' operations were
  887. instrumented to log the number of backward and forward deltas applied.
  888. The data were collected during a 13 month period from Dec. 1982 to Dec.
  889. 1983. Table I summarizes the results.
  890.      Oper.  !   Total  !Total deltas!mean deltas! Operations  !Branch 
  891.             !operations!   applied  !  applied  !with >1 delta!operations
  892.      -------+----------+------------+-----------+-------------+----------
  893.      co     !     7867 !    9320    !    1.18   !   509 (6%)  ! 203 (3%)
  894.      ci     !     3468 !    2207    !    0.64   !    85 (2%)  !  75 (2%)
  895.      ci & co!    11335 !   11527    !    1.02   !   594 (5%)  ! 278 (2%)
  896.       
  897.       
  898.              Table I.  Statistics for `co' and `ci' operations
  899. The first two lines show statistics for check-out and check-in; the
  900. third line shows the combination. Recall that `ci' performs an implicit
  901. check-out to obtain a revision for computing the delta. In all measures
  902. presented, the most recent revision (stored intact) counts as one
  903. delta.  The number of deltas applied represents the number of passes
  904. necessary, where the first `pass' is a copying step.
  905.    Note that the check-out operation is executed more than twice as
  906. frequently as the check-in operation. The fourth column gives the mean
  907. number of deltas applied in all three cases. For `ci', the mean number
  908. of deltas applied is less than one. The reasons are that the initial
  909. check-in requires no delta at all, and that the only time `ci' requires
  910. more than one delta is for branches. Column 5 shows the actual number
  911. of operations that applied more than one delta. The last column
  912. indicates that branches were not used often.
  913.    The last three columns demonstrate that the most recent trunk
  914. revision is by far the most frequently accessed. For RCS, check-out of
  915. this revision is a simple copy operation, which is the absolute minimum
  916. given the copy-semantics of `co'.  Access to older revisions and
  917. branches is more common in non-academic environments, yet even if
  918. access to older deltas were an order of magnitude more frequent, the
  919. combined average number of deltas applied would still be below 1.2.
  920. Since RCS is faster than SCCS until up to 10 delta applications, reverse
  921. deltas are clearly the method of choice. .PP The second experiment,
  922. conducted in March of 1984, involved surveying the existing RCS files
  923. on our two machines.  The goal was to determine the mean number of
  924. revisions per RCS file, as well as the space consumed by them. Table II
  925. shows the results. (Tables I and II were produced at different times
  926. and are unrelated.)
  927.                !Total RCS!  Total  !Mean     !Means size!Mean size!Overhead
  928.                ! files   !revisions!revisions!RCS files !revisions!
  929.      ----------+---------+---------+---------+----------+---------+--------
  930.      All Files !    8033 !   11133 !   1.39  !   6156   !  5585   !  1.10
  931.      Files with!    1477 !    4578 !   3.10  !   8074   !  6041   !  1.34
  932.      >= 2 delta!         !         !         !          !         !
  933.       
  934.       
  935.                      Table II. Statistics for RCS files
  936. The mean number of revisions per RCS file is 1.39.  Columns 5 and 6
  937. show the mean sizes (in bytes) of an RCS file and of the latest
  938. revision of each RCS file, respectively. The `overhead' column contains
  939. the ratio of the mean sizes. Assuming that all revisions in an RCS file
  940. are approximately the same size, this ratio gives a measure of the
  941. space consumed by the extra revisions.
  942.    In our sample, over 80 per cent of the RCS files contained only a
  943. single revision. The reason is that our systems programmers routinely
  944. check in all source files on the distribution tapes, even though they
  945. may never touch them again. To get a better indication of how much
  946. space savings are possible with deltas, all measures with those files
  947. that contained 2 or more revisions were recomputed.  Only for those
  948. files is RCS necessary. As shown in the second line, the average number
  949. of revisions for those files is 3.10, with an overhead of 1.34. This
  950. means that the extra 2.10 deltas require 34 per cent extra space, or 16
  951. per cent per extra revision. Rochkind(*Note Rochkind::) measured the
  952. space consumed by SCCS, and reported an average of 5 revisions per
  953. group and an overhead of 1.37 (or about 9 per cent per extra revision).
  954. In a later paper, Glasser (*Note Glasser::) observed an average of 7
  955. revisions per group in a single, large project, but provided no
  956. overhead figure. In his paper on DSEE , Leblang (*Note Leblang::)
  957. reported that delta storage combined with blank compression results in
  958. an overhead of a mere 1-2 per cent per revision. Since leading blanks
  959. accounted for about 20 per cent of the surveyed Pascal programs, a
  960. revision group with 5-10 members was smaller than a single cleartext
  961. copy.
  962.    The above observations demonstrate clearly that the space needed for
  963. extra revisions is small.  With delta storage, the luxury of keeping
  964. multiple revisions online is certainly affordable. In fact, introducing
  965. a system with delta storage may reduce storage requirements, because
  966. programmers often save back-up copies anyway.  Since back-up copies are
  967. stored much more efficiently with deltas, introducing a system such as
  968. RCS may actually free a considerable amount of space.
  969. File: rcs,  Node: Survey,  Prev: Statistics,  Up: VersionControl
  970. Survey of Version Control Tools
  971. ===============================
  972.    The need to keep back-up copies of software arose when programs and
  973. data were no longer stored on paper media, but were entered from
  974. terminals and stored on disk. Back-up copies are desirable for
  975. reliability, and many modern editors automatically save a back-up copy
  976. for every file touched. This strategy is valuable for short-term
  977. back-ups, but not suitable for long-term version control, since an
  978. existing back-up copy is overwritten whenever the corresponding file is
  979. edited.
  980.    Tape archives are suitable for long-term, offline storage. If all
  981. changed files are dumped on a back-up tape once per day, old revisions
  982. remain accessible.  However, tape archives are unsatisfactory for
  983. version control in several ways.  First, backing up the file system
  984. every 24 hours does not capture intermediate revisions. Secondly, the
  985. old revisions are not online, and accessing them is tedious and
  986. time-consuming. In particular, it is impractical to compare several old
  987. revisions of a group, because that may require mounting and searching
  988. several tapes. Tape archives are important fail-safe tools in the event
  989. of catastrophic disk failures or accidental deletions, but they are
  990. ill-suited for version control. Conversely, version control tools do
  991. not obviate the need for tape archives.
  992.    A natural technique for keeping several old revisions online is to
  993. never delete a file. Editing a file simply creates a new file with the
  994. same name, but with a different sequence number. This technique,
  995. available as an option in DEC's VMS operating system, turns out to be
  996. inadequate for version control. First, it is prohibitively expensive in
  997. terms of storage costs, especially since no data compression techniques
  998. are employed. Secondly, indiscriminately storing every change produces
  999. too many revisions, and programmers have difficulties distinguishing
  1000. them.  The proliferation of revisions forces programmers to spend much
  1001. time on finding and deleting useless files. Thirdly, most of the
  1002. support functions like locking, logging, revision selection, and
  1003. identification described in this paper are not available.
  1004.    An alternative approach is to separate editing from revision
  1005. control. The user may repeatedly edit a given revision, until freezing
  1006. it with an explicit command. Once a revision is frozen, it is stored
  1007. permanently and can no longer be modified. (In RCS, freezing a
  1008. revisions is done with `ci'.) Editing a frozen revision implicitly
  1009. creates a new one, which can again be changed repeatedly until it is
  1010. frozen itself. This approach saves exactly those revisions that the
  1011. user considers important, and keeps the number of revisions manageable.
  1012. IBM's CLEAR/CASTER (*Note Brown::), AT&T's SCCS (*Note Rochkind::),
  1013. CMU's SDC (*Note Habermann::), and DEC's CMS (*Note DEC::), are
  1014. examples of version control systems using this approach. CLEAR/CASTER
  1015. maintains a data base of programs, specifications, documentation and
  1016. messages, using deltas. Its goal is to provide control over the
  1017. development process from a management viewpoint. SCCS stores multiple
  1018. revisions of source text in an ancestral tree, records a log entry for
  1019. each revision, provides access control, and has facilities for uniquely
  1020. identifying each revision. An efficient delta technique reduces the
  1021. space consumed by each revision group. SDC is much simpler than SCCS
  1022. because it stores not more than two revisions.  However, it maintains a
  1023. complete log for all old revisions, some of which may be on back-up
  1024. tape. CMS, like SCCS, manages tree-structured revision groups, but
  1025. offers no identification mechanism.
  1026.    Tools for dealing with configurations are still in a state of flux.
  1027. SCCS, SDC and CMS can be combined with MAKE or MAKE-like programs.
  1028. Since flexible selection rules are missing from all these tools, it is
  1029. sometimes difficult to specify precisely which revision of each group
  1030. should be passed to MAKE for building a desired configuration. The
  1031. Xerox Cedar system (*Note Lampson::) provides a `System Modeller' that
  1032. can rebuild a configuration from an arbitrary set of module revisions.
  1033. The revisions of a module are only distinguished by creation time, and
  1034. there is no tool for managing groups. Since the selection rules are
  1035. primitive, the System Modeller appears to be somewhat tedious to use.
  1036. Apollo's DSEE (*Note Leblang::) is a sophisticated software engineering
  1037. environment. It manages revision groups in a way similar to SCCS and
  1038. CMS. Configurations are built using `configuration threads'. A
  1039. configuration thread states which revision of each group named in a
  1040. configuration should be chosen.  A configuration thread may contain
  1041. dynamic specifiers (e.g., `choose the revisions I am currently working
  1042. on, and the most recent revisions otherwise'), which are bound
  1043. automatically at build time. It also provides a notification mechanism
  1044. for alerting maintainers about the need to rebuild a system after a
  1045. change.
  1046.    RCS is based on a general model for describing
  1047. multi-version/multi-configuration systems (*Note Tichy1::). The model
  1048. describes systems using AND/OR graphs, where AND nodes represent
  1049. configurations, and OR nodes represent version groups.  The model gives
  1050. rise to a suit of selection rules for composing configurations, almost
  1051. all of which are implemented in RCS. The revisions selected by RCS are
  1052. passed to MAKE for configuration building. Revision group management is
  1053. modelled after SCCS. RCS retains SCCS's best features, but offers a
  1054. significantly simpler user interface, flexible selection rules,
  1055. adequate integration with MAKE and improved identification. A detailed
  1056. comparison of RCS and SCCS appears in Reference 4.
  1057.    An important component of all revision control systems is a program
  1058. for computing deltas. SCCS and RCS use the program `diff' (*Note
  1059. Rochkind::), which first computes the longest common substring of two
  1060. revisions, and then produces the delta from that substring. The delta
  1061. is simply an edit script consisting of deletion and insertion commands
  1062. that generate one revision from the other.
  1063.    A delta based on a longest common substring is not necessarily
  1064. minimal, because it does not take advantage of crossing block moves.
  1065. Crossing block moves arise if two or more blocks of lines (e.g.,
  1066. procedures) appear in a different order in two revisions.  An edit
  1067. script derived from a longest common substring first deletes the
  1068. shorter of the two blocks, and then reinserts it.  Heckel (*Note
  1069. Heckel::) proposed an algorithm for detecting block moves, but since
  1070. the algorithm is based on heuristics, there are conditions under which
  1071. the generated delta is far from minimal.  DSEE uses this algorithm
  1072. combined with blank compression, apparently with satisfactory overall
  1073. results. A new algorithm that is guaranteed to produce a minimal delta
  1074. based on block moves appears in Reference 13. A future release of RCS
  1075. will use this algorithm.
  1076.      `Acknowledgements':
  1077.      Many people have helped make RCS a success by contributed
  1078.      criticisms, suggestions, corrections, and even whole new commands
  1079.      (including manual pages). The list of people is too long to be
  1080.      reproduced here, but my sincere thanks for their help and
  1081.      goodwill goes to all of them.
  1082. File: rcs,  Node: rcsIntroduction,  Next: Synopsis,  Prev: VersionControl,  Up: Top
  1083. Introduction to RCS commands
  1084. ****************************
  1085. * Menu:
  1086. * rcsintroDesc::      Introduction to `RCS'.
  1087. * rcsintroFunc::      Functions of `RCS'.
  1088. * rcsintroStart::     Getting started with `RCS'.
  1089. * rcsintroAutoIdent:: Automatic identification.
  1090. File: rcs,  Node: rcsintroDesc,  Next: rcsintroFunc,  Prev: rcsIntroduction,  Up: rcsIntroduction
  1091. Description
  1092. ===========
  1093.    The  Revision  Control System (RCS) manages multiple revisions of
  1094. files.  RCS  automates  the  storing,  retrieval, logging,
  1095. identification, and merging of revisions.  RCS is useful for text that
  1096. is revised  frequently,  for  example programs,  documentation,
  1097. graphics, papers, and form letters.
  1098.    The basic user interface is extremely simple.  The  novice only
  1099. needs  to  learn two commands: `ci' and `co'.  `ci', short for "check
  1100. in", deposits the contents of a file into an archival file called an
  1101. RCS file.  An RCS file contains all revisions of a particular file.
  1102. `co', short for  "check out", retrieves revisions from an RCS file.
  1103. File: rcs,  Node: rcsintroFunc,  Next: rcsintroStart,  Prev: rcsintroDesc,  Up: rcsIntroduction
  1104. Functions of RCS
  1105. ================
  1106.    * Store and retrieve multiple revisions of text.  RCS saves all old
  1107.      revisions in a space  efficient  way. Changes no longer destroy
  1108.      the original, because the previous revisions  remain accessible.
  1109.      Revisions can  be  retrieved  according to ranges of revision
  1110.      numbers,  symbolic  names,  dates,   authors,   and states.
  1111.    * Maintain  a  complete history of changes.  RCS logs all changes
  1112.      automatically.   Besides  the  text  of each  revision, RCS stores
  1113.      the author, the date and time of check-in, and a log message
  1114.      summarizing the change.  The logging makes it easy to find out
  1115.      what happened to a module,  without  having  to  compare source
  1116.      listings or having to track down colleagues.
  1117.    * Resolve access conflicts.  When two  or  more  programmers wish
  1118.      to  modify  the  same revision, RCS alerts the programmers and
  1119.      prevents  one  modification from corrupting the other.
  1120.    * Maintain  a  tree  of  revisions.  RCS can maintain separate lines
  1121.      of development for each module.   It stores  a tree structure that
  1122.      represents the ancestral relationships among revisions.
  1123.    * Merge revisions and resolve conflicts.   Two  separate lines  of
  1124.      development of a module can be coalesced by merging.  If the
  1125.      revisions to  be  merged affect  the  same  sections of code, RCS
  1126.      alerts the user about the overlapping changes.
  1127.    * Control releases and configurations.  Revisions can be assigned
  1128.      symbolic names and marked as released, stable, experimental, etc.
  1129.      With these  facilities, configurations  of modules can be
  1130.      described simply and directly.
  1131.    * Automatically identify  each  revision  with  name, revision
  1132.      number,  creation time, author, etc.  The identification is like a
  1133.      stamp that can be embedded at  an appropriate place in the text of
  1134.      a revision. The identification makes  it  simple  to  determine
  1135.      which  revisions  of  which modules make up a given configuration.
  1136.    * Minimize secondary storage.  RCS needs little extra space for the
  1137.      revisions (only the differences).  If intermediate revisions are
  1138.      deleted, the corresponding deltas are compressed accordingly.
  1139. File: rcs,  Node: rcsintroStart,  Next: rcsintroAutoIdent,  Prev: rcsintroFunc,  Up: rcsIntroduction
  1140. Getting Started with RCS
  1141. ========================
  1142.    Suppose  you  have  a  file `f.c' that you wish to put under control
  1143. of RCS.  If you have not already done so, make  an RCS directory with
  1144. the command
  1145.      mkdir  RCS
  1146.    Then invoke the check-in command
  1147.      ci  f.c
  1148.    This  command  creates  an  RCS file in the RCS directory, stores
  1149. `f.c' into it as revision 1.1, and deletes `f.c'.   It also  asks  you
  1150. for a description.  The description should be a synopsis of the contents
  1151. of  the  file.   All  later check-in  commands  will ask  you  for a
  1152. log entry, which should summarize the changes that you made.
  1153.    Files in the RCS directory are called RCS files; the  others are
  1154. called  working  files.  To get back the working file f.c in the
  1155. previous example, use the  check-out  command
  1156.      co  f.c
  1157.    This  command  extracts  the  latest revision from the RCS file and
  1158. writes it into `f.c'.  If you want to edit `f.c', you must lock it as
  1159. you check it out with the command
  1160.      co  -l  f.c
  1161.    You can now edit `f.c.'
  1162.    Suppose  after  some editing you want to know what changes that you
  1163. have made.  The command
  1164.      rcsdiff  f.c
  1165.    tells  you  the  difference  between  the  most   recently
  1166. checked-in  version  and  the working file.  You can check the file
  1167. back in by invoking
  1168.      ci  f.c
  1169.    This increments the revision number properly.
  1170.    If ci complains with the message
  1171.      ci error: no lock set by `your name'
  1172.    then you have tried to check in a file even though you did not lock
  1173. it when you checked it out.  Of course, it is too late now to do the
  1174. check-out with locking, because another check-out  would  overwrite
  1175. your modifications.  Instead, invoke
  1176.      rcs  -l  f.c
  1177.    This command will lock the latest revision for you, unless somebody
  1178. else  got  ahead  of you already.  In this case, you'll have to
  1179. negotiate with that person.
  1180.    Locking assures that you, and only you, can check  in  the next
  1181. update,  and avoids nasty problems if several people work on the same
  1182. file.  Even if a revision is  locked,  it can still be checked out for
  1183. reading, compiling, etc.  All that locking prevents is a `check-in'  by
  1184. anybody  but  the locker.
  1185.    If  your  RCS  file  is private, i.e., if you are the only person
  1186. who is going to deposit revisions into  it,  strict locking  is not
  1187. needed and you can turn it off.  If strict locking is turned off, the
  1188. owner of the RCS file need  not have  a  lock  for check-in; all others
  1189. still do.  Turning strict locking off and on is done with the commands
  1190.      rcs  -U  f.c     and     rcs  -L  f.c
  1191.    If you don't want to clutter your working  directory  with RCS
  1192. files, create a subdirectory called RCS in your work- ing directory,
  1193. and move all your  RCS  files  there.   RCS commands  will  look  first
  1194. into  that  directory to find needed files.  All the commands
  1195. discussed above will still work,  without  any modification.
  1196. (Actually, pairs of RCS and working files can be specified in three
  1197. ways: (a) both are  given,  (b)  only the working file is given, (c)
  1198. only the RCS file is given.  Both RCS  and  working  files  may have
  1199. arbitrary  path  prefixes; RCS commands pair them up intelligently.)
  1200.    To avoid the deletion of the working file during  check-in (in  case
  1201. you  want  to  continue  editing or compiling), invoke
  1202.      ci  -l  f.c     or     ci  -u  f.c
  1203.    These commands check in  `f.c'  as  usual,  but  perform  an
  1204. implicit check-out.  The first form also locks the checked in revision,
  1205. the second one doesn't.  Thus, these  options save  you one check-out
  1206. operation.  The first form is useful if you want to continue editing,
  1207. the second one if you just  want  to read the file.  Both update the
  1208. identification markers in your working file (see below).
  1209.    You can give ci the number you want assigned to a  checked in
  1210. revision.  Assume all your revisions were numbered 1.1, 1.2, 1.3, etc.,
  1211. and you would like  to  start  release  2.  The command
  1212.      ci  -r2  f.c     or     ci  -r2.1  f.c
  1213.    assigns the number 2.1 to the new revision.  From then on, ci will
  1214. number the subsequent  revisions  with  2.2,  2.3, etc.  The
  1215. corresponding co commands
  1216.      co  -r2  f.c     and     co  -r2.1  f.c
  1217.    retrieve the latest revision numbered 2.`x' and the revision 2.1,
  1218. respectively.  co without a revision  number  selects the  latest
  1219. revision on the `trunk', i.e. the highest revision with a number
  1220. consisting of two fields.  Numbers with more  than  two fields are
  1221. needed for branches.  For example, to start a branch at revision 1.3,
  1222. invoke
  1223.      ci  -r1.3.1  f.c
  1224.    This command starts a branch numbered 1 at  revision  1.3, and
  1225. assigns  the number 1.3.1.1 to the new revision.  For more information
  1226. about branches, see *Note rcsOptb::.
  1227. File: rcs,  Node: rcsintroAutoIdent,  Prev: rcsintroStart,  Up: rcsIntroduction
  1228. Automatic Identification
  1229. ========================
  1230.    RCS can put special strings for identification  into  your source
  1231. and  object  code.  To obtain such identification, place the marker
  1232.      $Id$
  1233.    into your text, for instance inside a comment.   RCS  will replace
  1234. this marker with a string of the form
  1235.      $Id:  filename revision date time author state $
  1236.    With such a marker on the first page of each  module,  you can
  1237. always  see with which revision you are working.  RCS keeps the markers
  1238. up to date automatically.  To  propagate the  markers  into  your
  1239. object code, simply put them into literal character strings.  In C,
  1240. this is done as follows:
  1241.      static char rcsid[] = "$Id$";
  1242.    The  command  ident  extracts  such markers from any file, even
  1243. object code and dumps.  Thus, ident lets you find out which revisions
  1244. of which modules were used in a given program.
  1245.    You may also find it useful to put the marker  $Log$  into your
  1246. text, inside a comment.  This marker accumulates the log messages that
  1247. are requested  during  check-in.   Thus, you  can  maintain  the
  1248. complete  history  of  your  file directly inside it.  There are
  1249. several additional  identification markers; see *Note coKeyword:: for
  1250. details.
  1251. File: rcs,  Node: Synopsis,  Next: CheckIn,  Prev: rcsIntroduction,  Up: Top
  1252. Synopsis of RCS Operations
  1253. **************************
  1254.    * ci - check in revisions
  1255.      `Ci' stores the contents of a working file into the corresponding
  1256.      RCS file as a new revision.  If the RCS file doesn't exist, `ci'
  1257.      creates it.  `Ci' removes the working file, unless one of the
  1258.      options `-u' or `-l' is present.  For each check-in, `ci' asks for
  1259.      a commentary describing the changes relative to the previous
  1260.      revision.
  1261.      `Ci' assigns the revision number given by the `-r' option; if that
  1262.      option is missing, it derives the number from the lock held by the
  1263.      user; if there is no lock and locking is not strict, `ci'
  1264.      increments the number of the latest revision on the trunk.  A side
  1265.      branch can only be started by explicitly specifying its number
  1266.      with the `-r' option during check-in.
  1267.      `Ci' also determines whether the revision to be checked in is
  1268.      different from the previous one, and asks whether to proceed if
  1269.      not.  This facility simplifies check-in operations for large
  1270.      systems, because one need not remember which files were changed.
  1271.      The option `-k' searches the checked in file for identification
  1272.      markers containing the attributes revision number, check-in date,
  1273.      author and state, and assigns these to the new revision rather
  1274.      than computing them.  This option is useful for software
  1275.      distribution: Recipients of distributed software using RCS should
  1276.      check in updates with the `-k' option.  This convention guarantees
  1277.      that revision numbers, check-in dates, etc., are the same at all
  1278.      sites.
  1279.    * co - check out revisions
  1280.      `Co' retrieves revisions according to revision number, date,
  1281.      author and state attributes.  It either places the revision into
  1282.      the working file, or prints it on the standard output.  `Co'
  1283.      always expands the identification markers.
  1284.    * ident - extract identification markers
  1285.      `Ident' extracts the identification markers expanded by `co' from
  1286.      any file and prints them.
  1287.    * rcs - change RCS file attributes
  1288.      `Rcs'is an administrative operation that changes access lists,
  1289.      locks, unlocks, breaks locks, toggles the strict-locking feature,
  1290.      sets state attributes and symbolic revision numbers, changes the
  1291.      description, and deletes revisions.  A revision can only be
  1292.      deleted if it is not the fork of a side branch.
  1293.    * rcsclean - clean working directory
  1294.      `Rcsclean' removes working files that were checked out but never
  1295.      changed.  (1)
  1296.    * rcsdiff - compare revisions
  1297.      `Rcsdiff' compares two revisions and prints their difference,
  1298.      using the UNIX tool `diff'.  One of the revisions compared may be
  1299.      checked out.  This command is useful for finding out about changes.
  1300.    * rcsfreeze - freeze a configuration
  1301.      `Rcsfreeze' assigns the same symbolic revision number to a given
  1302.      revision in all RCS files.  This command is useful for accurately
  1303.      recording a configuration.
  1304.    * rcsmerge - merge revisions
  1305.      `Rcsmerge' merges two revisions, `rev1' and `rev2', with respect
  1306.      to a common ancestor.  A 3-way file comparison determines the
  1307.      segments of lines that are (a) the same in all three revisions, or
  1308.      (b) the same in 2 revisions, or (c) different in all three.  For
  1309.      all segments of type (b) where `rev1' is the differing revision,
  1310.      the segment in `rev1' replaces the corresponding segment of `rev2'.
  1311.      Type (c) indicates an overlapping change, is flagged as an error,
  1312.      and requires user intervention to select the correct alternative.
  1313.    * rlog - read log messages
  1314.      `Rlog' prints the log messages and other information in an RCS
  1315.      file.
  1316.    ---------- Footnotes ----------
  1317.    (1)  The `rcsclean' and `rcsfreeze' commands are optional and are
  1318. not always installed.
  1319. File: rcs,  Node: CheckIn,  Next: CheckOut,  Prev: Synopsis,  Up: Top
  1320. ci - check in RCS revisions
  1321. ***************************
  1322. * Menu:
  1323. * ciIntro::      Introduction to `ci'.
  1324. * ciOptions::    command line options of `ci'.
  1325. * ciFileNaming:: File naming.
  1326. * ciExamples::   Examples.
  1327. * ciFileModes::  File modes.
  1328. * ciFiles::      Files.
  1329. * setuid use::   Using of uid.
  1330. * ciEnv::        Environment which can change
  1331.                  the behaviour of `ci' and
  1332.                  other RCS commands.
  1333. * ciDiag::       Diagnostic output of `ci'.
  1334. File: rcs,  Node: ciIntro,  Next: ciOptions,  Up: CheckIn
  1335. ci description
  1336. ==============
  1337.    `ci' stores new revisions into RCS files. Each pathname matching an
  1338. RCS suffix is taken to be an RCS file. All others are assumed to be
  1339. working files containing new revisions. `ci' deposits the contents of
  1340. each working file into the corresponding RCS file. If only a working
  1341. file is given, `ci' tries to find the corresponding RCS file in an RCS
  1342. subdirectory and then in the working file's directory. For more
  1343. details, *Note ciFileNaming:: below.
  1344.    For `ci' to work, the caller's login must be on the access list,
  1345. except if the access list is empty or the caller is the superuser or
  1346. the owner of the file. To append a new revision to an existing branch,
  1347. the tip revision on that branch must be locked by the caller.
  1348. Otherwise, only a new branch can be created.  This restriction is not
  1349. enforced for the owner of the file if non-strict locking is used (see
  1350. *Note rcs::). A lock held by someone else can be broken with the `rcs'
  1351. command.
  1352.    Unless the `-f' option is given, `ci' checks whether the revision to
  1353. be deposited differs from the preceding one. If not, instead of
  1354. creating a new revision `ci' reverts to the preceding one. To revert,
  1355. ordinary `ci' removes the working file and any lock; `ci -l' keeps and
  1356. `ci -u' removes any lock, and then they both generate a new working file
  1357. much as if `co -l' or `co -u' had been applied to the preceding
  1358. revision. When reverting, any `-n' and `-s' options apply to the
  1359. preceding revision.
  1360.    For each revision deposited, `ci' prompts for a log message.  The
  1361. log message should summarize the change and must be terminated by
  1362. end-of-file or by a line containing `.' by itself. If several files are
  1363. checked in `ci' asks whether to reuse the previous log message. If the
  1364. standard input is not a terminal, `ci' suppresses the prompt and uses
  1365. the same log message for all files(Option `-m' of `ci', *Note ciOptm::).
  1366.    If the RCS file does not exist, `ci' creates it and deposits the
  1367. contents of the working file as the initial revision (default number:
  1368. `1.1' ). The access list is initialized to empty.  Instead of the log
  1369. message, `ci' requests descriptive text (Option `-t' of `ci', *Note
  1370. ciOptt::) below).
  1371.    The number `rev' of the deposited revision can be given by any of
  1372. the options `-f', `-i', `-I', `-j', `-k', `-l', `-M', `-q', `-r' or `-u'
  1373. `rev' can be symbolic, numeric, or mixed.  Symbolic names in `rev' must
  1374. already be defined; see the Option `-n' (*Note ciOptn::) and `-N'
  1375. (*Note ciOptNu::) options for assigning names during checkin.
  1376.    If `rev' is `$', `ci' determines the revision number from keyword
  1377. values in the working file.
  1378.    If `rev' begins with a period, then the default branch (normally the
  1379. trunk) is prepended to it. If `rev' is a branch number followed by a
  1380. period, then the latest revision on that branch is used.
  1381.    If `rev' is a revision number, it must be higher than the latest one
  1382. on the branch to which `rev' belongs, or must start a new branch.
  1383.    If `rev' is a branch rather than a revision number, the new revision
  1384. is appended to that branch.  The level number is obtained by
  1385. incrementing the tip revision number of that branch.  If `rev'
  1386. indicates a non-existing branch, that branch is created with the
  1387. initial revision numbered `rev .1.'
  1388.    If `rev' is omitted, `ci' tries to derive the new revision number
  1389. from the caller's last lock.  If the caller has locked the tip revision
  1390. of a branch, the new revision is appended to that branch. The new
  1391. revision number is obtained by incrementing the tip revision number. If
  1392. the caller locked a non-tip revision, a new branch is started at that
  1393. revision by incrementing the highest branch number at that revision. The
  1394. default initial branch and level numbers are `1.'.
  1395.    If `rev' is omitted and the caller has no lock, but owns the file
  1396. and locking is not set to  `strict', then the revision is appended to
  1397. the default branch (normally the trunk; see the option `-b' of `rcs'
  1398. *Note rcsOptb::).
  1399.    Exception: On the trunk, revisions can be appended to the end, but
  1400. not inserted.
  1401. File: rcs,  Node: ciOptions,  Next: ciFileNaming,  Prev: ciIntro,  Up: CheckIn
  1402. Command line options of ci
  1403. ==========================
  1404.    Overview off all options which can be given to
  1405.    `Synopsis': ci [options] file ...
  1406.    `ci'.
  1407. * Menu:
  1408. * ciOptr::     -r Revision
  1409. * ciOptl::     -l lock a revision.
  1410. * ciOptu::     -u unlock a revision.
  1411. * ciOptf::     -f force a deposit.
  1412. * ciOptk::     -k search for keyword values.
  1413. * ciOptq::     -q quiet mode
  1414. * ciOpti::     -i initial
  1415. * ciOptj::     -j just check in
  1416. * ciOptIu::    -I interacitve mode
  1417. * ciOptd::     -d date
  1418. * ciOptMu::    -M
  1419. * ciOptm::     -m log message
  1420. * ciOptn::     -n symbolic name
  1421. * ciOptNu::    -N replace an existing symbolic name
  1422. * ciOpts::     -s set state
  1423. * ciOptt::     -t discription
  1424. * ciOptTu::    -T modification time
  1425. * ciOptw::     -w login
  1426. * ciOptV::     -V Version of RCS; Emulate RCS Version
  1427. * ciOptx::     -x Suffixes
  1428. * ciOptz::     -z Time zoone for output.
  1429. File: rcs,  Node: ciOptr,  Next: ciOptl,  Up: ciOptions
  1430. Check in revision
  1431. -----------------
  1432. `-r`rev''
  1433.      Check in revision rev.
  1434.      The bare `-r' option (without any revision) has an unusual meaning
  1435.      in `ci'. With other RCS  commands, a bare `-r' option specifies
  1436.      the most recent revision on the default branch, but with `ci', a
  1437.      bare `-r' option reestablishes the default behavior of releasing a
  1438.      lock and removing the working file, and is used to override any
  1439.      default `-l' or `-u' options established by shell aliases or
  1440.      scripts.
  1441. File: rcs,  Node: ciOptl,  Next: ciOptu,  Prev: ciOptr,  Up: ciOptions
  1442. lock a revision
  1443. ---------------
  1444. `-l[`rev']'
  1445.      works like `-r', except it performs an additional `co-l' for the
  1446.      deposited revision.  Thus, the deposited revision is immediately
  1447.      checked out again and locked. This is useful for saving a revision
  1448.      although one wants to continue editing it after the checkin.
  1449. File: rcs,  Node: ciOptu,  Next: ciOptf,  Prev: ciOptl,  Up: ciOptions
  1450. unlock a revision
  1451. -----------------
  1452. `-u[`rev']'
  1453.      works like `-l', except that the deposited revision is not locked.
  1454.      This lets one read the working file immediately after checkin.
  1455.      The `-l', bare `-r', and `-u' options are mutually exclusive and
  1456.      silently override each other. For example, `ci -u -r' is
  1457.      equivalent to `ci -r' because bare `-r' overrides `-u'.
  1458. File: rcs,  Node: ciOptf,  Next: ciOptk,  Prev: ciOptu,  Up: ciOptions
  1459. force a deposit
  1460. ---------------
  1461. `-f[`rev']'
  1462.      forces a deposit; the new revision is deposited even it is not
  1463.      different from the preceding one.
  1464. File: rcs,  Node: ciOptk,  Next: ciOptq,  Prev: ciOptf,  Up: ciOptions
  1465. keyword values
  1466. --------------
  1467. `-k[`rev']'
  1468.      searches the working file for keyword values to determine its
  1469.      revision number, creation date, state, and author (see *Note
  1470.      CheckOut::), and assigns these values to the deposited revision,
  1471.      rather than computing them locally. It also generates a default
  1472.      login message noting the login of the caller and the actual
  1473.      checkin date. This option is useful for software distribution.  A
  1474.      revision that is sent to several sites should be checked in with
  1475.      the `-k' option at these sites to preserve the original number,
  1476.      date, author, and state. The extracted keyword values and the
  1477.      default log message can be overridden with the options `-d', `-m',
  1478.      `-s', `-w', and any option that carries a revision number.
  1479. File: rcs,  Node: ciOptq,  Next: ciOpti,  Prev: ciOptk,  Up: ciOptions
  1480. quiet
  1481. -----
  1482. `-q[`rev']'
  1483.      quiet mode; diagnostic output is not printed. A revision that is
  1484.      not different from the preceding one is not deposited, unless `-f'
  1485.      is given.
  1486. File: rcs,  Node: ciOpti,  Next: ciOptj,  Prev: ciOptq,  Up: ciOptions
  1487. initial check in
  1488. ----------------
  1489. `-i[`rev']'
  1490.      initial checkin; report an error if the RCS file already exists.
  1491.      This avoids race conditions in certain applications.
  1492. File: rcs,  Node: ciOptj,  Next: ciOptIu,  Prev: ciOpti,  Up: ciOptions
  1493. just check in
  1494. -------------
  1495. `-j[`rev']'
  1496.      just checkin and do not initialize; report an error if the RCS
  1497.      file does not already exist.
  1498. File: rcs,  Node: ciOptIu,  Next: ciOptd,  Prev: ciOptj,  Up: ciOptions
  1499. interactive mode
  1500. ----------------
  1501. `-I[`rev']'
  1502.      interactive mode; the user is prompted and questioned even if the
  1503.      standard input is not a terminal.
  1504. File: rcs,  Node: ciOptd,  Next: ciOptMu,  Prev: ciOptIu,  Up: ciOptions
  1505. `-d[`date']'
  1506.      uses `date' for the checkin date and time. The `date' is specified
  1507.      in free format as explained in `co' (*Note CheckOut::).  This is
  1508.      useful for lying about the checkin date, and for `-k' if no date
  1509.      is available. If `date' is empty, the working file's time of last
  1510.      modification is used.
  1511. File: rcs,  Node: ciOptMu,  Next: ciOptm,  Prev: ciOptd,  Up: ciOptions
  1512. modification time
  1513. -----------------
  1514. `-M[`rev']'
  1515.      Set the modification time on any new working file to be the date
  1516.      of the retrieved revision. For example, `ci -d -M -u f' does not
  1517.      alter `f' 's modification time, even if `f''s contents change due
  1518.      to keyword substitution. Use this option with care; it can confuse
  1519.      `MAKE'.
  1520. File: rcs,  Node: ciOptm,  Next: ciOptn,  Prev: ciOptMu,  Up: ciOptions
  1521. log message
  1522. -----------
  1523. `-m[`msg']'
  1524.      uses the string `msg' as the log message for all revisions checked
  1525.      in. By convention, log messages that start with `#' are comments
  1526.      and are ignored by programs like GNU Emacs's `vc' package. Also,
  1527.      log messages that start with `{ clumpname }' (followed by white
  1528.      space) are meant to be clumped together if possible, even if they
  1529.      are associated with different files; the `{ clumpname }' label is
  1530.      used only for clumping, and is not considered to be part of the
  1531.      log message itself.
  1532. File: rcs,  Node: ciOptn,  Next: ciOptNu,  Prev: ciOptm,  Up: ciOptions
  1533. symbolic name
  1534. -------------
  1535. `-n[`name']'
  1536.      assigns the symbolic name `name' to the number of the checked-in
  1537.      revision. `ci' prints an error message if `name' is already
  1538.      assigned to another number.
  1539. File: rcs,  Node: ciOptNu,  Next: ciOpts,  Prev: ciOptn,  Up: ciOptions
  1540. replace symbolic name
  1541. ---------------------
  1542. `-N[`name']'
  1543.      same as `-n', except that it overrides a previous assignment of
  1544.      `name'.
  1545. File: rcs,  Node: ciOpts,  Next: ciOptt,  Prev: ciOptNu,  Up: ciOptions
  1546. states
  1547. ------
  1548. `-s[`state']'
  1549.      sets the state of the checked-in revision to the identifier
  1550.      `state'. The default state is `Exp'.
  1551. File: rcs,  Node: ciOptt,  Next: ciOptTu,  Prev: ciOpts,  Up: ciOptions
  1552. description
  1553. -----------
  1554. `-t`file''
  1555.      writes descriptive text from the contents of the named `file' into
  1556.      the RCS file, deleting the existing text.  The `file' cannot begin
  1557.      with `-'.
  1558. `-t-`string''
  1559.      Write descriptive text from the `string' into the RCS file,
  1560.      deleting the existing text.
  1561.      The `-t' option, in both its forms, has effect only during an
  1562.      initial checkin; it is silently ignored otherwise.
  1563.      During the initial checkin, if `-t' is not given, `ci' obtains the
  1564.      text from standard input, terminated by end-of-file or by a line
  1565.      containing `.' by itself. The user is prompted for the text if
  1566.      interaction is possible; see optiom `-I' of `ci'(*Note ciOptIu::).
  1567.      For backward compatibility with older versions of RCS, a bare `-t'
  1568.      option is ignored.
  1569. File: rcs,  Node: ciOptTu,  Next: ciOptw,  Prev: ciOptt,  Up: ciOptions
  1570. modification time
  1571. -----------------
  1572.      Set the RCS file's modification time to the new revision's time if
  1573.      the former precedes the latter and there is a new revision;
  1574.      preserve the RCS file's modification time otherwise. If you have
  1575.      locked a revision, `ci' usually updates the RCs file's
  1576.      modification time to the current time, because the lock is stored
  1577.      in the RCS file and removing the lock requires changing the RCS
  1578.      file. This can create an RCS file newer than the working file in
  1579.      one of two ways: first, `ci -M' can create a working file with a
  1580.      date before the current time; second, when reverting to the
  1581.      previous revision the RCS file can change while the working file
  1582.      remains unchanged. These two cases can cause excessive
  1583.      recompilation caused by a `MAKE' dependency of the working file on
  1584.      the RCS file. The `-T' option inhibits this recompilation by lying
  1585.      about the RCS file's date. Use this option with care; it can
  1586.      suppress recompilation even when a checkin of one working file
  1587.      should affect another working file associated with the same RCS
  1588.      file. For example, suppose the RCS file's time is 01:00, the
  1589.      (changed) working file's time is 02:00, some other copy of the
  1590.      working file has a time of 03:00, and the current time is 04:00.
  1591.      Then `ci -d -T' sets the RCS file's time to 02:00 instead of the
  1592.      usual 04:00; this causes `MAKE' to think (incorrectly) that the
  1593.      other copy is newer than the RCs file.
  1594. File: rcs,  Node: ciOptw,  Next: ciOptV,  Prev: ciOptTu,  Up: ciOptions
  1595. login
  1596. -----
  1597. `-w`login''
  1598.      uses `login' for the author field of the deposited revision.
  1599.      Useful for lying about the author, and for `-k' if no author is
  1600.      available.
  1601. File: rcs,  Node: ciOptV,  Next: ciOptx,  Prev: ciOptw,  Up: ciOptions
  1602. version and emulation
  1603. ---------------------
  1604.      Print RCS's version number.
  1605. `-V`n''
  1606.      Emulate RCS version `n'. *Note coOptV::
  1607. File: rcs,  Node: ciOptx,  Next: ciOptz,  Prev: ciOptV,  Up: ciOptions
  1608. suffixes
  1609. --------
  1610. `-x`suffixes''
  1611.      specifies the suffixes for RCS files. A nonempty suffix matches
  1612.      any pathname ending in the suffix. An empty suffix matches any
  1613.      pathname of the form `RCS/path' or `path1/RCS/path2'. The `-x'
  1614.      option can specify a list of suffixes separated by `.' For
  1615.      example, `-x,v/' specifies two suffixes: `,v' and the empty
  1616.      suffix. If two or more suffixes are specified, they are tried in
  1617.      order when looking for an RCS file; the first one that works is
  1618.      used for that file.  If no RCS file is found but an RCS file can
  1619.      be created, the suffixes are tried in order to determine the new
  1620.      RCS file's name.  The default for `suffixes' is
  1621.      installation-dependent; normally it is `,v/' for hosts like Unix
  1622.      that permit commas in filenames, and is empty (i.e. just the empty
  1623.      suffix) for other hosts.
  1624. File: rcs,  Node: ciOptz,  Prev: ciOptx,  Up: ciOptions
  1625. time zoone
  1626. ----------
  1627. `-z`zoone''
  1628.      specifies the date output format in keyword substitution, and
  1629.      specifies the default time zone for `date' in the `-d`date''
  1630.      option. The `zoone' should be empty, a numeric UTC offset, or the
  1631.      special string `LT' for local time. The default is an empty
  1632.      `zoone', which uses the traditional RCS format of UTC without any
  1633.      time zone indication and with slashes separating the parts of the
  1634.      date; otherwise, times are output in ISO 8601 format with time
  1635.      zone indication. For example, if local time is January 11, 1990,
  1636.      8pm Pacific Standard Time, eight hours west of UTC, then the time
  1637.      is output as follows:
  1638.           `Option'   `time output'
  1639.           `-z'       `1990/01/11 04:00:00'       (default)
  1640.           `-zLT'     `1990-01-11 20:00:00-0800'
  1641.           `-z+0530'  `1990-01-11 09:30:00+0530'
  1642.      This option does not affect dates stored in RCS files, which are
  1643.      always UTC.
  1644. File: rcs,  Node: ciFileNaming,  Next: ciExamples,  Prev: ciOptions,  Up: CheckIn
  1645. FILE NAMING
  1646. ===========
  1647.    Pairs of RCS files and working files can be specified in three ways
  1648. (see also the example section).
  1649.   1. Both the file and the working file are given.  The RCS pathname is
  1650.      of the form `path1/workfileX' and the working pathname is of the
  1651.      form `path2/workfile' where `path1/' and `path2/' are (possibly
  1652.      different or empty) paths, `workfile' is a filename, and `X' is an
  1653.      RCs suffix. If `X' is empty, `path1/' must start with `RCS/' or
  1654.      must contain `/RCS/'.
  1655.   2. Only the RCS file is given.  Then the working file is created in
  1656.      the current directory and its name is derived from the name of the
  1657.      RCS file by removing `path1/' and the suffix `X'.
  1658.   3. Only the working file is given. Then `ci' considers each RCS
  1659.      suffix `X' in turn, looking for an RCS file of the form
  1660.      `path2/RCS/workfileX' or (if the former is not found and `X' is
  1661.      nonempty) `path2/workfileX'.
  1662.    If the RCS file is specified without a path in 1) and 2), `ci' looks
  1663. for the RCS file first in the directory `./RCS' and then in the current
  1664. directory.
  1665.    `ci' reports an error if an attempt to open an RCS file fails for an
  1666. unusual reason, even if the RCS file's pathname is just one of several
  1667. possibilities. For example, to suppress use of RCS commands in a
  1668. directory `d' , create a regular file named `d/RCS' so that casual
  1669. attempts to use RCS commands in `d' fail because `d/RCS' is not a
  1670. directory.
  1671. File: rcs,  Node: ciExamples,  Next: ciFileModes,  Prev: ciFileNaming,  Up: CheckIn
  1672. Examples
  1673. ========
  1674.    Suppose `,v' is an RCS suffix and the current directory contains a
  1675. subdirectory `RCS' with an RCS file `io.c,v'. Then each of the
  1676. following commands check in a copy of `io.c' into `RCS/io.c,v' as the
  1677. latest revision, removing `io.c'.
  1678.      ci  io.c
  1679.      ci  RCS/io.c,v
  1680.      ci  io.c,v
  1681.      ci  io.c RCS/io.c,v
  1682.      ci  io.c io.c,v
  1683.      ci  RCS/io.c,v  io.c
  1684.      ci  io.c,v  io.c
  1685.    Suppose instead that the empty suffix is an RCS suffix and the
  1686. current directory contains a subdirectory `RCS' with an RCS file
  1687. `io.c'. The each of the following commands checks in a new revision.
  1688.      ci  io.c
  1689.      ci  RCS/io.c
  1690.      ci  io.c  RCS/io.c
  1691.      ci  RCS/io.c  io.c
  1692. File: rcs,  Node: ciFileModes,  Next: ciFiles,  Prev: ciExamples,  Up: CheckIn
  1693. File Modes
  1694. ==========
  1695.    An RCS file created by `ci' inherits the read and execute
  1696. permissions from the working file.  If the RCS file exists already,
  1697. `ci' preserves its read and execute permissions.  `ci' always turns off
  1698. all write permissions of RCS files.
  1699. File: rcs,  Node: ciFiles,  Next: setuid use,  Prev: ciFileModes,  Up: CheckIn
  1700. Files
  1701. =====
  1702.    Temporary files are created in the directory containing the working
  1703. file, and also in the temporary directory (*Note ciEnv:: under *Note
  1704. coEnv::). A semaphore file or files are created in the directory
  1705. containing the RCS file. With a nonempty suffix, the semaphore names
  1706. begin with the first character of the suffix; therefore, do not specify
  1707. an suffix whose first character could be that of a working filename.
  1708. With an empty suffix, the semaphore names end with `_' so working
  1709. filenames should not end in `_'
  1710.    `ci' never changes an RCS or working file. Normally, `ci' unlinks
  1711. the file and creates a new one; but instead of breaking a chain of one
  1712. or more symbolic links to an RCS file, it unlinks the destination file
  1713. instead. Therefore, `ci' breaks any hard or symbolic links to any
  1714. working file it changes; and hard links to RCS files are ineffective,
  1715. but symbolic links to RCS files are preserved.
  1716.    The effective user must be able to search and write the directory
  1717. containing the RCS file. Normally, the real user must be able to read
  1718. the RCS and working files and to search and write the directory
  1719. containing the working file; however, some older hosts cannot easily
  1720. switch between real and effective users, so on these hosts the
  1721. effective user is used for all accesses. The effective user is the same
  1722. as the real user unless your copies of `ci' and `co' have setuid
  1723. privileges. As described in the next section, these privileges yield
  1724. extra security if the effective user owns all RCS files and
  1725. directories, and if only the effective user can write RCS directories.
  1726.    Users can control access to RCS files by setting the permissions of
  1727. the directory containing the files; only users with write access to the
  1728. directory can use RCS commands to change its RCS files. For example, in
  1729. hosts that allow a user to belong to several groups, one can make a
  1730. group's RCS directories writable to that group only. This approach
  1731. suffices for informal projects, but it means that any group member can
  1732. arbitrarily change the group's RCS files, and can even remove them
  1733. entirely. Hence more formal projects sometimes distinguish between an
  1734. RCS administrator, who can change the RCS files at will, and other
  1735. project members, who can check in new revisions but cannot otherwise
  1736. change the RCS files.
  1737. File: rcs,  Node: setuid use,  Next: ciEnv,  Prev: ciFiles,  Up: CheckIn
  1738. Setuid use
  1739. ==========
  1740.    To prevent anybody but their RCS administrator from deleting
  1741. revisions, a set of users can employ setuid privileges as follows.
  1742.    * Check that the host supports RCS setuid use.  Consult a
  1743.      trustworthy expert if there are any doubts.  It is best if the
  1744.      `seteuid' system call works as described in Posix 1003.1a Draft 5,
  1745.      because RCS can switch back and forth easily between real and
  1746.      effective users, even if the real user is `root'.  If not, the
  1747.      second best is if the `setuid' system call supports saved setuid
  1748.      (the `_POSIX_SAVED_IDS' behavior of Posix 1003.1-1990); this fails
  1749.      only if the real or effective user is `root'.  If RCS detects any
  1750.      failure in setuid, it quits immediately.
  1751.    * Choose a user `A' to serve as RCS administrator for the set of
  1752.      users.  Only `A' can invoke the `rcs' command on the users' RCS
  1753.      files.  `A' should not be `root' or any other user with special
  1754.      powers.  Mutually suspicious sets of users should use different
  1755.      administrators.
  1756.    * Choose a pathname `B' to be a directory of files to be executed by
  1757.      the users.
  1758.    * Have `A' set up `B' to contain copies of `ci' and `co' that are
  1759.      setuid to `A' by copying the commands from their standard
  1760.      installation directory `D' as follows:
  1761.           mkdir `B'
  1762.           cp `D'/c[io] `B'
  1763.           chmod go-w,u+s `B'/c[io]
  1764.    * Have each user prepend `B' to their path as follows:
  1765.           PATH=`B':$PATH; export PATH # ordinary shell
  1766.           set path=(`B' $path)        # C - shell
  1767.    * Have `A' create each RCS directory `R' with write access only to
  1768.      `A' as follows:
  1769.           mkdir `R'
  1770.           chmod go-w `R'
  1771.    * If you want to let only certain users read the RCS files, put the
  1772.      users into a group `G', and have `A' further protect the RCs
  1773.      directory as follows:
  1774.           chgrp `G'  `R'
  1775.           chmod g-w, o-rwx  `R'
  1776.    * Have `A' copy old RCS files (if any) into `R', to ensure that `A'
  1777.      owns them.
  1778.    * An RCS file's access list limits who can check in and lock
  1779.      revisions.  The default access list is empty, which grants checkin
  1780.      access to anyone who can read the RCS file.  If you want limit
  1781.      checkin access, have `A' invoke `rcs -a' on the file; see *Note
  1782.      rcs:: In particular, `rcs -e -a`A'' limits access to just `A'.
  1783.    * Have `A' initialize any new RCS files with `rcs -i' before initial
  1784.      checkin, adding the `-a' option if you want to limit checkin
  1785.      access.
  1786.    * Give setuid privileges only to `ci', `co', and `rcsclean'; do not
  1787.      give them to `rcs' or to any other command.
  1788.    * Do not use other setuid commands to invoke RCS commands; setuid is
  1789.      trickier than you think!
  1790. File: rcs,  Node: ciEnv,  Next: ciDiag,  Prev: setuid use,  Up: CheckIn
  1791. Environment
  1792. ===========
  1793. `RCSINIT'
  1794.      options prepended to the argument list, separated by spaces.  A
  1795.      backslash escapes spaces within an option.  The `RCSINIT' options
  1796.      are prepended to the argument lists of most RCS commands. Useful
  1797.      `RCSINIT' options include `-q', `-V', `-x' and `-z'.
  1798. `TMPDIR'
  1799.      Name of the temporary directory.  If not set, the environment
  1800.      variables `TMP' and `TEMP' are inspected instead and the first
  1801.      value found is taken; if none of them are set, a host-dependent
  1802.      default is used, typically `/tmp'.
  1803. File: rcs,  Node: ciDiag,  Prev: ciEnv,  Up: CheckIn
  1804. Diagnostics
  1805. ===========
  1806.    For each revision, `ci' prints the RCS file, the working file, and
  1807. the number of both the deposited and the preceding revision. The exit
  1808. status is zero if and only if all operations were successful.
  1809. File: rcs,  Node: CheckOut,  Next: rcs,  Prev: CheckIn,  Up: Top
  1810. co - check out RCS revisions
  1811. ****************************
  1812. * Menu:
  1813. * coIntro::      Introduction to `co'.
  1814. * coOptions::    command line options of `co'.
  1815. * coKeyword::    Keyword expansion and valid keywords.
  1816. * coFileModes::  File modes.
  1817. * coFiles::      Files.
  1818. * coEnv::        Environment which can change
  1819.                  the behaviour of `co' and
  1820.                  other RCS commands.
  1821. * coDiag::       Diagnostic output of `co'.
  1822. * coLimits::     Limits.
  1823. File: rcs,  Node: coIntro,  Next: coOptions,  Up: CheckOut
  1824. co description
  1825. ==============
  1826.    `co' retrieves a revision from each RCS file and stores it into the
  1827. corresponding working file.
  1828.    Pathnames matching an RCS suffix denote RCS files; all others denote
  1829. working files. Names are paired as explained in *Note ciIntro::.
  1830.    Revisions of an RCS file can be checked out locked or unlocked.
  1831. Locking a revision prevents overlapping updates.  A revision checked
  1832. out for reading or processing (e.g., compiling) need not be locked.  A
  1833. revision checked out for editing and later checkin must normally be
  1834. locked.  Checkout with locking fails if the revision to be checked out
  1835. is currently locked by another user.  (A lock can be broken with `rcs'
  1836. *Note rcs::). Checkout with locking also requires the caller to be on
  1837. the access list of the RCS file, unless he is the owner of the file or
  1838. the superuser, or the access list is empty. Checkout without locking is
  1839. not subject to accesslist restrictions, and is not affected by the
  1840. presence of locks.
  1841.    A revision is selected by options for revision or branch number,
  1842. checkin date/time, author, or state. When the selection options are
  1843. applied in combination, `co' retrieves the latest revision that
  1844. satisfies all of them. If none of the selection options is specified,
  1845. `co' retrieves the latest revision on the default branch (normally the
  1846. trunk, see the `-b' option of *Note rcs::). A revision or branch number
  1847. can be attached to any of the options  `-f', `-I', `-l', `-M', `-p',
  1848. `-q', `-r' or `-u'. The options `-d' (date), `-s'(state), and `-w'
  1849. (author) retrieve from a single branch, the `selected' branch, which is
  1850. either specified by one of `-f', ..., `-u', or the default branch.
  1851.    A `co' command applied to an RCS file with no revisions creates a
  1852. zero-length working file. `co' always performs keyword substitution
  1853. (see below).
  1854. File: rcs,  Node: coOptions,  Next: coKeyword,  Prev: coIntro,  Up: CheckOut
  1855. Command line options of co
  1856. ==========================
  1857.    Overview off all options which can be given to `co'
  1858.    `Synopsis': co [options] file ...
  1859. * Menu:
  1860. * coOptr::     -r Revision
  1861. * coOptl::     -l lock a revision.
  1862. * coOptu::     -u unlock a revision.
  1863. * coOptf::     -f Force overwriting working file
  1864. * coOptk::     -k Keyword strings; Substitution and so on.
  1865. * coOptp::     -p Output to standard out.
  1866. * coOptq::     -q Quiet mode.
  1867. * coOptI::     -I Interactive mode.
  1868. * coOptd::     -d Check out by date/time.
  1869. * coOptM::     -M Modification time.
  1870. * coOpts::     -s set state.
  1871. * coOptT::     -T preserve Modification time.
  1872. * coOptw::     -w check out by user.
  1873. * coOptj::     -j Joining revisions.
  1874. * coOptV::     -V Version; Emulation of RCS Version.
  1875. * coOptx::     -x Suffixes.
  1876. * coOptz::     -z Time zone.
  1877. File: rcs,  Node: coOptr,  Next: coOptl,  Up: coOptions
  1878. Check out revision
  1879. ------------------
  1880. `-r`rev''
  1881.      retrieves the latest revision whose number is less than or equal
  1882.      to `rev'. If `rev' indicates a branch rather than a revision, the
  1883.      latest revision on that branch is retrieved. If `rev' is omitted,
  1884.      the latest revision on the default branch (see the `-b' option of
  1885.      *Note rcs::) is retrieved. If `rev' is `$', `co' determines the
  1886.      revision number from keyword values in the working file.
  1887.      Otherwise, a revision is composed of one or more numeric or
  1888.      symbolic fields separated by periods. If `rev' begins with a
  1889.      period, then the default branch (normally the trunk) is prepended
  1890.      to it. If `rev' is a branch number followed by a period, then the
  1891.      latest revision on that branch is used. The numeric equivalent of
  1892.      a symbolic field is specified with the `-n' option of the commands
  1893.      *Note ciOptn:: and *Note rcsOptn::.
  1894. File: rcs,  Node: coOptl,  Next: coOptu,  Prev: coOptr,  Up: coOptions
  1895. Lock revision
  1896. -------------
  1897. `-l`rev''
  1898.      same as `-r', except that it also locks the retrieved revision for
  1899.      the caller.
  1900. File: rcs,  Node: coOptu,  Next: coOptf,  Prev: coOptl,  Up: coOptions
  1901. Unlock revision
  1902. ---------------
  1903. `-l`rev''
  1904.      same as `-r', except that it unlocks the retrieved revision if it
  1905.      was locked by the caller.  If `rev' is omitted, `-u' retrieves the
  1906.      revision locked by the caller, if there is one; otherwise, it
  1907.      retrieves the latest revision on the default branch.
  1908. File: rcs,  Node: coOptf,  Next: coOptk,  Prev: coOptu,  Up: coOptions
  1909. Force overwriting working file
  1910. ------------------------------
  1911. `-f`rev''
  1912.      forces the overwriting of the working file; useful in connection
  1913.      with `-q'.  *Note coFileModes::
  1914. File: rcs,  Node: coOptk,  Next: coOptp,  Prev: coOptf,  Up: coOptions
  1915. Keyword strings
  1916. ---------------
  1917. `-kkv'
  1918.      Generate keyword strings using the default form, e.g.  `$Revision
  1919.      : 5.12 $' for the `Revision' keyword. A locker's name is inserted
  1920.      in the value of the `Header', `Id', and `Locker' keyword strings
  1921.      only as a file is being locked, i.e. by `ci -l' and `co -l'. This
  1922.      is the default.
  1923. `-kkvl'
  1924.      Like `-kkv', except that a locker's name is always inserted if the
  1925.      given revision is currently locked.
  1926. `-kk'
  1927.      Generate only keyword names in keyword strings; omit their values.
  1928.      See *Note coKeyword:: below. For example, for the `Revision'
  1929.      keyword, generate the string `$Revsion$' instead of `$Revision:
  1930.      5.12 $'. This option is useful to ignore differences due to
  1931.      keyword substitution when comparing different revisions of a file.
  1932.      Log messages are inserted after `$Log$' keywords even if `-kk' is
  1933.      specified, since this tends to be more useful when merging changes.
  1934. `-ko'
  1935.      Generate the old keyword string, present in the working file just
  1936.      before it was checked in.  For example, for the `Revision'
  1937.      keyword, generate the string `$Revision: 1.1 $' instead of
  1938.      `$Revision: 5.12 $' if that is how the string appeared when the
  1939.      file was checked in.  This can be useful for file formats that
  1940.      cannot tolerate any changes to substrings that happen to take the
  1941.      form of keyword strings.
  1942. `-kb'
  1943.      Generate a binary image of the old keyword string. This acts like
  1944.      `-ko', except it performs all working file input and output in
  1945.      binary mode. This makes little difference on Posix and Unix hosts,
  1946.      but on DOS-like hosts one should use `rcs -i -kb' to initialize an
  1947.      RCS file intended to be used for binary files.  Also, on all
  1948.      hosts, *Note rcsmerge:: normally refuses to merge files when `-kb'
  1949.      is in effect.
  1950. `-kv'
  1951.      Generate only keyword values for keyword strings. For example, for
  1952.      the `Revision' keyword, generate the string `5.12' instead of
  1953.      `$Revision: 5.12 $' This can help generate files in programming
  1954.      languages where it is hard to strip keyword delimiters like
  1955.      `$Revision: $' from a string.  However, further keyword
  1956.      substitution cannot be performed once the keyword names are
  1957.      removed, so this option should be used with care. Because of this
  1958.      danger of losing keywords, this option cannot be combined with
  1959.      `-l', and the owner write permission of the working file is turned
  1960.      off; to edit the file later, check it out again without `-kv'.
  1961. File: rcs,  Node: coOptp,  Next: coOptq,  Prev: coOptk,  Up: coOptions
  1962. Print on standard output
  1963. ------------------------
  1964. `-p`rev''
  1965.      prints the retrieved revision on the standard output rather than
  1966.      storing it in the working file. This option is useful when `co' is
  1967.      part of a pipe.
  1968. File: rcs,  Node: coOptq,  Next: coOptI,  Prev: coOptp,  Up: coOptions
  1969. Quiet mode
  1970. ----------
  1971. `-q`rev''
  1972.      quiet mode; diagnostics are not printed.
  1973. File: rcs,  Node: coOptI,  Next: coOptd,  Prev: coOptq,  Up: coOptions
  1974. Interactive Mode
  1975. ----------------
  1976. `-I`rev''
  1977.      interactive mode; the user is prompted and questioned even if the
  1978.      standard input is not a terminal.
  1979. File: rcs,  Node: coOptd,  Next: coOptM,  Prev: coOptI,  Up: coOptions
  1980. Checkout by date/time
  1981. ---------------------
  1982. `-d`date''
  1983.      retrieves the latest revision on the selected branch whose checkin
  1984.      date/time is less than or equal to `date'.  The date and time can
  1985.      be given in free format.  The time zone `LT' stands for local time;
  1986.      other common time zone names are understood.  For example, the
  1987.      following `date's are equivalent if local time is January 11,
  1988.      1990, 8pm Pacific Standard Time, eight hours west of Coordinated
  1989.      Universal Time (UTC):
  1990.           8:00 pm lt
  1991.           4:00 AM, Jan. 12, 1990             default is UTC
  1992.           1990-01-12 04:00:00+00             ISO 8601 (UTC)
  1993.           1990-01-11 20:00:00-08             ISO 8601 (local time)
  1994.           1990/01/12 04:00:00                traditional RCS format
  1995.           Thu Jan 11 20:00:00 1990 LT        output of ctime(3) + LT
  1996.           Thu Jan 11 20:00:00 PST 1990       output of date(1)
  1997.           Fri Jan 12 04:00:00 GMT 1990
  1998.           Thu, 11 Jan 1990 20:00:00 -0800    Internet RFC 822
  1999.           12-January-1990, 04:00 WET
  2000.            
  2001.            
  2002.      Most fields in the date and time can be defaulted. The default
  2003.      time zone is normally UTC, but this can be overridden by the `-z'
  2004.      option. The other defaults are determined in the order year,
  2005.      month, day, hour, minute, and second (most to least significant).
  2006.      At least one of these fields must be provided.  For omitted fields
  2007.      that are of higher significance than the highest provided field,
  2008.      the time zone's current values are assumed. For all other omitted
  2009.      fields, the lowest possible values are assumed. For example,
  2010.      without `-z', the date `20', `10:30' defaults to 10:30:00 UTC of
  2011.      the 20th of the UTC time zone's current month and year. The
  2012.      date/time must be quoted if it contains spaces.
  2013. File: rcs,  Node: coOptM,  Next: coOpts,  Prev: coOptd,  Up: coOptions
  2014. Modification time
  2015. -----------------
  2016. `-M`rev''
  2017.      Set the modification time on the new working file to be the date
  2018.      of the retrieved revision.  Use this option with care; it can
  2019.      confuse `make'.
  2020. File: rcs,  Node: coOpts,  Next: coOptT,  Prev: coOptM,  Up: coOptions
  2021. State
  2022. -----
  2023. `-s`state''
  2024.      retrieves the latest revision on the selected branch whose state
  2025.      is set to `state'.
  2026. File: rcs,  Node: coOptT,  Next: coOptw,  Prev: coOpts,  Up: coOptions
  2027. Preserve Modification time
  2028. --------------------------
  2029.      Preserve the modification time on the RCS file even if the RCS
  2030.      file changes because a lock is added or removed. This option can
  2031.      suppress extensive recompilation caused by a `make' dependency of
  2032.      some other copy of the working file on the RCS file. Use this
  2033.      option with care; it can suppress recompilation even when it is
  2034.      needed, i.e. when the change of lock would mean a change to
  2035.      keyword strings in the other working file.
  2036. File: rcs,  Node: coOptw,  Next: coOptj,  Prev: coOptT,  Up: coOptions
  2037. Checked in by user
  2038. ------------------
  2039. `-w`login''
  2040.      retrieves the latest revision on the selected branch which was
  2041.      checked in by the user with login name `login'. If the argument
  2042.      `login' is omitted, the caller's login is assumed.
  2043. File: rcs,  Node: coOptj,  Next: coOptV,  Prev: coOptw,  Up: coOptions
  2044. Joining revisions
  2045. -----------------
  2046. `-j`joinlist''
  2047.      generates a new revision which is the join of the revisions on
  2048.      `joinlist'. This option is largely obsoleted by `rcsmerge' (*Note
  2049.      rcsmerge::) but is retained for backwards compatibility.
  2050.      The `joinlist' is a comma-separated list of pairs of the form
  2051.      `rev2 : rev3', where `rev2' and `rev3' are (symbolic or numeric)
  2052.      revision numbers. For the initial such pair, `rev1' denotes the
  2053.      revision selected by the above options `-f', ..., `-w'. For all
  2054.      other pairs, `rev1' denotes the revision generated by the previous
  2055.      pair.  (Thus, the output of one join becomes the input to the
  2056.      next.)
  2057.      For each pair, `co' joins revisions `rev1' and `rev3' with respect
  2058.      to `rev2'. This means that all changes that transform `rev2' into
  2059.      `rev1' are applied to a copy of `rev3'. This is particularly
  2060.      useful if `rev1' and `rev3' are the ends of two branches that have
  2061.      `rev2' as a common ancestor.  If `rev1 < rev2 < rev3' on the same
  2062.      branch, joining generates a new revision which is like `rev3', but
  2063.      with all changes that lead from `rev1' to `rev2' undone. If
  2064.      changes from `rev2' to `rev1' overlap with changes from `rev2' to
  2065.      `rev3', `co' reports overlaps as described in `merge'.
  2066.      For the initial pair, `rev2' can be omitted.  The default is the
  2067.      common ancestor. If any of the arguments indicate branches, the
  2068.      latest revisions on those branches are assumed. The options `-l'
  2069.      and `-u' lock or unlock `rev1'.
  2070. File: rcs,  Node: coOptV,  Next: coOptx,  Prev: coOptj,  Up: coOptions
  2071. Version, Emulate RCS Version
  2072. ----------------------------
  2073.      Print RCS's version number.
  2074. `-V`n''
  2075.      Emulate RCS version `n', where `n' can be `3', `4', or `5'. This
  2076.      can be useful when interchanging RCS files with others who are
  2077.      running older versions of RCS. To see which version of RCS your
  2078.      correspondents are running, have them invoke `rcs -V'; this works
  2079.      with newer versions of RCS. If it doesn't work, have them invoke
  2080.      `rlog' (*Note rlog::) on an RCS file; if none of the first few
  2081.      lines of output contain the string `branch:' it is version 3; if
  2082.      the dates' years have just two digits, it is version 4; otherwise,
  2083.      it is version 5. An RCS file generated while emulating version 3
  2084.      loses its default branch. An RCS revision generated while
  2085.      emulating version 4 or earlier has a time stamp that is off by up
  2086.      to 13 hours. A revision extracted while emulating version 4 or
  2087.      earlier contains abbreviated dates of the form `yy/mm/dd' and can
  2088.      also contain different white space and line prefixes in the
  2089.      substitution for $Log$.
  2090. File: rcs,  Node: coOptx,  Next: coOptz,  Prev: coOptV,  Up: coOptions
  2091. Suffixes
  2092. --------
  2093. `-x`suffixes''
  2094.      Use `suffixes' to characterize RCS files.  *Note ciOptx:: for
  2095.      details.
  2096. File: rcs,  Node: coOptz,  Prev: coOptx,  Up: coOptions
  2097. Time Zoone
  2098. ----------
  2099. `-z`zoone''
  2100.      *Note ciOptz:: for details.
  2101. File: rcs,  Node: coKeyword,  Next: coFileModes,  Prev: coOptions,  Up: CheckOut
  2102. Keyword Substitution
  2103. ====================
  2104.    Strings of the form `$keyword$' and `$keyword : ...$' embedded in
  2105. the text are replaced with strings of the form `$keyword:value$' where
  2106. `keyword' and `value' are pairs listed below.  Keywords can be embedded
  2107. in literal strings or comments to identify a revision.
  2108.    Initially, the user enters strings of the form `$keyword$'.  On
  2109. checkout, `co' replaces these strings with strings of the form
  2110. `$keyword:value$'.  If a revision containing strings of the latter form
  2111. is checked back in, the value fields will be replaced during the next
  2112. checkout. Thus, the keyword values are automatically updated on
  2113. checkout. This automatic substitution can be modified by the `-k'
  2114. options.
  2115.    Keywords and their corresponding values:
  2116. `$Author$'
  2117.      The login name of the user who checked in the revision.
  2118. `$Date$'
  2119.      The date and time the revision was checked in.  With `-z`zone'' a
  2120.      numeric time zone offset is appended; otherwise, the date is UTC.
  2121. `$Header$'
  2122.      A standard header containing the full pathname of the RCS file, the
  2123.      revision number, the date and time, the author, the state, and the
  2124.      locker (if locked). With `-z`zone'' a numeric time zone offset is
  2125.      appended to the date; otherwise, the date is RCS.
  2126. `$Id$'
  2127.      Same as `$Header$', except that the RCS filename is without a path.
  2128. `$Locker$'
  2129.      The login name of the user who locked the revision (empty if not
  2130.      locked).
  2131. `$Log$'
  2132.      The log message supplied during checkin, preceded by a header
  2133.      containing the RCS filename, the revision number, the author, and
  2134.      the date and time. With `-z`zone'' a numeric time zone offset is
  2135.      appended; otherwise, the date is UTC. Existing log messages are
  2136.      `not' replaced. Instead, the new log message is inserted after
  2137.      `$Log: ... $'. This is useful for accumulating a complete change
  2138.      log in a source file.
  2139.      Each  inserted  line is prefixed by the string that prefixes the
  2140.      `$Log$' line.  For example, if the `$Log$' line is `"// $Log:
  2141.      tan.cc $"', RCS prefixes each line of the log with "// ".  This
  2142.      is useful  for  languages  with  comments  that  go  to the end of
  2143.      the line.  The convention for other languages is to use a `"  *
  2144.      "'  prefix inside a multiline comment.  For example, the initial
  2145.      log comment  of  a  C  program conventionally is of the following
  2146.      form:
  2147.           /*
  2148.            * $Log$
  2149.            */
  2150.      For  backwards compatibility with older versions of RCS, if the
  2151.      log prefix is `/*' or  `(*' surrounded  by optional white space,
  2152.      inserted log lines contain a space instead of `/' or `('; however,
  2153.      this  usage  is obsolescent and should not be relied on.
  2154. `$Name$'
  2155.      The symbolic name used to check out the revision, if any. For
  2156.      example, `"co -rJoe"' generates `"$Name: Joe $"'.  Plain `co'
  2157.      generates just `"$Name:  $"'
  2158. `$RCSFile$'
  2159.      The name of the RCS file without a path.
  2160. `$Revsion$'
  2161.      The revision number assigned to the revision.
  2162. `$Source$'
  2163.      The full pathname of the RCS file.
  2164. `$State$'
  2165.      The state assigned to the revision with the `-s' option of `rcs'
  2166.      or `ci'.
  2167.    The following characters in keyword values are represented by escape
  2168. sequences to keep keyword strings well-formed.
  2169.      `char'    `escape sequence'
  2170.      tab            \t
  2171.      newline        \n
  2172.      space          \040
  2173.      $              \044
  2174.      \              \\
  2175. File: rcs,  Node: coFileModes,  Next: coFiles,  Prev: coKeyword,  Up: CheckOut
  2176. File Modes
  2177. ==========
  2178.    The working file inherits the read and execute permissions from the
  2179. RCS file.  In addition, the owner  write  permis- sion  is turned  on,
  2180. unless  `-kv'  is  set or the file is checked out unlocked and locking
  2181. is  set  to  strict (*Note rcs::).
  2182.    If a file with the name of the working file exists already and has
  2183. write permission, `co' aborts the  checkout,  asking beforehand  if
  2184. possible.  If the existing working file is not writable or `-f' is
  2185. given, the working file  is  deleted without asking.
  2186. File: rcs,  Node: coFiles,  Next: coEnv,  Prev: coFileModes,  Up: CheckOut
  2187. Files
  2188. =====
  2189.    `co' accesses files much as `ci' does, except that it does not need
  2190. to read the working file unless a revision number of `$' is specified.
  2191. File: rcs,  Node: coEnv,  Next: coDiag,  Prev: coFiles,  Up: CheckOut
  2192. Environment
  2193. ===========
  2194. `RCSINIT'
  2195.      options prepended to the argument list, separated by spaces.  See
  2196.      *Note ciEnv:: for details.
  2197. File: rcs,  Node: coDiag,  Next: coLimits,  Prev: coEnv,  Up: CheckOut
  2198. Diagnostics
  2199. ===========
  2200.    The RCS pathname, the working pathname, and  the  revision number
  2201. retrieved  are  written  to the diagnostic output.  The exit status is
  2202. zero if and only if all operations were successful.
  2203. File: rcs,  Node: coLimits,  Prev: coDiag,  Up: CheckOut
  2204. Limits
  2205. ======
  2206.    Links to the RCS and working files are not preserved.
  2207. File: rcs,  Node: rcs,  Next: ident,  Prev: CheckOut,  Up: Top
  2208. rcs - change RCS file attributes
  2209. ********************************
  2210. * Menu:
  2211. * rcsIntro::            Introduction to `rcs'.
  2212. * rcsOptions::          command line options of `rcs'.
  2213. * rcsCompatibility::    Compatibility between RCS Versions.
  2214. * rcsFiles::            Files.
  2215. * rcsEnv::              The Environment which can change the
  2216.                         behaviour of much of the RCS commands.
  2217. * rcsDiag::             Diagnostic output of `rcs'.
  2218. * rcsBugs::             Bugs.
  2219. File: rcs,  Node: rcsIntro,  Next: rcsOptions,  Up: rcs
  2220. Description
  2221. ===========
  2222.    RCS  creates new RCS files or changes attributes of existing ones.
  2223. An RCS  file  contains  multiple  revisions  of text,  an access list,
  2224. a change log, descriptive text, and some control attributes.  For rcs
  2225. to  work,  the  caller's login  name  must  be  on  the  access list,
  2226. except if the access list is empty, the caller is the owner of the  file
  2227. or the superuser, or the `-i' option is present.
  2228.    Pathnames  matching  an  RCS  suffix denote RCS files; all others
  2229. denote  working  files.   Names  are   paired   as explained  in  *Note
  2230. ciIntro::.   Revision  numbers  use  the syntax described in *Note
  2231. ciIntro::.
  2232. File: rcs,  Node: rcsOptions,  Next: rcsCompatibility,  Prev: rcsIntro,  Up: rcs
  2233. Command line options of rcs
  2234. ===========================
  2235.    Overview off all options which can be given to `rcs'
  2236.    `Synopsis': rcs [options] file ...
  2237. * Menu:
  2238. * rcsOpti::        -i Initialize.
  2239. * rcsOpta::        -a Login names.
  2240. * rcsOptAu::       -A Append access list.
  2241. * rcsOpte::        -e Erase login names.
  2242. * rcsOptb::        -b Set default branch.
  2243. * rcsOptc::        -c Set comment leader.
  2244. * rcsOptk::        -k Keyword substitution.
  2245. * rcsOptl::        -l Lock revision.
  2246. * rcsOptu::        -u unlock revision.
  2247. * rcsOptLu::       -L Set strict locking.
  2248. * rcsOptUu::        -U set non-strict locking.
  2249. * rcsOptm::        -m Replace message.
  2250. * rcsOptMu::       -M Do not send mail.
  2251. * rcsOptn::        -n Associate symbolic name(tag).
  2252. * rcsOptNu::       -N Override symbolic name.
  2253. * rcsOpto::        -o Delete revisions.
  2254. * rcsOptq::        -q Quiet mode.
  2255. * rcsOptIu::       -I Interactive mode.
  2256. * rcsOpts::        -s Set state.
  2257. * rcsOptt::        -t Discription.
  2258. * rcsOptTu::       -T Modification time.
  2259. * rcsOptV::        -V Version; Emulation of RCS Version.
  2260. * rcsOptx::        -x Suffixes.
  2261. * rcsOptz::        -z Time zone.
  2262. File: rcs,  Node: rcsOpti,  Next: rcsOpta,  Up: rcsOptions
  2263. Initialize RCS File
  2264. -------------------
  2265.      Create and initialize a new RCS file,  but  do  not deposit  any
  2266.      revision.  If the RCS file has no path prefix, try to place it
  2267.      first into the subdirectory `./RCS', and then into the current
  2268.      directory.  If the RCS file already exists, print an error message.
  2269. File: rcs,  Node: rcsOpta,  Next: rcsOptAu,  Prev: rcsOpti,  Up: rcsOptions
  2270. Append Login names
  2271. ------------------
  2272. `-a`logins''
  2273.      Append the login  names  appearing  in  the  comma-separated list
  2274.      `logins' to the access list of the RCS file.
  2275. File: rcs,  Node: rcsOptAu,  Next: rcsOpte,  Prev: rcsOpta,  Up: rcsOptions
  2276. Append Access list
  2277. ------------------
  2278. `-A`oldfile''
  2279.      Append the access list of  `oldfile' to  the  access list of the
  2280.      RCS file.
  2281. File: rcs,  Node: rcsOpte,  Next: rcsOptb,  Prev: rcsOptAu,  Up: rcsOptions
  2282. Erase Login names
  2283. -----------------
  2284. `-e`logins''
  2285.      Erase  the  login  names  appearing  in  the comma- separated list
  2286.      `logins' from the access list  of  the RCS  file.   If `logins' is
  2287.      omitted, erase the entire access list.
  2288. File: rcs,  Node: rcsOptb,  Next: rcsOptc,  Prev: rcsOpte,  Up: rcsOptions
  2289. Default branch
  2290. --------------
  2291. `-b`rev''
  2292.      Set the default branch to `rev'.  If `rev' is  omitted, the
  2293.      default  branch  is reset to the (dynamically) highest branch on
  2294.      the trunk.
  2295. File: rcs,  Node: rcsOptc,  Next: rcsOptk,  Prev: rcsOptb,  Up: rcsOptions
  2296. Coment leader
  2297. -------------
  2298. `-c`string''
  2299.      Set the comment leader to `string'.  An  initial `ci', or an `rcs
  2300.      -i' without `-c', guesses the comment leader from the suffix of the
  2301.      working filename.
  2302.      This option is obsolescent, since RCS normally uses the  preceding
  2303.      `$Log$' line's prefix when inserting log lines during checkout
  2304.      (*Note coIntro::).  However, older  versions  of  RCS  use  the
  2305.      comment  leader instead of the `$Log$' line's prefix, so if you
  2306.      plan to  access a file with both old and new versions of RCS, make
  2307.      sure its comment leader matches its `$Log$' line prefix.
  2308. File: rcs,  Node: rcsOptk,  Next: rcsOptl,  Prev: rcsOptc,  Up: rcsOptions
  2309. Keyword substitution
  2310. --------------------
  2311. `-k`subst''
  2312.      Set the default keyword substitution to `subst'.  The effect of
  2313.      keyword  substitution  is  described  in *Note coKeyword::. Giving
  2314.      an explicit `-k' option to co, `rcsdiff', and `rcsmerge'
  2315.      overrides this  default.  Beware `rcs -kv',  because  `-kv'  is
  2316.      incompatible with `co -l'. Use `rcs -kkv' to restore the normal
  2317.      default  keyword substitution.
  2318. File: rcs,  Node: rcsOptl,  Next: rcsOptu,  Prev: rcsOptk,  Up: rcsOptions
  2319. Lock revision
  2320. -------------
  2321. `-l`rev''
  2322.      Lock  the revision with number `rev'.  If a branch is given, lock
  2323.      the latest revision on that branch.  If `rev' is  omitted,  lock
  2324.      the latest revision on the default  branch.   Locking   prevents
  2325.      overlapping changes.   If  someone else already holds the lock,
  2326.      the lock is broken as with `rcs -u' (see below).
  2327. File: rcs,  Node: rcsOptu,  Next: rcsOptLu,  Prev: rcsOptl,  Up: rcsOptions
  2328. Unlock revisions
  2329. ----------------
  2330. `-u`rev''
  2331.      Unlock the revision with number `rev'. If  a  branch is given,
  2332.      unlock  the  latest  revision  on  that branch.  If `rev' is
  2333.      omitted, remove the latest  lock held by the caller.  Normally,
  2334.      only the locker of a revision can unlock it.  Somebody else
  2335.      unlocking  a revision  breaks the lock. This causes a mail message
  2336.      to be sent to the original locker. The  message contains  a
  2337.      commentary  solicited  from  the breaker.  The commentary is
  2338.      terminated  by  end-of-file or by a line containing `.' by itself.
  2339. File: rcs,  Node: rcsOptLu,  Next: rcsOptUu,  Prev: rcsOptu,  Up: rcsOptions
  2340. Strict Locking
  2341. --------------
  2342.      Set  locking  to `strict'.  Strict locking means that the owner of
  2343.      an RCS file is not exempt from locking for  checkin.  This option
  2344.      should be used for files that are shared.
  2345. File: rcs,  Node: rcsOptUu,  Next: rcsOptm,  Prev: rcsOptLu,  Up: rcsOptions
  2346. Locking non-strict
  2347. ------------------
  2348.      Set  locking  to  non-strict.   Non-strict  locking means  that
  2349.      the  owner  of  a file need not lock a revision for checkin.  This
  2350.      option  should  `not' be used  for  files  that are shared.
  2351.      Whether default locking is strict  is  determined  by  your  system
  2352.      administrator, but it is normally strict.
  2353. File: rcs,  Node: rcsOptm,  Next: rcsOptMu,  Prev: rcsOptUu,  Up: rcsOptions
  2354. Replace log message
  2355. -------------------
  2356. `-m`rev':`msg''
  2357.      Replace revision `rev''s log message with `msg'.
  2358. File: rcs,  Node: rcsOptMu,  Next: rcsOptn,  Prev: rcsOptm,  Up: rcsOptions
  2359. Do not send Mail
  2360. ----------------
  2361.      Do  not  send  mail  when  breaking somebody else's lock.  This
  2362.      option is not meant for casual use;  it is  meant  for  programs
  2363.      that  warn users by other means, and invoke `rcs -u' only as a
  2364.      low-level lock-breaking operation.
  2365. File: rcs,  Node: rcsOptn,  Next: rcsOptNu,  Prev: rcsOptMu,  Up: rcsOptions
  2366. Symbolic name
  2367. -------------
  2368. `-n`name'[:[`rev']]'
  2369.      Associate the symbolic name `name' with the branch or revision
  2370.      `rev'.  Delete the symbolic name if  both: and `rev' are omitted;
  2371.      otherwise, print an error message if `name' is  already
  2372.      associated  with  another number.   If `rev' is symbolic, it is
  2373.      expanded before association.  A `rev' consisting of a  branch
  2374.      number followed by a . stands for the current latest revision in
  2375.      the branch.  A : with an empty  `rev' stands for  the  current
  2376.      latest  revision  on the default branch,   normally   the   trunk.
  2377.        For   example,
  2378.           rcs -n`name': RCS/*
  2379.      associates `name' with the current latest revision of all the
  2380.      named  RCS  files;  this contrasts  with
  2381.           rcs -n`name':$ RCS/*
  2382.      which associates `name' with the revision numbers extracted
  2383.      from  keyword strings in the corresponding working files.
  2384. File: rcs,  Node: rcsOptNu,  Next: rcsOpto,  Prev: rcsOptn,  Up: rcsOptions
  2385. Override Symbolic name
  2386. ----------------------
  2387. `-N`name'[:[`rev']]'
  2388.      Act  like  `-n', except override any previous assignment of `name'.
  2389. File: rcs,  Node: rcsOpto,  Next: rcsOptq,  Prev: rcsOptNu,  Up: rcsOptions
  2390. Delete revisions
  2391. ----------------
  2392. `-o`range''
  2393.      deletes ("outdates") the revisions given by  `range'.  A  range
  2394.      consisting  of  a  single revision number means that  revision.
  2395.      A  range  consisting  of  a branch  number  means  the  latest
  2396.      revision on that branch.  A range of the form ``rev1':`rev2'' means
  2397.      revisions `rev1' to `rev2' on the same branch, `:`rev'' means from
  2398.      the beginning of the branch containing `rev' up to  and including
  2399.      `rev', and `rev:' means from revision `rev' to the end of the
  2400.      branch containing `rev' . None of  the outdated  revisions  can
  2401.      have branches or locks.
  2402. File: rcs,  Node: rcsOptq,  Next: rcsOptIu,  Prev: rcsOpto,  Up: rcsOptions
  2403. Quiet mode
  2404. ----------
  2405.      Run quietly; do not print diagnostics.
  2406. File: rcs,  Node: rcsOptIu,  Next: rcsOpts,  Prev: rcsOptq,  Up: rcsOptions
  2407. Interactive
  2408. -----------
  2409.      Run interactively, even if the  standard  input  is not a terminal.
  2410. File: rcs,  Node: rcsOpts,  Next: rcsOptt,  Prev: rcsOptIu,  Up: rcsOptions
  2411. States
  2412. ------
  2413. `-s`state':[`rev']'
  2414.      Set  the  state  attribute  of  the revision `rev' to `state'.  If
  2415.      `rev' is a branch number, assume the  latest revision  on  that
  2416.      branch.  If `rev' is omitted, assume the latest revision on the
  2417.      default  branch.  Any  identifier  is acceptable for `state' .  A
  2418.      useful set of states is Exp (for experimental), Stab  (for
  2419.      stable), and Rel (for released).  By default, *Note ciOpts:: sets
  2420.      the state of a revision to Exp.
  2421. File: rcs,  Node: rcsOptt,  Next: rcsOptTu,  Prev: rcsOpts,  Up: rcsOptions
  2422. Descriptive Text
  2423. ----------------
  2424. `-t`file''
  2425.      Write descriptive text from  the  contents  of  the named `file'
  2426.      into the RCS file, deleting the existing text.  The `file'
  2427.      pathname cannot begin with  `-'.  If `file' is  omitted,  obtain
  2428.      the  text from standard input, terminated by end-of-file or by a
  2429.      line  containing.  by itself.  Prompt for the text if interaction
  2430.      is possible; see `-I' *Note rcsOptIu::.  With  `-i',  descriptive
  2431.      text is obtained even if `-t' is not given.
  2432. `-t-`string''
  2433.      Write descriptive text from the `string' into the RCS file,
  2434.      deleting the existing text.
  2435. File: rcs,  Node: rcsOptTu,  Next: rcsOptV,  Prev: rcsOptt,  Up: rcsOptions
  2436. Modification Time
  2437. -----------------
  2438.      Preserve the modification  time  on  the  RCS  file unless a
  2439.      revision is removed.  This option can sup- press extensive
  2440.      recompilation caused by  a  `make' dependency  of some copy of the
  2441.      working file on the RCS file.  Use this option with care; it  can
  2442.      suppress recompilation  even  when it is needed, i.e.  when a
  2443.      change to the RCS file would mean  a  change to keyword strings in
  2444.      the working file.
  2445. File: rcs,  Node: rcsOptV,  Next: rcsOptx,  Prev: rcsOptTu,  Up: rcsOptions
  2446. Version
  2447. -------
  2448.      Print RCS's version number.
  2449. `-V`n''
  2450.      Emulate RCS version `n'.  See *Note coOptV:: for details.
  2451. File: rcs,  Node: rcsOptx,  Next: rcsOptz,  Prev: rcsOptV,  Up: rcsOptions
  2452. Suffixes
  2453. --------
  2454. `-x`suffixes''
  2455.      Use `suffixes' to characterize RCS files. See *Note ciOptx::.
  2456. File: rcs,  Node: rcsOptz,  Prev: rcsOptx,  Up: rcsOptions
  2457. Time Zone
  2458. ---------
  2459. `-z`zone''
  2460.      Use `zone' as the default time zone.  This option has no  effect;
  2461.      it  is  present for compatibility with other RCS commands.
  2462. File: rcs,  Node: rcsCompatibility,  Next: rcsFiles,  Prev: rcsOptions,  Up: rcs
  2463. Compatibility
  2464. -------------
  2465.    The `-b`rev'' option generates an  RCS  file  that  cannot  be
  2466. parsed by RCS version 3 or earlier.
  2467.    The  `-k`subst'' options  (except  `-kkv') generate an RCS file that
  2468. cannot be parsed by RCS version 4 or earlier.
  2469.    Use rcs `-V`n'' to make an RCS file acceptable to RCS  version `n'
  2470. by discarding information that would confuse version `n'.
  2471.    RCS version 5.5  and  earlier  does  not  support  the  `-x' option,
  2472. and requires a `,v' suffix on an RCS pathname.
  2473. File: rcs,  Node: rcsFiles,  Next: rcsEnv,  Prev: rcsCompatibility,  Up: rcs
  2474. Files
  2475. -----
  2476.    rcs accesses files much as `ci' does, except that it uses the
  2477. effective user for all accesses, it does not write the working  file
  2478. or its directory, and it does not even read
  2479. File: rcs,  Node: rcsEnv,  Next: rcsDiag,  Prev: rcsFiles,  Up: rcs
  2480. Environment
  2481. ===========
  2482. `RCSINIT'
  2483.      options prepended to the argument list, separated by spaces.  See
  2484.      *Note ciEnv:: for details.
  2485. File: rcs,  Node: rcsDiag,  Next: rcsBugs,  Prev: rcsEnv,  Up: rcs
  2486. Diagnostics
  2487. ===========
  2488.    The RCS pathname and the revisions outdated are written to the
  2489. diagnostic  output.   The  exit status is zero if and only if all
  2490. operations were successful.
  2491. File: rcs,  Node: rcsBugs,  Prev: rcsDiag,  Up: rcs
  2492.    A catastrophe (e.g. a system crash) can cause RCS to leave behind  a
  2493. semaphore file that causes later invocations of RCS to claim that the
  2494. RCS file is in use.   To  fix  this, remove  the semaphore file.  A
  2495. semaphore file's name typically begins with `,' or ends with `_'.
  2496.    The separator for revision ranges in the `-o' option used to be  `-'
  2497. instead of `:', but this leads to confusion when symbolic names
  2498. contain `-'.  For backwards compatibility `rcs -o' still  supports  the
  2499. old  - separator, but it warns about this obsolete use.
  2500.    Symbolic names need not refer  to  existing  revisions  or branches.
  2501. For example, the `-o' option does not remove symbolic names for the
  2502. outdated revisions; you must use `-n' to remove the names.
  2503. File: rcs,  Node: ident,  Next: rcsclean,  Prev: rcs,  Up: Top
  2504. ident - identify RCS keywords
  2505. *****************************
  2506. * Menu:
  2507. * identIntro::       Introduction to `rcs'.
  2508. * identOptions::     command line options of `rcs'.
  2509. * identKeywords::    Keywords.
  2510. File: rcs,  Node: identIntro,  Next: identOptions,  Up: ident
  2511. Description
  2512. ===========
  2513.    Ident   searches   for   all   instances  of  the  pattern
  2514. `$keyword: text $' in the named files or, if  no  files  are named, the
  2515. standard input.
  2516.    These  patterns are normally inserted automatically by the RCS
  2517. command `co' (*Note coKeyword::), but can also be inserted manually.
  2518. The option `-q'(*Note identOptq::)  suppresses  the warning given if
  2519. there are no patterns in a file.  The option `-V'(*Note identOptV::)
  2520. prints ident's  version number.
  2521.    ident  works  on  text  files  as well as object files and dumps.
  2522. For example, if the C program in f.c contains:
  2523.      #include <stdio.h>
  2524.      static char const rcsid[] =
  2525.          "$Id: f.c,v 5.4 1993/11/09  17:40:15  eggert  Exp $";
  2526.      int main() { return printf("%s\n", rcsid) == EOF; }
  2527.    and f.c is compiled into f.o, then the command
  2528.      ident  f.c  f.o
  2529.    will output
  2530.      f.c:
  2531.          $Id: f.c,v 5.4 1993/11/09 17:40:15 eggert Exp $
  2532.      f.o:
  2533.          $Id: f.c,v 5.4 1993/11/09 17:40:15 eggert Exp $
  2534.    If a C program defines a string like rcsid above but  does not  use
  2535. it,  `lint'  may complain, and some C compilers will optimize away the
  2536. string.  The most reliable solution is  to  have the program use the
  2537. rcsid string, as shown in the example above.
  2538.    ident finds all instances of the `$keyword: text $' pattern, even
  2539. if `keyword' is not actually an RCS-supported keyword.  This gives you
  2540. information about nonstandard keywords like `$XConsortium$'.
  2541. File: rcs,  Node: identOptions,  Next: identKeywords,  Prev: identIntro,  Up: ident
  2542. Command line options of ident
  2543. =============================
  2544.    Overview off all options which can be given to `rcs'
  2545.    `Synopsis': ident [options] [ file ... ]
  2546. * Menu:
  2547. * identOptq::        -q Quiet mode.
  2548. * identOptV::        -V Version
  2549. File: rcs,  Node: identOptq,  Next: identOptV,  Up: identOptions
  2550. Quiet mode
  2551. ----------
  2552.      Suppress warning given if there are no patterns in a file.
  2553. File: rcs,  Node: identOptV,  Prev: identOptq,  Up: identOptions
  2554. Version
  2555. -------
  2556.      Print ident's version number.
  2557. File: rcs,  Node: identKeywords,  Prev: identOptions,  Up: ident
  2558. Keywords
  2559. ========
  2560.    The maintained list of keywords of `co' you'll find in *Note
  2561. coKeyword::.
  2562. All times are given in Coordinated Universal  Time (UTC,  sometimes
  2563. called GMT) by default, but if the files were checked out with `co''s
  2564. `-z`zone'' (*Note coOptz::) option, times are  given with a numeric
  2565. time zone indication appended.
  2566. File: rcs,  Node: rcsclean,  Next: rcsdiff,  Prev: ident,  Up: Top
  2567. rcsclean - clean up working files
  2568. *********************************
  2569. * Menu:
  2570. * rcscleanIntro::       Introduction to `rcsclean'.
  2571. * rcscleanOptions::     command line options of `rcsclean'.
  2572. * rcscleanExamples::    Examples in using `rcsclean'.
  2573. * rcscleanFiles::       Files.
  2574. * rcscleanEnv::         The Environment which can change the
  2575.                         behaviour of much of the RCS commands.
  2576. * rcscleanDiag::        Diagnostic output of `rcsclean'.
  2577. * rcscleanBugs::        Bugs.
  2578. File: rcs,  Node: rcscleanIntro,  Next: rcscleanOptions,  Up: rcsclean
  2579. Description
  2580. ===========
  2581.    `rcsclean'  removes  files  that  are  not  being worked on.
  2582. `rcsclean -u' (*Note rcscleanOptu::) also unlocks and removes files
  2583. that are  being worked on but have not changed.
  2584.    For  each  `file' given, rcsclean compares the working file and a
  2585. revision in the corresponding RCS file.  If it finds a  difference,  it
  2586. does  nothing.   Otherwise,  it  first unlocks the revision if the
  2587. `-u' (*Note rcscleanOptu::  option is given,  and  then removes  the
  2588. working  file  unless  the  working  file is writable and the revision
  2589. is locked.  It logs its  actions by  outputting the corresponding `rcs
  2590. -u' (*Note rcsOptu::) and `rm -f' commands on the standard output.
  2591.    Files are paired as explained in *Note ciFiles::.  If  no  `file' is
  2592. given,  all  working  files  in  the current directory are cleaned.
  2593. Pathnames matching  an  RCS  suffix  denote  RCS files; all others
  2594. denote working files.
  2595.    The  number  of  the revision to which the working file is compared
  2596. may be attached to any of the options `-n', `-q', `-r', or `-u'.  If no
  2597. revision number is specified, then if the `-u' option is given and the
  2598. caller has  one  revision  locked, rcsclean  uses  that revision;
  2599. otherwise rcsclean uses the latest revision on the default branch,
  2600. normally the  root.
  2601.    `rcsclean' is  useful  for clean targets in makefiles.  *Note
  2602. rcsdiff::, which prints  out  the  differences,  and `ci' (*Note
  2603. ciIntro::),  which normally reverts to the previous revision if a file
  2604. was not changed.
  2605. File: rcs,  Node: rcscleanOptions,  Next: rcscleanExamples,  Prev: rcscleanIntro,  Up: rcsclean
  2606. Command line options of rcsclean
  2607. ================================
  2608.    Overview off all options which can be given to `rcsclean'
  2609.    `Synopsis': rcsclean [options] [ file ... ]
  2610. * Menu:
  2611. * rcscleanOptk::   -k Keyword substitution.
  2612. * rcscleanOptn::   -n Do not unlock or remove.
  2613. * rcscleanOptq::   -q Quiet mode.
  2614. * rcscleanOptr::   -r Revision for comparison.
  2615. * rcscleanOptT::   -T Modification time.
  2616. * rcscleanOptu::   -u unlock revisions.
  2617. * rcscleanOptV::   -V Version; Emulation RCS Version.
  2618. * rcscleanOptx::   -x Suffixes.
  2619. * rcscleanOptz::   -z Time zone.
  2620. File: rcs,  Node: rcscleanOptk,  Next: rcscleanOptn,  Up: rcscleanOptions
  2621. Keyword substitution
  2622. --------------------
  2623. `-k`subst''
  2624.      Use `subst' style keyword substitution when  retrieving the
  2625.      revision  for  comparison.  See *Note coKeyword:: for details.
  2626. File: rcs,  Node: rcscleanOptn,  Next: rcscleanOptq,  Prev: rcscleanOptk,  Up: rcscleanOptions
  2627. No removing
  2628. -----------
  2629. `-n`rev''
  2630.      Do not actually remove  any  files  or  unlock  any revisions.
  2631.      Using  this  option will tell you what `rcsclean' would do without
  2632.      actually doing it.
  2633. File: rcs,  Node: rcscleanOptq,  Next: rcscleanOptr,  Prev: rcscleanOptn,  Up: rcscleanOptions
  2634. Quiet mode
  2635. ----------
  2636. `-q`rev''
  2637.      Do not log the actions taken on standard output.
  2638. File: rcs,  Node: rcscleanOptr,  Next: rcscleanOptT,  Prev: rcscleanOptq,  Up: rcscleanOptions
  2639. Revision for comparison
  2640. -----------------------
  2641. `-r`rev''
  2642.      This option has no effect other than specifying the revision for
  2643.      comparison.
  2644. File: rcs,  Node: rcscleanOptT,  Next: rcscleanOptu,  Prev: rcscleanOptr,  Up: rcscleanOptions
  2645. Modification time
  2646. -----------------
  2647.      Preserve the modification time on the RCS file even if the RCS
  2648.      file changes because a lock is  removed.  This  option  can
  2649.      suppress extensive recompilation caused by a `make' dependency of
  2650.      some  other  copy of  the  working  file  on  the RCS file.  Use
  2651.      this option with care;  it  can  suppress  recompilation even
  2652.      when it is needed, i.e. when the lock removal would mean a change
  2653.      to keyword strings in the other working file.
  2654. File: rcs,  Node: rcscleanOptu,  Next: rcscleanOptV,  Prev: rcscleanOptT,  Up: rcscleanOptions
  2655. Unlock revision
  2656. ---------------
  2657. `-u`rev''
  2658.      Unlock  the revision if it is locked and no difference is found.
  2659. File: rcs,  Node: rcscleanOptV,  Next: rcscleanOptx,  Prev: rcscleanOptu,  Up: rcscleanOptions
  2660. Version and Emulation
  2661. ---------------------
  2662.      Print RCS's version number.
  2663. `-V`n''
  2664.      Emulate RCS version `n'.  *Note coOptV:: for details.
  2665. File: rcs,  Node: rcscleanOptx,  Next: rcscleanOptz,  Prev: rcscleanOptV,  Up: rcscleanOptions
  2666. Suffixes
  2667. --------
  2668. `-x`suffixes''
  2669.      Use `suffixes' to characterize RCS files.  See  *Note ciOptx:: for
  2670.      details.
  2671. File: rcs,  Node: rcscleanOptz,  Prev: rcscleanOptx,  Up: rcscleanOptions
  2672. Time zone
  2673. ---------
  2674. `-z`zone''
  2675.      `-z`zone'' Use `zone' as the time zone for keyword substitution;
  2676.      see *Note coOptz:: for details.
  2677. File: rcs,  Node: rcscleanExamples,  Next: rcscleanFiles,  Prev: rcscleanOptions,  Up: rcsclean
  2678. Examples
  2679. ========
  2680.      rcsclean  *.c  *.h
  2681.    removes all working files ending in .c or .h that were not changed
  2682. since their checkout.
  2683.      rcsclean
  2684.    removes  all  working  files in the current directory that were not
  2685. changed since their checkout.
  2686. File: rcs,  Node: rcscleanFiles,  Next: rcscleanEnv,  Prev: rcscleanExamples,  Up: rcsclean
  2687. Files
  2688. =====
  2689.    rcsclean accesses files much as `ci' (*Note ciFiles::)does.
  2690. File: rcs,  Node: rcscleanEnv,  Next: rcscleanDiag,  Prev: rcscleanFiles,  Up: rcsclean
  2691. Environment
  2692. ===========
  2693. `RCSINIT'
  2694.      options prepended to the argument list, separated by spaces.  See
  2695.      *Note ciEnv:: for details.
  2696. File: rcs,  Node: rcscleanDiag,  Next: rcscleanBugs,  Prev: rcscleanEnv,  Up: rcsclean
  2697. Diagnostics
  2698. ===========
  2699.    The exit status is zero if and only if all operations were
  2700. successful.   Missing  working  files  and  RCS  files are silently
  2701. ignored.
  2702. File: rcs,  Node: rcscleanBugs,  Prev: rcscleanDiag,  Up: rcsclean
  2703.    At  least  one  `file' must be given in older Unix versions that do
  2704. not provide the needed directory  scanning  operations.
  2705. File: rcs,  Node: rcsdiff,  Next: rcsmerge,  Prev: rcsclean,  Up: Top
  2706. rcsdiff - compare RCS revisions
  2707. *******************************
  2708. * Menu:
  2709. * rcsdiffIntro::        Introduction to `rcsdiff'.
  2710. * rcsdiffOptions::      command line options of `rcsdiff'.
  2711. * rcsdiffExamples::     Examples in using `rcsdiff'.
  2712. * rcsdiffEnv::          The Environment which can change the
  2713.                         behaviour of much of the RCS commands.
  2714. * rcsdiffDiag::         Diagnostic output of `rcsdiff'.
  2715. File: rcs,  Node: rcsdiffIntro,  Next: rcsdiffOptions,  Up: rcsdiff
  2716. Description
  2717. ===========
  2718.    rcsdiff  runs `diff' to compare two revisions of each RCS file given.
  2719.    Pathnames matching an RCS suffix  denote  RCS  files;  all others
  2720. denote   working  files.   Names  are  paired  as explained in *Note
  2721. ciFiles::.
  2722. File: rcs,  Node: rcsdiffOptions,  Next: rcsdiffExamples,  Prev: rcsdiffIntro,  Up: rcsdiff
  2723. Command line options of rcsdiff
  2724. ===============================
  2725.    Overview off all options which can be given to `rcsdiff'
  2726.    `Synopsis': rcsdiff [options] [`-r`rev1''] [`-r`rev2'']  [`diff
  2727. options'] [ file ... ]
  2728. * Menu:
  2729. * rcsdiffOptk::   -k Keyword substitution.
  2730. * rcsdiffOptq::   -q Quiet mode.
  2731. * rcsdiffOptr::   -r Revision for comparison.
  2732. * rcsdiffOptT::   -T Modification time.
  2733. * rcsdiffOptV::   -V Version; Emulation RCS Version.
  2734. * rcsdiffOptx::   -x Suffixes.
  2735. File: rcs,  Node: rcsdiffOptk,  Next: rcsdiffOptq,  Prev: rcsdiffOptions,  Up: rcsdiffOptions
  2736. Keyword substitution
  2737. --------------------
  2738. `-k`subst''
  2739.      `-k`subst'' affects keyword substitution when extracting
  2740.      revisions, as described in *Note coOptk::; for example, `-kk -r1.1
  2741.      -r1.2' ignores differences in keyword values when comparing
  2742.      revisions  `1.1'  and  `1.2'.  To avoid excess output from locker
  2743.      name substitution, `-kkvl' is assumed if
  2744.        1. at  most  one revision  option  is given,
  2745.        2. no `-k' option is given,
  2746.        3. `-kkv' is the default  keyword  substitution,  and
  2747.        4. the working file's mode would be produced by `co -l'.
  2748. File: rcs,  Node: rcsdiffOptq,  Next: rcsdiffOptr,  Prev: rcsdiffOptk,  Up: rcsdiffOptions
  2749. Quiet mode
  2750. ----------
  2751. `-q`rev''
  2752.      The option -q suppresses diagnostic output.
  2753. File: rcs,  Node: rcsdiffOptr,  Next: rcsdiffOptT,  Prev: rcsdiffOptq,  Up: rcsdiffOptions
  2754. Revision for comparison
  2755. -----------------------
  2756. `-r`rev1' -r`rev2''
  2757.      Zero, one, or two  revisions  may  be  specified  with  `-r'.  If
  2758.      both `rev1' and `rev2' are omitted,  rcsdiff  compares  the latest
  2759.      revision  on  the  default  branch (by default the trunk) with
  2760.      the  contents  of  the  corresponding  working file.   This  is
  2761.      useful  for determining what you changed since the last checkin.
  2762.      If `rev1' is given, but `rev2' is  omitted,  rcsdiff  compares
  2763.      revision  `rev1' of  the  RCS file with the contents of the
  2764.      corresponding working file.
  2765.      If both `rev1' and `rev2' are given,  rcsdiff  compares revisions
  2766.      `rev1' and `rev2' of the RCS file.
  2767.      Both  `rev1' and  `rev2' may be given numerically or symbolically.
  2768. File: rcs,  Node: rcsdiffOptT,  Next: rcsdiffOptV,  Prev: rcsdiffOptr,  Up: rcsdiffOptions
  2769. Modification time
  2770. -----------------
  2771.      For details *Note coOptT::.
  2772. File: rcs,  Node: rcsdiffOptV,  Next: rcsdiffOptx,  Prev: rcsdiffOptT,  Up: rcsdiffOptions
  2773. Version and Emulation
  2774. ---------------------
  2775.      Print RCS's version number.
  2776. `-V`n''
  2777.      Emulate RCS version `n'.  *Note coOptV:: for details.
  2778. File: rcs,  Node: rcsdiffOptx,  Prev: rcsdiffOptV,  Up: rcsdiffOptions
  2779. Suffixes
  2780. --------
  2781. `-x`suffixes''
  2782.      Use `suffixes' to characterize RCS files.  See  *Note ciOptx:: for
  2783.      details.
  2784. File: rcs,  Node: rcsdiffExamples,  Next: rcsdiffEnv,  Prev: rcsdiffOptions,  Up: rcsdiff
  2785. Examples
  2786. ========
  2787.      rcsdiff  *.c  *.h
  2788.    removes all working files ending in .c or .h that were not changed
  2789. since their checkout.
  2790.      rcsdiff
  2791.    removes  all  working  files in the current directory that were not
  2792. changed since their checkout.
  2793. File: rcs,  Node: rcsdiffEnv,  Next: rcsdiffDiag,  Prev: rcsdiffExamples,  Up: rcsdiff
  2794. Environment
  2795. ===========
  2796. `RCSINIT'
  2797.      options prepended to the argument list, separated by spaces.  See
  2798.      *Note ciEnv:: for details.
  2799. File: rcs,  Node: rcsdiffDiag,  Prev: rcsdiffEnv,  Up: rcsdiff
  2800. Diagnostics
  2801. ===========
  2802.    Exit status is 0 for no differences during any comparison, 1 for
  2803. some differences, 2 for trouble.
  2804. File: rcs,  Node: rcsmerge,  Next: rlog,  Prev: rcsdiff,  Up: Top
  2805. rcsmerge - merge RCS versions
  2806. *****************************
  2807. * Menu:
  2808. * rcsmergeIntro::    Introduction to `rcs'.
  2809. * rcsmergeOptions::  command line options of `rcs'.
  2810. * rcsmergeExamples:: Examples of `rcsmerge'.
  2811. * rcsmergeEnv::      The Environment which can change the
  2812.                      behaviour of much of the RCS commands.
  2813. * rcsmergeDiag::     Diagnostic output of `rcs'.
  2814. File: rcs,  Node: rcsmergeIntro,  Next: rcsmergeOptions,  Up: rcsmerge
  2815. Description
  2816. ===========
  2817.    rcsmerge incorporates the changes between two revisions of an RCS
  2818. file into the corresponding working file.
  2819.    Pathnames matching an RCS suffix  denote  RCS  files;  all others
  2820. denote   working  files.   Names  are  paired  as explained in *Note
  2821. ciFiles::.
  2822.    At least one revision must be specified with  one  of  the options
  2823. described  below,  usually `-r'.  At most two revisions may be
  2824. specified.  If only one revision  is  specified,  the latest revision
  2825. on the default branch (normally the highest branch on the trunk) is
  2826. assumed for the second revision.  Revisions may be specified
  2827. numerically or symbolically.
  2828.    rcsmerge prints a  warning  if  there  are  overlaps,  and delimits
  2829. the overlapping regions as explained in *Note merge::.  The command is
  2830. useful for  incorporating  changes  into  a checked-out revision.
  2831. File: rcs,  Node: rcsmergeOptions,  Next: rcsmergeExamples,  Prev: rcsmergeIntro,  Up: rcsmerge
  2832. Command line options of rcsmerge
  2833. ================================
  2834.    Overview off all options which can be given to `rcsmerge'
  2835.    `Synopsis': rcsmerge [options] file ...
  2836. * Menu:
  2837. * rcsmergeOptA::   -A Output conflicts the -A style.
  2838. * rcsmergeOptE::   -E specify Conflict style
  2839. * rcsmergeOptk::   -k Keyword substitution.
  2840. * rcsmergeOptp::   -p send to stdout.
  2841. * rcsmergeOptT::   -T Modification time.
  2842. * rcsmergeOptV::   -V Version; Emulation of RCS Version.
  2843. * rcsmergeOptx::   -x Suffixes.
  2844. * rcsmergeOptz::   -z Time zone.
  2845. File: rcs,  Node: rcsmergeOptA,  Next: rcsmergeOptE,  Prev: rcsmergeOptions,  Up: rcsmergeOptions
  2846. Output conflicts
  2847. ----------------
  2848.      Output conflicts using the `-A' style of `diff3', if supported by
  2849.      `diff3'.  This merges all changes  leading from  `file2' to
  2850.      `file3' into `file1', and generates the most verbose output.
  2851. File: rcs,  Node: rcsmergeOptE,  Next: rcsmergeOptk,  Prev: rcsmergeOptA,  Up: rcsmergeOptions
  2852. Less information
  2853. ----------------
  2854. `-E -e'
  2855.      These options specify conflict styles that generate less
  2856.      information   than  `-A'.   See  `diff3'  for details.  The
  2857.      default is  `-E'. With  `-e',  `rcsmerge' does not warn about
  2858.      conflicts.
  2859. File: rcs,  Node: rcsmergeOptk,  Next: rcsmergeOptp,  Prev: rcsmergeOptE,  Up: rcsmergeOptions
  2860. Keyword substitution
  2861. --------------------
  2862. `-k`subst''
  2863.      Use  `subst' style  keyword substitution.  See *Note coKeyword::
  2864.      for details.  For example, `-kk -r1.1 -r1.2'  ignores differences
  2865.      in  keyword  values  when  merging the changes from `1.1' to
  2866.      `1.2'.  It normally does not make sense  to  merge binary files as
  2867.      if they were text, so `rcsmerge' refuses to merge files if `-kb'
  2868.      expansion is used.
  2869. File: rcs,  Node: rcsmergeOptp,  Next: rcsmergeOptT,  Prev: rcsmergeOptk,  Up: rcsmergeOptions
  2870. Send to standard out
  2871. --------------------
  2872. `-p[`rev']'
  2873.      Send the result to standard output instead of over- writing the
  2874.      working file.
  2875. File: rcs,  Node: rcsmergeOptT,  Next: rcsmergeOptV,  Prev: rcsmergeOptp,  Up: rcsmergeOptions
  2876. Modification Time
  2877. -----------------
  2878.      This option has no effect; it is present  for  compatibility with
  2879.      other RCS commands.
  2880. File: rcs,  Node: rcsmergeOptV,  Next: rcsmergeOptx,  Prev: rcsmergeOptT,  Up: rcsmergeOptions
  2881. Version
  2882. -------
  2883.      Print RCS's version number.
  2884. `-V`n''
  2885.      Emulate RCS version `n'.  See *Note coOptV:: for details.
  2886. File: rcs,  Node: rcsmergeOptx,  Next: rcsmergeOptz,  Prev: rcsmergeOptV,  Up: rcsmergeOptions
  2887. Suffixes
  2888. --------
  2889. `-x`suffixes''
  2890.      Use `suffixes' to characterize RCS files. See *Note ciOptx::.
  2891. File: rcs,  Node: rcsmergeOptz,  Prev: rcsmergeOptx,  Up: rcsmergeOptions
  2892. Time Zone
  2893. ---------
  2894. `-z`zone''
  2895.      Use `zone' as the time zone for keyword substitution.  See *Note
  2896.      coOptz:: for details.
  2897. File: rcs,  Node: rcsmergeExamples,  Next: rcsmergeEnv,  Prev: rcsmergeOptions,  Up: rcsmerge
  2898. Examples
  2899. --------
  2900.    Suppose  you  have  released  revision `2.8' of `f.c'.  Assume
  2901. furthermore that after you complete an unreleased revision `3.4', you
  2902. receive updates to release `2.8' from someone else.  To combine the
  2903. updates to `2.8' and your changes between `2.8' and `3.4', put the
  2904. updates to `2.8' into file `f.c' and execute
  2905.      rcsmerge  -p  -r2.8  -r3.4  f.c  >f.merged.c
  2906.    Then  examine  `f.merged.c'.   Alternatively, if you want to save
  2907. the updates to `2.8' in the RCS file, check them in  as revision
  2908. `2.8.1.1' and execute `co -j':
  2909.      ci  -r2.8.1.1  f.c
  2910.      co  -r3.4  -j2.8:2.8.1.1  f.c
  2911.    As  another  example,  the  following  command  undoes the changes
  2912. between revision `2.4' and  `2.8'  in  your  currently checked out
  2913. revision in `f.c'.
  2914.      rcsmerge  -r2.8  -r2.4  f.c
  2915.    Note  the  order  of  the  arguments, and that `f.c' will be
  2916. overwritten.
  2917. File: rcs,  Node: rcsmergeEnv,  Next: rcsmergeDiag,  Prev: rcsmergeExamples,  Up: rcsmerge
  2918. Environment
  2919. ===========
  2920. `RCSINIT'
  2921.      options prepended to the argument list, separated by spaces.  See
  2922.      *Note ciEnv:: for details.
  2923. File: rcs,  Node: rcsmergeDiag,  Prev: rcsmergeEnv,  Up: rcsmerge
  2924. Diagnostics
  2925. ===========
  2926.    Exit  status  is 0 for no overlaps, 1 for some overlaps, 2 for
  2927. trouble.
  2928. File: rcs,  Node: rlog,  Next: merge,  Prev: rcsmerge,  Up: Top
  2929. rlog - print log messages
  2930. *************************
  2931. * Menu:
  2932. * rlogIntro::        Introduction to `rlog'.
  2933. * rlogOptions::      command line options of `rlog'.
  2934. * rlogExamples::     Examples.
  2935. * rlogEnv::          The Environment which can change the
  2936.                      behaviour of much of the RCS commands.
  2937. * rlogDiag::         Diagnostic output of `rlog'.
  2938. * rlogBugs::         Bugs.
  2939. File: rcs,  Node: rlogIntro,  Next: rlogOptions,  Up: rlog
  2940. Description
  2941. ===========
  2942.    `rlog' prints information about RCS files.
  2943.    Pathnames matching an RCS suffix  denote  RCS  files;  all others
  2944. denote   working  files.   Names  are  paired  as explained in *Note
  2945. ciFiles::.
  2946.    `rlog' prints the following information for each  RCS  file: RCS
  2947. pathname, working pathname, head (i.e., the number of the latest
  2948. revision on the trunk), default branch,  access list, locks, symbolic
  2949. names, suffix, total number of revisions, number of  revisions
  2950. selected  for  printing,  and descriptive  text.   This  is  followed
  2951. by entries for the selected revisions in reverse chronological order
  2952. for each branch.   For  each revision, rlog prints revision number,
  2953. author, date/time, state, number  of  lines  added/deleted (with
  2954. respect  to  the  previous revision), locker of the revision (if any),
  2955. and log message.  All  times  are  displayed in  Coordinated  Universal
  2956. Time (UTC) by default; this can be overridden with  `-z'.   Without
  2957. options, `rlog' prints  complete  information.  The options below
  2958. restrict this output.
  2959. File: rcs,  Node: rlogOptions,  Next: rlogExamples,  Prev: rlogIntro,  Up: rlog
  2960. Command line options of rlog
  2961. ============================
  2962.    Overview off all options which can be given to `rlog'
  2963.    `Synopsis': rlog [options] file ...
  2964. * Menu:
  2965. * rlogOptLu::      -L Ignore RCS files.
  2966. * rlogOptRu::      -R Only names of RCS files.
  2967. * rlogOpth::       -h Only path names.
  2968. * rlogOptt::       -t Path and discriptive text.
  2969. * rlogOptN::       -N Do not print symbolic names..
  2970. * rlogOptb::       -b Information about revisions on default branch.
  2971. * rlogOptd::       -d Info about revisions with ci-date.
  2972. * rlogOptl::       -l Print locked revisions only.
  2973. * rlogOptr::       -r Informations about specified revisions.
  2974. * rlogOpts::       -s Informations about revisions with state.
  2975. * rlogOptw::       -w Informations about revisions with user.
  2976. * rlogOptTu::      -T no effect.
  2977. * rlogOptV::       -V Version; Emulation of RCS version.
  2978. * rlogOptx::       -x Suffixes.
  2979. * rlogOptz::       -z Time zone.
  2980. File: rcs,  Node: rlogOptLu,  Next: rlogOptRu,  Up: rlogOptions
  2981. Ignore RCS files without locks
  2982. ------------------------------
  2983.      Ignore RCS files that have no locks set.  This is convenient in
  2984.      combination with `-h', `-l', and `-R'.
  2985. File: rcs,  Node: rlogOptRu,  Next: rlogOpth,  Prev: rlogOptLu,  Up: rlogOptions
  2986. Only names of RCS files
  2987. -----------------------
  2988.      Print  only  the name of the RCS file.  This is convenient for
  2989.      translating a working pathname into  an  RCS pathname.
  2990. File: rcs,  Node: rlogOpth,  Next: rlogOptt,  Prev: rlogOptRu,  Up: rlogOptions
  2991. Only pathname
  2992. -------------
  2993.      Print  only  the RCS pathname, working pathname, head, default
  2994.      branch, access list,  locks,  symbolic  names, and suffix.
  2995. File: rcs,  Node: rlogOptt,  Next: rlogOptN,  Prev: rlogOpth,  Up: rlogOptions
  2996. Descriptive text
  2997. ----------------
  2998.      Print the same as `-h', plus the descriptive text.
  2999. File: rcs,  Node: rlogOptN,  Next: rlogOptb,  Prev: rlogOptt,  Up: rlogOptions
  3000. No symbolic name
  3001. ----------------
  3002.      Do not print the symbolic names.
  3003. File: rcs,  Node: rlogOptb,  Next: rlogOptd,  Prev: rlogOptN,  Up: rlogOptions
  3004. Default branch
  3005. --------------
  3006.      Print  information  about the revisions on the default branch,
  3007.      normally the highest branch on the trunk.
  3008. File: rcs,  Node: rlogOptd,  Next: rlogOptl,  Prev: rlogOptb,  Up: rlogOptions
  3009. Checkin date/time
  3010. -----------------
  3011. `-d`dates''
  3012.      Print  information  about  revisions  with  a  checkin date/time
  3013.      in  the  ranges  given  by  the  semicolon-separated list of
  3014.      `dates'.  A range of the form `d1'<`d2' or `d2'>`d1' selects  the
  3015.      revisions  that  were deposited between `d1' and `d2' exclusive.
  3016.      A range of the  form <`d' or  `d'>  selects all revisions earlier
  3017.      than `d'. A range of the form `d'< or >`d' selects all revisions
  3018.      dated later than  `d'.   If  `<' or `>' is followed by `=' then
  3019.      the ranges are inclusive, not exclusive.  A range of the  form
  3020.      `d' selects  the single,  latest revision dated `d' or earlier.
  3021.      The date/time strings `d', `d1', and `d2' are in  the free format
  3022.      explained in *Note coOptd::. Quoting is normally necessary,
  3023.      especially for `<' and `>'. Note that the separator is a semicolon.
  3024. File: rcs,  Node: rlogOptl,  Next: rlogOptr,  Prev: rlogOptd,  Up: rlogOptions
  3025. Locked revisions
  3026. ----------------
  3027. `-l`lockers''
  3028.      Print  information  about  locked  revisions only.  In addition,
  3029.      if the comma-separated list `lockers' of login names is given,
  3030.      ignore all locks other than those held by the `lockers'.  For
  3031.      example,
  3032.           rlog -L -R -lwft RCS/*
  3033.      prints the name of RCS files locked by the user `wft'.
  3034. File: rcs,  Node: rlogOptr,  Next: rlogOpts,  Prev: rlogOptl,  Up: rlogOptions
  3035. Informations about revisions
  3036. ----------------------------
  3037. `-r`revisions''
  3038.      prints information about revisions given in the commaseparated
  3039.      list `revisions' of revisions and  ranges. A range ``rev1':`rev2''
  3040.      means  revisions `rev1' to `rev2' on the same branch, `:`rev''
  3041.      means revisions from  the  beginning of  the branch up to and
  3042.      including `rev' , and ``rev':'  means revisions starting with
  3043.      `rev' to the end of  the  branch containing `rev'.  An  argument
  3044.      that is a branch means all revisions on that branch.  A  range  of
  3045.      branches means  all revisions on the branches in that range.  A
  3046.      branch followed by a . means the  latest  revision in that
  3047.      branch. A  bare `-r' with no `revisions' means the latest revision
  3048.      on the default  branch,  normally  the trunk.
  3049. File: rcs,  Node: rlogOpts,  Next: rlogOptw,  Prev: rlogOptr,  Up: rlogOptions
  3050. Information about Rev. with given state
  3051. ---------------------------------------
  3052. `-s`states''
  3053.      prints   information   about   revisions  whose  state attributes
  3054.      match one of the states given in the commaseparated list `states'.
  3055. File: rcs,  Node: rlogOptw,  Next: rlogOptTu,  Prev: rlogOpts,  Up: rlogOptions
  3056. Revisons checked in by user
  3057. ---------------------------
  3058. `-w`logins''
  3059.      prints information about revisions checked in by users with login
  3060.      names appearing in the comma-separated list `logins'.   If
  3061.      `logins' is  omitted, the user's login is assumed.
  3062. File: rcs,  Node: rlogOptTu,  Next: rlogOptV,  Prev: rlogOptw,  Up: rlogOptions
  3063. Modification Time
  3064. -----------------
  3065.      This option has no effect; it is present for  compatibility with
  3066.      other RCS commands.
  3067. File: rcs,  Node: rlogOptV,  Next: rlogOptx,  Prev: rlogOptTu,  Up: rlogOptions
  3068. Version and Emulation
  3069. ---------------------
  3070.      Print RCS's version number.
  3071. `-V`n''
  3072.      Emulate RCS version `n' when generating logs.  See *Note coOptV::
  3073.      for more.
  3074. File: rcs,  Node: rlogOptx,  Next: rlogOptz,  Prev: rlogOptV,  Up: rlogOptions
  3075. Suffixes
  3076. --------
  3077. `-x`suffixes''
  3078.      Use `suffixes' to characterize RCS files.  See *Note ciOptx:: for
  3079.      details.
  3080. File: rcs,  Node: rlogOptz,  Prev: rlogOptx,  Up: rlogOptions
  3081. Time zone
  3082. ---------
  3083.    Rlog  prints  the  intersection  of the revisions selected with the
  3084. options `-d', `-l', `-s', and `-w', intersected with  the union of the
  3085. revisions selected by `-b' and `-r'.
  3086. `-z`zone''
  3087.      specifies the date output format, and specifies the default time
  3088.      zone for `date' in the  `-d`dates'' option.  The  `zone' should be
  3089.      empty, a numeric UTC offset, or the special string `LT' for local
  3090.      time.  The  default is  an  empty  `zone' , which uses the
  3091.      traditional RCS format of UTC without any time zone indication  and
  3092.      with slashes separating the parts of the date; oth- erwise, times
  3093.      are output in ISO  8601  format  with time  zone  indication.  For
  3094.      example, if local time is January 11, 1990,  8pm  Pacific
  3095.      Standard  Time, eight hours west of UTC, then the time is output as
  3096.      follows:
  3097.           option    time output
  3098.           -z        1990/01/12 04:00:00       (default)
  3099.           -zLT      1990-01-11 20:00:00-08
  3100.           -z+05:30  1990-01-12 09:30:00+05:30
  3101. File: rcs,  Node: rlogExamples,  Next: rlogEnv,  Prev: rlogOptions,  Up: rlog
  3102. Examples
  3103. --------
  3104.      rlog  -L  -R  RCS/*
  3105.      rlog  -L  -h  RCS/*
  3106.      rlog  -L  -l  RCS/*
  3107.      rlog  RCS/*
  3108.    The first command prints the names of all RCS files in the
  3109. subdirectory  RCS  that  have  locks.   The second command prints the
  3110. headers of those files, and  the  third  prints the headers plus the
  3111. log messages of the locked revisions.  The last command prints complete
  3112. information.
  3113. File: rcs,  Node: rlogEnv,  Next: rlogDiag,  Prev: rlogExamples,  Up: rlog
  3114. Environment
  3115. -----------
  3116. `RCSINIT'
  3117.      options prepended to the argument  list,  separated by spaces.
  3118.      See *Note ciEnv:: for details.
  3119. File: rcs,  Node: rlogDiag,  Next: rlogBugs,  Prev: rlogEnv,  Up: rlog
  3120. Diagnostics
  3121. ===========
  3122.    The exit status is zero if and only if all operations were
  3123. successful.
  3124. File: rcs,  Node: rlogBugs,  Prev: rlogDiag,  Up: rlog
  3125.    The separator for revision ranges in the `-r' option used to be  `-'
  3126. instead of `:', but this leads to confusion when symbolic names
  3127. contain `-'.  For backwards  compatibility `rlog -r'  still supports
  3128. the old `-' separator, but it warns about this obsolete use.
  3129. File: rcs,  Node: merge,  Next: AppendixA,  Prev: rlog,  Up: Top
  3130. merge - three-way file merge
  3131. ****************************
  3132. * Menu:
  3133. * mergeIntro::       Introduction to `merge'.
  3134. * mergeOptions::     command line options of `merge'.
  3135. * mergeDiag::        Diagnostic output of `merge'.
  3136. * mergeBugs::        Bugs.
  3137. File: rcs,  Node: mergeIntro,  Next: mergeOptions,  Up: merge
  3138. Description
  3139. ===========
  3140.    `merge'  incorporates  all  changes  that lead from `file2' to
  3141. `file3' into `file1'.  The result ordinarily goes into  `file1'.  merge
  3142. is useful for combining separate changes to an original.  Suppose
  3143. `file2' is the original, and both  `file1' and `file3' are
  3144. modifications  of  `file2' .  Then merge combines both changes.
  3145.    A conflict occurs if both `file1' and `file3' have changes  in a
  3146. common segment of lines.  If a conflict is found, merge normally
  3147. outputs a warning and brackets the conflict  with `<<<<<<<'  and
  3148. `>>>>>>>' lines.  A typical conflict will look like this:
  3149.      <<<<<<< file A
  3150.      lines in file A
  3151.      =======
  3152.      lines in file B
  3153.      >>>>>>> file B
  3154.    If there are conflicts, the user should  edit  the  result and
  3155. delete one of the alternatives.
  3156. File: rcs,  Node: mergeOptions,  Next: mergeDiag,  Prev: mergeIntro,  Up: merge
  3157. Command line options of merge
  3158. =============================
  3159.    Overview off all options which can be given to `merge'
  3160.    `Synopsis': merge [options] file1 file2 file3
  3161. * Menu:
  3162. * mergeOptA::      -A Style of diff3.
  3163. * mergeOptE::      -E Conflict style.
  3164. * mergeOptL::      -L Labels.
  3165. * mergeOptp::      -p Send to standard output.
  3166. * mergeOptq::      -q Quite mode.
  3167. * mergeOptV::      -V Version.
  3168. File: rcs,  Node: mergeOptA,  Next: mergeOptE,  Prev: mergeOptions,  Up: mergeOptions
  3169. Output conflicts
  3170. ----------------
  3171.      Output conflicts using the `-A' style of `diff3', if supported by
  3172.      diff3.  This merges all changes  leading from  `file2' to `file3'
  3173.      into `file1', and generates the most verbose output.
  3174. File: rcs,  Node: mergeOptE,  Next: mergeOptL,  Prev: mergeOptA,  Up: mergeOptions
  3175. Specify conflict styles
  3176. -----------------------
  3177. `-E -e'
  3178.      These options specify conflict styles that generate less
  3179.      information   than  `-A'.   See  `diff3'  for details.  The
  3180.      default is `-E'.  With `-e',  merge  does not warn about conflicts.
  3181. File: rcs,  Node: mergeOptL,  Next: mergeOptp,  Prev: mergeOptE,  Up: mergeOptions
  3182. Label
  3183. -----
  3184. `-L`label''
  3185.      This  option  may  be  given up to three times, and specifies
  3186.      labels to be used in place of the  corresponding file names in
  3187.      conflict reports.  That is, `merge -L x -L y -L z a b c'
  3188.      generates  output  that looks like it came from files `x', `y' and
  3189.      `z'instead of from files `a', `b' and `c'.
  3190. File: rcs,  Node: mergeOptp,  Next: mergeOptq,  Prev: mergeOptL,  Up: mergeOptions
  3191. Standard output
  3192. ---------------
  3193.      Send results to standard output  instead  of  overwriting `file1'.
  3194. File: rcs,  Node: mergeOptq,  Next: mergeOptV,  Prev: mergeOptp,  Up: mergeOptions
  3195. Quiet Mode
  3196. ----------
  3197.      Quiet;  do  not  warn about conflicts.
  3198. File: rcs,  Node: mergeOptV,  Prev: mergeOptq,  Up: mergeOptions
  3199. Version
  3200. -------
  3201.      Print's version number.
  3202. File: rcs,  Node: mergeDiag,  Next: mergeBugs,  Prev: mergeOptions,  Up: merge
  3203. Diagnostics
  3204. ===========
  3205.    Exit status is 0 for no conflicts, 1 for some conflicts, 2 for
  3206. trouble.
  3207. File: rcs,  Node: mergeBugs,  Prev: mergeDiag,  Up: merge
  3208.    It normally does not make sense to merge binary  files  as if they
  3209. were text, but merge tries to do it anyway.
  3210. File: rcs,  Node: AppendixA,  Next: AppendixB,  Prev: merge,  Up: Top
  3211. Format of RCS file
  3212. ******************
  3213. * Menu:
  3214. * rcsfileIntro::        Discription of the RCS file format.
  3215. * rcsfileExample::      Example of a revision tree.
  3216. File: rcs,  Node: rcsfileIntro,  Next: rcsfileExample,  Up: AppendixA
  3217. Description
  3218. ===========
  3219.    An RCS file's contents are described by the grammar below.  The text
  3220. is free format: space, backspace,  tab,  newline, vertical  tab,  form
  3221. feed,  and  carriage return (collectively, `white space')  have  no
  3222. significance  except  in strings.  However, white space cannot appear
  3223. within an id, num, or sym, and an RCS file must end with a newline.
  3224.    Strings are enclosed by @.  If a string contains a  @,  it must  be
  3225. doubled; otherwise, strings can contain arbitrary binary data.
  3226.    The meta syntax uses the following conventions: `|'  (bar) separates
  3227. alternatives;  `{'  and  `}'  enclose  optional phrases; `{' and `}*'
  3228. enclose phrases that can be repeated zero or more times; `{' and '}+'
  3229. enclose phrases that must appear at least once and can be repeated;
  3230. Terminal symbols are in boldface; nonterminal symbols are in `italic'.
  3231.      rcstext    ::=  admin {delta}* desc {deltatext}*
  3232.      admin      ::=  `head' {num};
  3233.                      { branch   {num}; }
  3234.                      `access' {id}*;
  3235.                      `symbols' {sym : num}*;
  3236.                      `locks' {id : num}*;  {`strict'  ;}
  3237.                      { `comment'  {string}; }
  3238.                      { `expand'   {string}; }
  3239.                      { newphrase }*
  3240.      delta      ::=  num
  3241.                      `date' num;
  3242.                      `author' id;
  3243.                      `state' {id};
  3244.                      `branches' {num}*;
  3245.                      `next' {num};
  3246.                      { newphrase }*
  3247.      desc       ::=  `desc' string
  3248.      deltatext  ::=  num
  3249.                      `log' string
  3250.                      { newphrase }*
  3251.                      `text' string
  3252.      num        ::=  {digit | .}+
  3253.      digit      ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
  3254.      id         ::=  {num} idchar {idchar | num }*
  3255.      sym        ::=  {digit}* idchar {idchar | digit }*
  3256.      idchar     ::=  any visible graphic character except `special'
  3257.      special    ::=  $ | , | . | : | ; | @
  3258.      string     ::=  @{any character, with @ doubled}*@
  3259.      newphrase  ::=  id word* ;
  3260.      word       ::=  id | num | string | :
  3261.    Identifiers  are  case  sensitive. Keywords are in lower case only.
  3262. The sets of keywords and identifiers can overlap. In most environments
  3263. RCS uses the ISO 8859/1 encoding: visible graphic characters  are
  3264. codes  041-176  and 240-377,  and white space characters are codes
  3265. 010-015 and 040.
  3266.    Dates, which appear after the date  keyword,  are  of  the form
  3267. `Y.mm.dd.hh.mm.ss',  where `Y' is the year, `mm' the month (01-12),
  3268. `dd' the day (01-31), `hh' the hour (00-23), `mm' the minute  (00-59),
  3269. and  `ss' the second (00-60). `Y' contains just the last two digits of
  3270. the year for years  from 1900 through  1999,  and  all  the  digits of
  3271. years thereafter. Dates use the Gregorian calendar; times use UTC.
  3272.    The `newphrase' productions in the grammar are reserved for future
  3273. extensions  to  the  format of RCS files.  No `newphrase' will begin
  3274. with any keyword already in use.
  3275.    The `delta' nodes form a tree.  All nodes whose numbers consist of a
  3276. single pair (e.g., 2.3, 2.1, 1.3, etc.)  are on the trunk, and are
  3277. linked through the next field in  order of  decreasing  numbers.  The
  3278. head field in the `admin' node points to the head of that sequence
  3279. (i.e.,  contains  the highest  pair).   The  branch node in the admin
  3280. node indicates the default branch (or revision) for most RCS operations.
  3281. If empty, the default branch is the highest branch on the trunk.
  3282.    All `delta' nodes whose numbers consist of 2`n' fields (`n'>=2)
  3283. (e.g.,  3.1.1.1,  2.1.2.2,  etc.) are linked as follows.  All nodes
  3284. whose first 2`n'-1 number fields are identical are linked  through the
  3285. next field in order of increasing numbers.  For each such sequence, the
  3286. `delta' node whose number is identical to the first 2`n'-2 number
  3287. fields of the deltas on that sequence is called the branchpoint.  The
  3288. branches field  of  a  node  contains  a list of the numbers of the
  3289. first nodes of all sequences for which  it  is  a  branchpoint.  This
  3290. list is ordered in increasing numbers.
  3291. File: rcs,  Node: rcsfileExample,  Prev: rcsfileIntro,  Up: AppendixA
  3292. Example Revision tree
  3293. =====================
  3294.    The  following  diagram  shows an example of an RCS file's
  3295. organization.
  3296.                                 Head
  3297.                                   |
  3298.                                   v                        / \
  3299.                               ---------                   /   \
  3300.         / \          / \      |       |      / \         /     \
  3301.        /   \        /   \     |  2.1  |     /   \       /       \
  3302.       /     \      /     \    |       |    /     \     /         \
  3303.      /1.2.1.3\    /1.3.1.1\   |       |   /1.2.2.2\   /1.2.2.1.1.1\
  3304.      ---------    ---------   ---------   ---------   -------------
  3305.          ^            ^           |           ^             ^
  3306.          |            |           v           |             |
  3307.         / \           |       ---------      / \            |
  3308.        /   \          |       \  1.3  /     /   \           |
  3309.       /     \         ---------\     /     /     \-----------
  3310.      /1.2.1.1\                  \   /     /1.2.2.1\
  3311.      ---------                   \ /      ---------
  3312.          ^                        |           ^
  3313.          |                        v           |
  3314.          |                    ---------       |
  3315.          |                    \  1.2  /       |
  3316.          ----------------------\     /---------
  3317.                                 \   /
  3318.                                  \ /
  3319.                                   |
  3320.                                   v
  3321.                               ---------
  3322.                               \  1.1  /
  3323.                                \     /
  3324.                                 \   /
  3325.                                  \ /
  3326. File: rcs,  Node: AppendixB,  Next: Index,  Prev: AppendixA,  Up: Top
  3327. Books and related manuals
  3328. *************************
  3329. * Menu:
  3330. * Feldman::   GNU - Make.
  3331. * Hunt::      GNU - diff.
  3332. * Rochkind::  SCCS.
  3333. * Tichy::     Design and implementation of RCS.
  3334. * Leblang::   Computer-Aided Software Engineering.
  3335. * Glasser::   The Evolution of a Source Code Control
  3336.               System.
  3337. * Brown::     The Clear/Caster System.
  3338. * Habermann:: A Software Development Control System.
  3339. * DEC::       Code Management System.
  3340. * Lampson::   Practical Use of a Polymorphic Applicative
  3341.               Language.
  3342. * Tichy1::    A Data Model for Programming Support
  3343.               Environments and its Application.
  3344. * Heckel::    A Technique for Isolating Differences
  3345.               Between Files.
  3346. * Tichy2::    The String-to-String Correction Problem
  3347.               with Block Moves.
  3348. File: rcs,  Node: Feldman,  Next: Hunt,  Up: AppendixB
  3349. Feldman,Stuart I.
  3350. =================
  3351.      Feldman, Stuart I.,
  3352.      "Make -- A Program for Maintaining Computer Programs",
  3353.      Software -- Practice & Experience,
  3354.      vol. 9, no. 3, pp. 255-265, March 1979.
  3355. File: rcs,  Node: Hunt,  Next: Rochkind,  Prev: Feldman,  Up: AppendixB
  3356. Hunt, James W. and McIlroy, M. D.
  3357. =================================
  3358.      Hunt, James W. and McIlroy, M. D.,
  3359.      "An Algorithm for Differential File Comparison",
  3360.      41, Computing Science Technical Report,
  3361.      Bell Laboratories, June 1976.
  3362. File: rcs,  Node: Rochkind,  Next: Tichy,  Prev: Hunt,  Up: AppendixB
  3363. Rochkind, Marc J.
  3364. =================
  3365.      Rochkind, Marc J.
  3366.      "The Source Code Control System",
  3367.      IEEE Transactions on Software Engineering, vol. SE-1,
  3368.      no. 4, pp. 364-370, Dec. 1975.
  3369. File: rcs,  Node: Tichy,  Next: Leblang,  Prev: Rochkind,  Up: AppendixB
  3370. Tichy, Walter F.
  3371. ================
  3372.      Tichy, Walter F.
  3373.      "Design, Implementation, and Evaluation of a Revision Control System"
  3374.      Proceedings of the 6th International Conference on Software Engineering,
  3375.      pp. 58-67, ACM, IEEE, IPS, NBS, September 1982.
  3376. File: rcs,  Node: Leblang,  Next: Glasser,  Prev: Tichy,  Up: AppendixB
  3377. Leblang, David B. and Chase, Robert P.
  3378. ======================================
  3379.      Leblang, David B. and Chase, Robert P.
  3380.      "Computer-Aided Software Engineering in a Distributed
  3381.      Workstation Environment",
  3382.      SIGPLAN Notices, vol. 19, no. 5, pp. 104-112, May 1984.
  3383.      Proceedings of the ACM SIGSOFT/SIGPLAN Software Engineering Symposium
  3384.      on Practical Software Development Environments.
  3385. File: rcs,  Node: Glasser,  Next: Brown,  Prev: Leblang,  Up: AppendixB
  3386. Glasser, Alan L.
  3387. ================
  3388.      Glasser, Alan L.
  3389.      "The Evolution of a Source Code Control System"
  3390.      Software Engineering Notes, vol. 3, no. 5, pp. 122-125, Nov. 1978.
  3391.      Proceedings of the Software Quality and Assurance Workshop.
  3392. File: rcs,  Node: Brown,  Next: Habermann,  Prev: Glasser,  Up: AppendixB
  3393. Brown, H.B.
  3394. ===========
  3395.      Brown, H.B.
  3396.      "The Clear/Caster System",
  3397.      Nato Conference on Software Engineering, Rome 1970
  3398. File: rcs,  Node: Habermann,  Next: DEC,  Prev: Brown,  Up: AppendixB
  3399. Habermann, A. Nico
  3400. ==================
  3401.      Habermann, A. Nico
  3402.      "A Software Development Control System",
  3403.      Technical Report, Carnegie-Mellon University,
  3404.      Department of Computer Science, Jan. 1979.
  3405. File: rcs,  Node: DEC,  Next: Lampson,  Prev: Habermann,  Up: AppendixB
  3406. Code Management System
  3407. ======================
  3408.      Digital Equipment Corporation
  3409.      "Code Management System",
  3410.      Document No. EA-23134-82, 1982
  3411. File: rcs,  Node: Lampson,  Next: Tichy1,  Prev: DEC,  Up: AppendixB
  3412. Lampson, Butler W. and Schmidt, Eric E.
  3413. =======================================
  3414.      Lampson, Butler W. and Schmidt, Eric E.
  3415.      "Practical Use of a Polymorphic Applicative Language",
  3416.      Proceedings of the 10th Symposium on Principles of
  3417.      Programming Languages,
  3418.      pp. 237-255, ACM, January 1983.
  3419. File: rcs,  Node: Tichy1,  Next: Heckel,  Prev: Lampson,  Up: AppendixB
  3420. Tichy, Walter F.
  3421. ================
  3422.      Tichy, Walter F.
  3423.      "A Data Model for Programming Support Environments and its Application",
  3424.      Automated Tools for Information System Design and Development, ed.
  3425.      Hans-Jochen Schneider and Anthony I. Wasserman,
  3426.      North-Holland Publishing Company, Amsterdam 1982.
  3427. File: rcs,  Node: Heckel,  Next: Tichy2,  Prev: Tichy1,  Up: AppendixB
  3428. Heckel, Paul
  3429. ============
  3430.      Heckel, Paul
  3431.      "A Technique for Isolating Differences Between Files",
  3432.      Communications of the ACM, vol. 21, no. 4, pp. 264-268, April
  3433.      1978.
  3434. File: rcs,  Node: Tichy2,  Prev: Heckel,  Up: AppendixB
  3435. Tichy, Walter F.
  3436. ================
  3437.      Tichy, Walter F.
  3438.      "The String-to-String Correction Problem with Block Moves",
  3439.      ACM Transactions on Computer Systems, vol. 2, no. 4, pp. 309-321,
  3440.      Nov. 1984.
  3441. File: rcs,  Node: Index,  Prev: AppendixB,  Up: Top
  3442. Index
  3443. *****
  3444. * Menu:
  3445. * -a:                                   rcsOpta.
  3446. * -A <1>:                               rcsOptAu.
  3447. * -A <1>:                               rcsmergeOptA.
  3448. * -A:                                   mergeOptA.
  3449. * -b <1>:                               rlogOptb.
  3450. * -b:                                   rcsOptb.
  3451. * -c:                                   rcsOptc.
  3452. * -d <1>:                               rlogOptd.
  3453. * -d <1>:                               ciOptd.
  3454. * -d:                                   coOptd.
  3455. * -E:                                   rcsmergeOptE.
  3456. * -e <1>:                               mergeOptE.
  3457. * -e:                                   rcsOpte.
  3458. * -E:                                   mergeOptE.
  3459. * -f <1>:                               coOptf.
  3460. * -f:                                   ciOptf.
  3461. * -h:                                   rlogOpth.
  3462. * -I <1>:                               ciOptIu.
  3463. * -I <1>:                               rcsOptIu.
  3464. * -I:                                   coOptI.
  3465. * -i <1>:                               rcsOpti.
  3466. * -i:                                   ciOpti.
  3467. * -j <1>:                               coOptj.
  3468. * -j:                                   ciOptj.
  3469. * -k <1>:                               ciOptk.
  3470. * -k <1>:                               rcsOptk.
  3471. * -k <1>:                               rcsdiffOptk.
  3472. * -k <1>:                               rcsmergeOptk.
  3473. * -k:                                   rcscleanOptk.
  3474. * -kb:                                  coOptk.
  3475. * -kk:                                  coOptk.
  3476. * -kkv:                                 coOptk.
  3477. * -kkvl:                                coOptk.
  3478. * -ko:                                  coOptk.
  3479. * -kv:                                  coOptk.
  3480. * -l <1>:                               ciOptl.
  3481. * -l:                                   rcsOptl.
  3482. * -L:                                   rlogOptLu.
  3483. * -l <1>:                               coOptl.
  3484. * -l:                                   rlogOptl.
  3485. * -L <1>:                               mergeOptL.
  3486. * -L:                                   rcsOptLu.
  3487. * -m:                                   rcsOptm.
  3488. * -M:                                   coOptM.
  3489. * -m:                                   ciOptm.
  3490. * -M <1>:                               ciOptMu.
  3491. * -M:                                   rcsOptMu.
  3492. * -n:                                   ciOptn.
  3493. * -N <1>:                               ciOptNu.
  3494. * -N:                                   rlogOptN.
  3495. * -n <1>:                               rcscleanOptn.
  3496. * -n:                                   rcsOptn.
  3497. * -N:                                   rcsOptNu.
  3498. * -o:                                   rcsOpto.
  3499. * -p <1>:                               rcsmergeOptp.
  3500. * -p <1>:                               coOptp.
  3501. * -p:                                   mergeOptp.
  3502. * -q <1>:                               rcscleanOptq.
  3503. * -q <1>:                               identOptq.
  3504. * -q <1>:                               coOptq.
  3505. * -q <1>:                               rcsdiffOptq.
  3506. * -q <1>:                               rcsOptq.
  3507. * -q <1>:                               ciOptq.
  3508. * -q:                                   mergeOptq.
  3509. * -r <1>:                               rcscleanOptr.
  3510. * -r:                                   rcsdiffOptr.
  3511. * -R:                                   rlogOptRu.
  3512. * -r <1>:                               coOptr.
  3513. * -r <1>:                               ciOptr.
  3514. * -r:                                   rlogOptr.
  3515. * -s <1>:                               coOpts.
  3516. * -s <1>:                               rcsOpts.
  3517. * -s <1>:                               rlogOpts.
  3518. * -s:                                   ciOpts.
  3519. * -T <1>:                               rcsmergeOptT.
  3520. * -T <1>:                               ciOptTu.
  3521. * -T <1>:                               rcsOptTu.
  3522. * -T:                                   rcscleanOptT.
  3523. * -t <1>:                               ciOptt.
  3524. * -t <1>:                               rcsOptt.
  3525. * -t:                                   rlogOptt.
  3526. * -T <1>:                               rlogOptTu.
  3527. * -T <1>:                               rcsdiffOptT.
  3528. * -T:                                   coOptT.
  3529. * -t-:                                  ciOptt.
  3530. * -u:                                   ciOptu.
  3531. * -U:                                   rcsOptUu.
  3532. * -u <1>:                               rcsOptu.
  3533. * -u <1>:                               coOptu.
  3534. * -u:                                   rcscleanOptu.
  3535. * -V <1>:                               rcsmergeOptV.
  3536. * -V <1>:                               rcsdiffOptV.
  3537. * -V <1>:                               coOptV.
  3538. * -V <1>:                               rcscleanOptV.
  3539. * -V <1>:                               rlogOptV.
  3540. * -V <1>:                               mergeOptV.
  3541. * -V <1>:                               identOptV.
  3542. * -V <1>:                               rcsOptV.
  3543. * -V:                                   ciOptV.
  3544. * -w <1>:                               ciOptw.
  3545. * -w <1>:                               rlogOptw.
  3546. * -w:                                   coOptw.
  3547. * -x <1>:                               ciOptx.
  3548. * -x <1>:                               rlogOptx.
  3549. * -x <1>:                               rcsdiffOptx.
  3550. * -x <1>:                               coOptx.
  3551. * -x <1>:                               rcsmergeOptx.
  3552. * -x <1>:                               rcsOptx.
  3553. * -x:                                   rcscleanOptx.
  3554. * -z <1>:                               rcsOptz.
  3555. * -z <1>:                               rlogOptz.
  3556. * -z <1>:                               rcsmergeOptz.
  3557. * -z <1>:                               ciOptz.
  3558. * -z <1>:                               rcscleanOptz.
  3559. * -z:                                   coOptz.
  3560. * About:                                About.
  3561. * Access:                               rcsOpta.
  3562. * Access Liste:                         rcsOptAu.
  3563. * ACM <1>:                              Lampson.
  3564. * ACM:                                  Heckel.
  3565. * Block moves:                          Tichy2.
  3566. * branch:                               rcsOptb.
  3567. * Bugs:                                 rlogBugs.
  3568. * change RCS:                           rcs.
  3569. * check in:                             CheckIn.
  3570. * Check out:                            coOptd.
  3571. * check out:                            CheckOut.
  3572. * Checked in by user:                   rlogOptw.
  3573. * Checkin date/time:                    rlogOptd.
  3574. * ci:                                   CheckIn.
  3575. * clean up:                             rcsclean.
  3576. * Clear/Caster <1>:                     Habermann.
  3577. * Clear/Caster:                         Brown.
  3578. * co:                                   CheckOut.
  3579. * Code Management System:               DEC.
  3580. * Command line options:                 rlogOptions.
  3581. * comment leader:                       rcsOptc.
  3582. * compare revisions:                    rcsdiff.
  3583. * comparison <1>:                       rcscleanOptr.
  3584. * comparison:                           rcsdiffOptr.
  3585. * Compatibility:                        rcsCompatibility.
  3586. * conflict:                             rcsmergeOptE.
  3587. * conflict styles:                      mergeOptE.
  3588. * Data Model:                           Tichy1.
  3589. * date <1>:                             coOptd.
  3590. * date:                                 ciOptd.
  3591. * DEC:                                  DEC.
  3592. * Default branch:                       rlogOptb.
  3593. * default form:                         coOptk.
  3594. * Delete revision:                      rcsOpto.
  3595. * description:                          ciOptt.
  3596. * Descriptive:                          rcsOptt.
  3597. * Descriptive text:                     rlogOptt.
  3598. * diagnostic:                           ciOptq.
  3599. * Diff <1>:                             Heckel.
  3600. * Diff:                                 Hunt.
  3601. * diff:                                 rcsmergeOptA.
  3602. * diff3 <1>:                            rcsmergeOptA.
  3603. * diff3 <1>:                            mergeOptA.
  3604. * diff3:                                mergeOptE.
  3605. * Differences between files:            Heckel.
  3606. * Emulate:                              coOptV.
  3607. * emulate RCS Version:                  ciOptV.
  3608. * Emulation:                            rlogOptV.
  3609. * Emulation of RCS <1>:                 rcsOptV.
  3610. * Emulation of RCS:                     rcsmergeOptV.
  3611. * Emulation of RCS Version <1>:         rcsdiffOptV.
  3612. * Emulation of RCS Version:             rcscleanOptV.
  3613. * Environment <1>:                      coEnv.
  3614. * Environment <1>:                      rcscleanEnv.
  3615. * Environment <1>:                      rlogEnv.
  3616. * Environment <1>:                      rcsmergeEnv.
  3617. * Environment <1>:                      rcsdiffEnv.
  3618. * Environment:                          rcsEnv.
  3619. * Environments:                         Tichy1.
  3620. * Erase Login names:                    rcsOpte.
  3621. * Examples <1>:                         rcsmergeExamples.
  3622. * Examples <1>:                         rcscleanExamples.
  3623. * Examples <1>:                         rcsdiffExamples.
  3624. * Examples:                             rlogExamples.
  3625. * Feldman Stuart I.:                    Feldman.
  3626. * file merge:                           merge.
  3627. * File Modes:                           coFileModes.
  3628. * Files <1>:                            coFiles.
  3629. * Files <1>:                            rcscleanFiles.
  3630. * Files:                                rcsFiles.
  3631. * force a deposit:                      ciOptf.
  3632. * Format:                               AppendixA.
  3633. * Format of RCS files.:                 AppendixA.
  3634. * GNU-Diff:                             Hunt.
  3635. * GNU-Make:                             Feldman.
  3636. * Hunt, James W. and McIlroy, M. D.:    Hunt.
  3637. * ident:                                ident.
  3638. * identify Keywords:                    ident.
  3639. * Ignore:                               rlogOptLu.
  3640. * Information:                          rlog.
  3641. * Information about Revisions:          rlogOptr.
  3642. * Information Rev. given state:         rlogOpts.
  3643. * initial checkin:                      ciOpti.
  3644. * Initialize:                           rcsOpti.
  3645. * Interactiv:                           rcsOptIu.
  3646. * Interactive:                          coOptI.
  3647. * interactive:                          ciOptIu.
  3648. * interactive mode:                     ciOptIu.
  3649. * Introduction:                         rcsIntroduction.
  3650. * join:                                 coOptj.
  3651. * just checkin:                         ciOptj.
  3652. * Keyword <1>:                          rcsOptk.
  3653. * Keyword <1>:                          rcsdiffOptk.
  3654. * Keyword <1>:                          coKeyword.
  3655. * Keyword <1>:                          rcsmergeOptk.
  3656. * Keyword:                              rcscleanOptk.
  3657. * Keyword Author:                       coKeyword.
  3658. * Keyword Date:                         coKeyword.
  3659. * Keyword Header:                       coKeyword.
  3660. * Keyword Id:                           coKeyword.
  3661. * Keyword Locker:                       coKeyword.
  3662. * Keyword Log:                          coKeyword.
  3663. * Keyword Name:                         coKeyword.
  3664. * Keyword RCSFile:                      coKeyword.
  3665. * Keyword Revision:                     coKeyword.
  3666. * Keyword Source:                       coKeyword.
  3667. * Keyword State:                        coKeyword.
  3668. * keyword values:                       ciOptk.
  3669. * Keywords <1>:                         identKeywords.
  3670. * Keywords:                             ident.
  3671. * lock <1>:                             coOptl.
  3672. * lock:                                 coOptu.
  3673. * lock a revision:                      ciOptl.
  3674. * Lock breaking:                        rcsOptMu.
  3675. * Lock revsion:                         rcsOptl.
  3676. * Locked revisions:                     rlogOptl.
  3677. * Log message:                          rcsOptm.
  3678. * log message:                          ciOptm.
  3679. * log messages:                         rlog.
  3680. * login <1>:                            ciOptw.
  3681. * login:                                coOptw.
  3682. * Login names:                          rcsOpta.
  3683. * Mail:                                 rcsOptMu.
  3684. * Make:                                 Feldman.
  3685. * merge:                                merge.
  3686. * merge revisions:                      rcsmerge.
  3687. * Modification <1>:                     coOptM.
  3688. * Modification <1>:                     coOptT.
  3689. * Modification <1>:                     rcscleanOptT.
  3690. * Modification:                         rcsdiffOptT.
  3691. * modification time <1>:                ciOptTu.
  3692. * modification time:                    ciOptMu.
  3693. * Modification time:                    rlogOptTu.
  3694. * Modification Time <1>:                rcsOptTu.
  3695. * Modification Time:                    rcsmergeOptT.
  3696. * name <1>:                             rcsOptn.
  3697. * name:                                 rcsOptNu.
  3698. * Names:                                rlogOptRu.
  3699. * no lock:                              rlogOptLu.
  3700. * no Symbolic name:                     rlogOptN.
  3701. * non-Strict Locking:                   rcsOptUu.
  3702. * Output:                               rcsmergeOptp.
  3703. * output:                               coOptp.
  3704. * Output conflicts:                     mergeOptA.
  3705. * override symbolic name:               ciOptNu.
  3706. * override Symbolic name:               rcsOptNu.
  3707. * overwriting:                          coOptf.
  3708. * pathname:                             rlogOpth.
  3709. * Polymorhpic Applicative Language:     Lampson.
  3710. * preserve:                             coOptT.
  3711. * print:                                coOptp.
  3712. * print RCS Version:                    ciOptV.
  3713. * Quiet <1>:                            rcsdiffOptq.
  3714. * Quiet:                                rcscleanOptq.
  3715. * quiet <1>:                            coOptq.
  3716. * quiet:                                ciOptq.
  3717. * Quiet mode:                           mergeOptq.
  3718. * Quiete mode <1>:                      identOptq.
  3719. * Quiete mode:                          rcsOptq.
  3720. * RCS:                                  Tichy.
  3721. * rcs:                                  rcs.
  3722. * RCS commands:                         rcsIntroduction.
  3723. * RCS Version <1>:                      rcscleanOptV.
  3724. * RCS Version:                          rcsdiffOptV.
  3725. * rcsclean:                             rcsclean.
  3726. * rcsdiff:                              rcsdiff.
  3727. * rcsfile:                              AppendixA.
  3728. * rcsmerge:                             rcsmerge.
  3729. * remove:                               rcscleanOptn.
  3730. * revision:                             ciOptr.
  3731. * Revision <1>:                         rcscleanOptr.
  3732. * Revision:                             rcsdiffOptr.
  3733. * revision:                             coOptr.
  3734. * Revision message:                     rcsOptm.
  3735. * rlog:                                 rlog.
  3736. * SCCS <1>:                             Glasser.
  3737. * SCCS:                                 Rochkind.
  3738. * send result to standard out.:         rcsmergeOptp.
  3739. * set branch:                           rcsOptb.
  3740. * SIGPLAN:                              Leblang.
  3741. * Software Quality:                     Glasser.
  3742. * Standard output:                      mergeOptp.
  3743. * State:                                coOpts.
  3744. * States:                               rcsOpts.
  3745. * states:                               ciOpts.
  3746. * Strict Locking:                       rcsOptLu.
  3747. * String-To-String Correction:          Tichy2.
  3748. * Substitution:                         coKeyword.
  3749. * Suffixes <1>:                         rcsdiffOptx.
  3750. * Suffixes <1>:                         rcsOptx.
  3751. * Suffixes <1>:                         rcsmergeOptx.
  3752. * Suffixes <1>:                         rlogOptx.
  3753. * Suffixes:                             coOptx.
  3754. * suffixes:                             ciOptx.
  3755. * Suffixes:                             rcscleanOptx.
  3756. * Support:                              Tichy1.
  3757. * Symbolic <1>:                         rcsOptNu.
  3758. * Symbolic:                             rcsOptn.
  3759. * symbolic name:                        ciOptn.
  3760. * Symposium:                            Leblang.
  3761. * tag <1>:                              ciOptn.
  3762. * tag <1>:                              rcsOptNu.
  3763. * tag:                                  rcsOptn.
  3764. * time:                                 coOptd.
  3765. * Time Zone:                            rcsOptz.
  3766. * Time zone <1>:                        rlogOptz.
  3767. * Time zone:                            rcscleanOptz.
  3768. * Time Zone:                            rcsmergeOptz.
  3769. * time zoone:                           ciOptz.
  3770. * time/date <1>:                        rcscleanOptT.
  3771. * time/date:                            rcsdiffOptT.
  3772. * Tools:                                Tichy1.
  3773. * TZ:                                   ciOptz.
  3774. * unlock:                               rcscleanOptn.
  3775. * unlock a revision:                    ciOptu.
  3776. * Unlock revision:                      rcscleanOptu.
  3777. * Unlock revsion:                       rcsOptu.
  3778. * Version <1>:                          rcsmergeOptV.
  3779. * Version <1>:                          identOptV.
  3780. * Version <1>:                          coOptV.
  3781. * Version <1>:                          rlogOptV.
  3782. * Version <1>:                          mergeOptV.
  3783. * Version:                              rcsOptV.
  3784. * working:                              coOptf.
  3785. * working files:                        rcsclean.
  3786. * Workstation:                          Leblang.
  3787. * zoone:                                ciOptz.
  3788. * Zoone:                                coOptz.
  3789. Tag Table:
  3790. Node: Top
  3791. Node: About
  3792. Node: AboutDesc
  3793. Node: Versions
  3794. Node: BugReport
  3795. 10978
  3796. Node: VersionControl
  3797. 11457
  3798. Node: Introduction
  3799. 13547
  3800. Node: StartRCS
  3801. 15821
  3802. Node: Identification
  3803. 20596
  3804. Node: RevisionTree
  3805. 23261
  3806. Node: Branches
  3807. 24385
  3808. Node: Deltas
  3809. 29598
  3810. Node: Controversial
  3811. 37296
  3812. Node: Configuration
  3813. 41581
  3814. Node: Functions
  3815. 42297
  3816. Node: MAKERCS
  3817. 46250
  3818. Node: Statistics
  3819. 49893
  3820. Node: Survey
  3821. 55665
  3822. Node: rcsIntroduction
  3823. 62976
  3824. Node: rcsintroDesc
  3825. 63319
  3826. Node: rcsintroFunc
  3827. 64088
  3828. Node: rcsintroStart
  3829. 66425
  3830. Node: rcsintroAutoIdent
  3831. 71268
  3832. Node: Synopsis
  3833. 72582
  3834. Node: CheckIn
  3835. 76495
  3836. Node: ciIntro
  3837. 77034
  3838. Node: ciOptions
  3839. 81148
  3840. Node: ciOptr
  3841. 82090
  3842. Node: ciOptl
  3843. 82663
  3844. Node: ciOptu
  3845. 83061
  3846. Node: ciOptf
  3847. 83519
  3848. Node: ciOptk
  3849. 83746
  3850. Node: ciOptq
  3851. 84614
  3852. Node: ciOpti
  3853. 84871
  3854. Node: ciOptj
  3855. 85121
  3856. Node: ciOptIu
  3857. 85340
  3858. Node: ciOptd
  3859. 85573
  3860. Node: ciOptMu
  3861. 85984
  3862. Node: ciOptm
  3863. 86405
  3864. Node: ciOptn
  3865. 87035
  3866. Node: ciOptNu
  3867. 87321
  3868. Node: ciOpts
  3869. 87537
  3870. Node: ciOptt
  3871. 87749
  3872. Node: ciOptTu
  3873. 88637
  3874. Node: ciOptw
  3875. 90231
  3876. Node: ciOptV
  3877. 90483
  3878. Node: ciOptx
  3879. 90695
  3880. Node: ciOptz
  3881. 91642
  3882. Node: ciFileNaming
  3883. 92663
  3884. Node: ciExamples
  3885. 94196
  3886. Node: ciFileModes
  3887. 94967
  3888. Node: ciFiles
  3889. 95310
  3890. Node: setuid use
  3891. 97704
  3892. Node: ciEnv
  3893. 100509
  3894. Node: ciDiag
  3895. 101142
  3896. Node: CheckOut
  3897. 101426
  3898. Node: coIntro
  3899. 101956
  3900. Node: coOptions
  3901. 103844
  3902. Node: coOptr
  3903. 104736
  3904. Node: coOptl
  3905. 105716
  3906. Node: coOptu
  3907. 105919
  3908. Node: coOptf
  3909. 106305
  3910. Node: coOptk
  3911. 106560
  3912. Node: coOptp
  3913. 109172
  3914. Node: coOptq
  3915. 109471
  3916. Node: coOptI
  3917. 109625
  3918. Node: coOptd
  3919. 109855
  3920. Node: coOptM
  3921. 111749
  3922. Node: coOpts
  3923. 112029
  3924. Node: coOptT
  3925. 112223
  3926. Node: coOptw
  3927. 112816
  3928. Node: coOptj
  3929. 113135
  3930. Node: coOptV
  3931. 114758
  3932. Node: coOptx
  3933. 115934
  3934. Node: coOptz
  3935. 116124
  3936. Node: coKeyword
  3937. 116252
  3938. Node: coFileModes
  3939. 119782
  3940. Node: coFiles
  3941. 120395
  3942. Node: coEnv
  3943. 120629
  3944. Node: coDiag
  3945. 120841
  3946. Node: coLimits
  3947. 121133
  3948. Node: rcs
  3949. 121266
  3950. Node: rcsIntro
  3951. 121809
  3952. Node: rcsOptions
  3953. 122517
  3954. Node: rcsOpti
  3955. 123731
  3956. Node: rcsOpta
  3957. 124119
  3958. Node: rcsOptAu
  3959. 124372
  3960. Node: rcsOpte
  3961. 124590
  3962. Node: rcsOptb
  3963. 124908
  3964. Node: rcsOptc
  3965. 125179
  3966. Node: rcsOptk
  3967. 125880
  3968. Node: rcsOptl
  3969. 126391
  3970. Node: rcsOptu
  3971. 126843
  3972. Node: rcsOptLu
  3973. 127511
  3974. Node: rcsOptUu
  3975. 127818
  3976. Node: rcsOptm
  3977. 128269
  3978. Node: rcsOptMu
  3979. 128461
  3980. Node: rcsOptn
  3981. 128828
  3982. Node: rcsOptNu
  3983. 129829
  3984. Node: rcsOpto
  3985. 130050
  3986. Node: rcsOptq
  3987. 130764
  3988. Node: rcsOptIu
  3989. 130916
  3990. Node: rcsOpts
  3991. 131099
  3992. Node: rcsOptt
  3993. 131667
  3994. Node: rcsOptTu
  3995. 132371
  3996. Node: rcsOptV
  3997. 132928
  3998. Node: rcsOptx
  3999. 133135
  4000. Node: rcsOptz
  4001. 133315
  4002. Node: rcsCompatibility
  4003. 133545
  4004. Node: rcsFiles
  4005. 134129
  4006. Node: rcsEnv
  4007. 134401
  4008. Node: rcsDiag
  4009. 134611
  4010. Node: rcsBugs
  4011. 134867
  4012. Node: ident
  4013. 135675
  4014. Node: identIntro
  4015. 135940
  4016. Node: identOptions
  4017. 137464
  4018. Node: identOptq
  4019. 137792
  4020. Node: identOptV
  4021. 137953
  4022. Node: identKeywords
  4023. 138079
  4024. Node: rcsclean
  4025. 138481
  4026. Node: rcscleanIntro
  4027. 139039
  4028. Node: rcscleanOptions
  4029. 140623
  4030. Node: rcscleanOptk
  4031. 141281
  4032. Node: rcscleanOptn
  4033. 141547
  4034. Node: rcscleanOptq
  4035. 141845
  4036. Node: rcscleanOptr
  4037. 142031
  4038. Node: rcscleanOptT
  4039. 142276
  4040. Node: rcscleanOptu
  4041. 142880
  4042. Node: rcscleanOptV
  4043. 143092
  4044. Node: rcscleanOptx
  4045. 143342
  4046. Node: rcscleanOptz
  4047. 143561
  4048. Node: rcscleanExamples
  4049. 143778
  4050. Node: rcscleanFiles
  4051. 144131
  4052. Node: rcscleanEnv
  4053. 144303
  4054. Node: rcscleanDiag
  4055. 144533
  4056. Node: rcscleanBugs
  4057. 144788
  4058. Node: rcsdiff
  4059. 144997
  4060. Node: rcsdiffIntro
  4061. 145489
  4062. Node: rcsdiffOptions
  4063. 145809
  4064. Node: rcsdiffOptk
  4065. 146377
  4066. Node: rcsdiffOptq
  4067. 147063
  4068. Node: rcsdiffOptr
  4069. 147240
  4070. Node: rcsdiffOptT
  4071. 148106
  4072. Node: rcsdiffOptV
  4073. 148276
  4074. Node: rcsdiffOptx
  4075. 148522
  4076. Node: rcsdiffExamples
  4077. 148717
  4078. Node: rcsdiffEnv
  4079. 149062
  4080. Node: rcsdiffDiag
  4081. 149291
  4082. Node: rcsmerge
  4083. 149484
  4084. Node: rcsmergeIntro
  4085. 149933
  4086. Node: rcsmergeOptions
  4087. 150865
  4088. Node: rcsmergeOptA
  4089. 151490
  4090. Node: rcsmergeOptE
  4091. 151834
  4092. Node: rcsmergeOptk
  4093. 152186
  4094. Node: rcsmergeOptp
  4095. 152713
  4096. Node: rcsmergeOptT
  4097. 152955
  4098. Node: rcsmergeOptV
  4099. 153192
  4100. Node: rcsmergeOptx
  4101. 153418
  4102. Node: rcsmergeOptz
  4103. 153618
  4104. Node: rcsmergeExamples
  4105. 153825
  4106. Node: rcsmergeEnv
  4107. 154804
  4108. Node: rcsmergeDiag
  4109. 155037
  4110. Node: rlog
  4111. 155207
  4112. Node: rlogIntro
  4113. 155662
  4114. Node: rlogOptions
  4115. 156784
  4116. Node: rlogOptLu
  4117. 157780
  4118. Node: rlogOptRu
  4119. 158029
  4120. Node: rlogOpth
  4121. 158296
  4122. Node: rlogOptt
  4123. 158546
  4124. Node: rlogOptN
  4125. 158725
  4126. Node: rlogOptb
  4127. 158886
  4128. Node: rlogOptd
  4129. 159120
  4130. Node: rlogOptl
  4131. 160085
  4132. Node: rlogOptr
  4133. 160531
  4134. Node: rlogOpts
  4135. 161429
  4136. Node: rlogOptw
  4137. 161749
  4138. Node: rlogOptTu
  4139. 162094
  4140. Node: rlogOptV
  4141. 162315
  4142. Node: rlogOptx
  4143. 162577
  4144. Node: rlogOptz
  4145. 162779
  4146. Node: rlogExamples
  4147. 163878
  4148. Node: rlogEnv
  4149. 164358
  4150. Node: rlogDiag
  4151. 164576
  4152. Node: rlogBugs
  4153. 164750
  4154. Node: merge
  4155. 165086
  4156. Node: mergeIntro
  4157. 165402
  4158. Node: mergeOptions
  4159. 166272
  4160. Node: mergeOptA
  4161. 166753
  4162. Node: mergeOptE
  4163. 167083
  4164. Node: mergeOptL
  4165. 167427
  4166. Node: mergeOptp
  4167. 167856
  4168. Node: mergeOptq
  4169. 168053
  4170. Node: mergeOptV
  4171. 168212
  4172. Node: mergeDiag
  4173. 168332
  4174. Node: mergeBugs
  4175. 168515
  4176. Node: AppendixA
  4177. 168702
  4178. Node: rcsfileIntro
  4179. 168936
  4180. Node: rcsfileExample
  4181. 173073
  4182. Node: AppendixB
  4183. 174797
  4184. Node: Feldman
  4185. 175656
  4186. Node: Hunt
  4187. 175923
  4188. Node: Rochkind
  4189. 176243
  4190. Node: Tichy
  4191. 176512
  4192. Node: Leblang
  4193. 176853
  4194. Node: Glasser
  4195. 177332
  4196. Node: Brown
  4197. 177656
  4198. Node: Habermann
  4199. 177865
  4200. Node: DEC
  4201. 178148
  4202. Node: Lampson
  4203. 178374
  4204. Node: Tichy1
  4205. 178755
  4206. Node: Heckel
  4207. 179147
  4208. Node: Tichy2
  4209. 179406
  4210. Node: Index
  4211. 179676
  4212. End Tag Table
  4213.