diff options
Diffstat (limited to 'doc/cvs.info-2')
-rw-r--r-- | doc/cvs.info-2 | 6139 |
1 files changed, 6139 insertions, 0 deletions
diff --git a/doc/cvs.info-2 b/doc/cvs.info-2 new file mode 100644 index 0000000..f95903c --- /dev/null +++ b/doc/cvs.info-2 @@ -0,0 +1,6139 @@ +This is cvs.info, produced by makeinfo version 4.8 from cvs.texinfo. + +INFO-DIR-SECTION GNU Packages +START-INFO-DIR-ENTRY +* CVS: (cvs). Concurrent Versions System +END-INFO-DIR-ENTRY +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* cvs: (cvs)CVS commands. Concurrent Versions System +END-INFO-DIR-ENTRY + + +File: cvs.info, Node: commit options, Next: commit examples, Up: commit + +A.10.1 commit options +--------------------- + +These standard options are supported by `commit' (*note Common +options::, for a complete description of them): + +`-l' + Local; run only in current working directory. + +`-R' + Commit directories recursively. This is on by default. + +`-r REVISION' + Commit to REVISION. REVISION must be either a branch, or a + revision on the main trunk that is higher than any existing + revision number (*note Assigning revisions::). You cannot commit + to a specific revision on a branch. + + `commit' also supports these options: + +`-c' + Refuse to commit files unless the user has registered a valid edit + on the file via `cvs edit'. This is most useful when `commit -c' + and `edit -c' have been placed in all `.cvsrc' files. A commit + can be forced anyways by either regestering an edit retroactively + via `cvs edit' (no changes to the file will be lost) or using the + `-f' option to commit. Support for `commit -c' requires both + client and a server versions 1.12.10 or greater. + +`-F FILE' + Read the log message from FILE, instead of invoking an editor. + +`-f' + Note that this is not the standard behavior of the `-f' option as + defined in *Note Common options::. + + Force CVS to commit a new revision even if you haven't made any + changes to the file. As of CVS version 1.12.10, it also causes + the `-c' option to be ignored. If the current revision of FILE is + 1.7, then the following two commands are equivalent: + + $ cvs commit -f FILE + $ cvs commit -r 1.8 FILE + + The `-f' option disables recursion (i.e., it implies `-l'). To + force CVS to commit a new revision for all files in all + subdirectories, you must use `-f -R'. + +`-m MESSAGE' + Use MESSAGE as the log message, instead of invoking an editor. + + +File: cvs.info, Node: commit examples, Prev: commit options, Up: commit + +A.10.2 commit examples +---------------------- + +A.10.2.1 Committing to a branch +............................... + +You can commit to a branch revision (one that has an even number of +dots) with the `-r' option. To create a branch revision, use the `-b' +option of the `rtag' or `tag' commands (*note Branching and merging::). +Then, either `checkout' or `update' can be used to base your sources +on the newly created branch. From that point on, all `commit' changes +made within these working sources will be automatically added to a +branch revision, thereby not disturbing main-line development in any +way. For example, if you had to create a patch to the 1.2 version of +the product, even though the 2.0 version is already under development, +you might do: + + $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module + $ cvs checkout -r FCS1_2_Patch product_module + $ cd product_module + [[ hack away ]] + $ cvs commit + +This works automatically since the `-r' option is sticky. + +A.10.2.2 Creating the branch after editing +.......................................... + +Say you have been working on some extremely experimental software, +based on whatever revision you happened to checkout last week. If +others in your group would like to work on this software with you, but +without disturbing main-line development, you could commit your change +to a new branch. Others can then checkout your experimental stuff and +utilize the full benefit of CVS conflict resolution. The scenario might +look like: + + [[ hacked sources are present ]] + $ cvs tag -b EXPR1 + $ cvs update -r EXPR1 + $ cvs commit + + The `update' command will make the `-r EXPR1' option sticky on all +files. Note that your changes to the files will never be removed by the +`update' command. The `commit' will automatically commit to the +correct branch, because the `-r' is sticky. You could also do like +this: + + [[ hacked sources are present ]] + $ cvs tag -b EXPR1 + $ cvs commit -r EXPR1 + +but then, only those files that were changed by you will have the `-r +EXPR1' sticky flag. If you hack away, and commit without specifying +the `-r EXPR1' flag, some files may accidentally end up on the main +trunk. + + To work with you on the experimental change, others would simply do + + $ cvs checkout -r EXPR1 whatever_module + + +File: cvs.info, Node: diff, Next: export, Prev: commit, Up: CVS commands + +A.11 diff--Show differences between revisions +============================================= + + * Synopsis: diff [-lR] [-k kflag] [format_options] [(-r rev1[:date1] + | -D date1) [-r rev2[:date2] | -D date2]] [files...] + + * Requires: working directory, repository. + + * Changes: nothing. + + The `diff' command is used to compare different revisions of files. +The default action is to compare your working files with the revisions +they were based on, and report any differences that are found. + + If any file names are given, only those files are compared. If any +directories are given, all files under them will be compared. + + The exit status for diff is different than for other CVS commands; +for details *Note Exit status::. + +* Menu: + +* diff options:: diff options +* diff examples:: diff examples + + +File: cvs.info, Node: diff options, Next: diff examples, Up: diff + +A.11.1 diff options +------------------- + +These standard options are supported by `diff' (*note Common options::, +for a complete description of them): + +`-D DATE' + Use the most recent revision no later than DATE. See `-r' for how + this affects the comparison. + +`-k KFLAG' + Process keywords according to KFLAG. See *Note Keyword + substitution::. + +`-l' + Local; run only in current working directory. + +`-R' + Examine directories recursively. This option is on by default. + +`-r TAG[:DATE]' + Compare with revision specified by TAG or, when DATE is specified + and TAG is a branch tag, the version from the branch TAG as it + existed on DATE. Zero, one or two `-r' options can be present. + With no `-r' option, the working file will be compared with the + revision it was based on. With one `-r', that revision will be + compared to your current working file. With two `-r' options + those two revisions will be compared (and your working file will + not affect the outcome in any way). + + One or both `-r' options can be replaced by a `-D DATE' option, + described above. + + The following options specify the format of the output. They have +the same meaning as in GNU diff. Most options have two equivalent +names, one of which is a single letter preceded by `-', and the other +of which is a long name preceded by `--'. + +`-LINES' + Show LINES (an integer) lines of context. This option does not + specify an output format by itself; it has no effect unless it is + combined with `-c' or `-u'. This option is obsolete. For proper + operation, `patch' typically needs at least two lines of context. + +`-a' + Treat all files as text and compare them line-by-line, even if they + do not seem to be text. + +`-b' + Ignore trailing white space and consider all other sequences of + one or more white space characters to be equivalent. + +`-B' + Ignore changes that just insert or delete blank lines. + +`--binary' + Read and write data in binary mode. + +`--brief' + Report only whether the files differ, not the details of the + differences. + +`-c' + Use the context output format. + +`-C LINES' +`--context[=LINES]' + Use the context output format, showing LINES (an integer) lines of + context, or three if LINES is not given. For proper operation, + `patch' typically needs at least two lines of context. + +`--changed-group-format=FORMAT' + Use FORMAT to output a line group containing differing lines from + both files in if-then-else format. *Note Line group formats::. + +`-d' + Change the algorithm to perhaps find a smaller set of changes. + This makes `diff' slower (sometimes much slower). + +`-e' +`--ed' + Make output that is a valid `ed' script. + +`--expand-tabs' + Expand tabs to spaces in the output, to preserve the alignment of + tabs in the input files. + +`-f' + Make output that looks vaguely like an `ed' script but has changes + in the order they appear in the file. + +`-F REGEXP' + In context and unified format, for each hunk of differences, show + some of the last preceding line that matches REGEXP. + +`--forward-ed' + Make output that looks vaguely like an `ed' script but has changes + in the order they appear in the file. + +`-H' + Use heuristics to speed handling of large files that have numerous + scattered small changes. + +`--horizon-lines=LINES' + Do not discard the last LINES lines of the common prefix and the + first LINES lines of the common suffix. + +`-i' + Ignore changes in case; consider upper- and lower-case letters + equivalent. + +`-I REGEXP' + Ignore changes that just insert or delete lines that match REGEXP. + +`--ifdef=NAME' + Make merged if-then-else output using NAME. + +`--ignore-all-space' + Ignore white space when comparing lines. + +`--ignore-blank-lines' + Ignore changes that just insert or delete blank lines. + +`--ignore-case' + Ignore changes in case; consider upper- and lower-case to be the + same. + +`--ignore-matching-lines=REGEXP' + Ignore changes that just insert or delete lines that match REGEXP. + +`--ignore-space-change' + Ignore trailing white space and consider all other sequences of + one or more white space characters to be equivalent. + +`--initial-tab' + Output a tab rather than a space before the text of a line in + normal or context format. This causes the alignment of tabs in + the line to look normal. + +`-L LABEL' + Use LABEL instead of the file name in the context format and + unified format headers. + +`--label=LABEL' + Use LABEL instead of the file name in the context format and + unified format headers. + +`--left-column' + Print only the left column of two common lines in side by side + format. + +`--line-format=FORMAT' + Use FORMAT to output all input lines in if-then-else format. + *Note Line formats::. + +`--minimal' + Change the algorithm to perhaps find a smaller set of changes. + This makes `diff' slower (sometimes much slower). + +`-n' + Output RCS-format diffs; like `-f' except that each command + specifies the number of lines affected. + +`-N' +`--new-file' + In directory comparison, if a file is found in only one directory, + treat it as present but empty in the other directory. + +`--new-group-format=FORMAT' + Use FORMAT to output a group of lines taken from just the second + file in if-then-else format. *Note Line group formats::. + +`--new-line-format=FORMAT' + Use FORMAT to output a line taken from just the second file in + if-then-else format. *Note Line formats::. + +`--old-group-format=FORMAT' + Use FORMAT to output a group of lines taken from just the first + file in if-then-else format. *Note Line group formats::. + +`--old-line-format=FORMAT' + Use FORMAT to output a line taken from just the first file in + if-then-else format. *Note Line formats::. + +`-p' + Show which C function each change is in. + +`--rcs' + Output RCS-format diffs; like `-f' except that each command + specifies the number of lines affected. + +`--report-identical-files' +`-s' + Report when two files are the same. + +`--show-c-function' + Show which C function each change is in. + +`--show-function-line=REGEXP' + In context and unified format, for each hunk of differences, show + some of the last preceding line that matches REGEXP. + +`--side-by-side' + Use the side by side output format. + +`--speed-large-files' + Use heuristics to speed handling of large files that have numerous + scattered small changes. + +`--suppress-common-lines' + Do not print common lines in side by side format. + +`-t' + Expand tabs to spaces in the output, to preserve the alignment of + tabs in the input files. + +`-T' + Output a tab rather than a space before the text of a line in + normal or context format. This causes the alignment of tabs in + the line to look normal. + +`--text' + Treat all files as text and compare them line-by-line, even if they + do not appear to be text. + +`-u' + Use the unified output format. + +`--unchanged-group-format=FORMAT' + Use FORMAT to output a group of common lines taken from both files + in if-then-else format. *Note Line group formats::. + +`--unchanged-line-format=FORMAT' + Use FORMAT to output a line common to both files in if-then-else + format. *Note Line formats::. + +`-U LINES' +`--unified[=LINES]' + Use the unified output format, showing LINES (an integer) lines of + context, or three if LINES is not given. For proper operation, + `patch' typically needs at least two lines of context. + +`-w' + Ignore white space when comparing lines. + +`-W COLUMNS' +`--width=COLUMNS' + Use an output width of COLUMNS in side by side format. + +`-y' + Use the side by side output format. + +* Menu: + +* Line group formats:: Line group formats +* Line formats:: Line formats + + +File: cvs.info, Node: Line group formats, Next: Line formats, Up: diff options + +A.11.1.1 Line group formats +........................... + +Line group formats let you specify formats suitable for many +applications that allow if-then-else input, including programming +languages and text formatting languages. A line group format specifies +the output format for a contiguous group of similar lines. + + For example, the following command compares the TeX file `myfile' +with the original version from the repository, and outputs a merged +file in which old regions are surrounded by `\begin{em}'-`\end{em}' +lines, and new regions are surrounded by `\begin{bf}'-`\end{bf}' lines. + + cvs diff \ + --old-group-format='\begin{em} + %<\end{em} + ' \ + --new-group-format='\begin{bf} + %>\end{bf} + ' \ + myfile + + The following command is equivalent to the above example, but it is a +little more verbose, because it spells out the default line group +formats. + + cvs diff \ + --old-group-format='\begin{em} + %<\end{em} + ' \ + --new-group-format='\begin{bf} + %>\end{bf} + ' \ + --unchanged-group-format='%=' \ + --changed-group-format='\begin{em} + %<\end{em} + \begin{bf} + %>\end{bf} + ' \ + myfile + + Here is a more advanced example, which outputs a diff listing with +headers containing line numbers in a "plain English" style. + + cvs diff \ + --unchanged-group-format='' \ + --old-group-format='-------- %dn line%(n=1?:s) deleted at %df: + %<' \ + --new-group-format='-------- %dN line%(N=1?:s) added after %de: + %>' \ + --changed-group-format='-------- %dn line%(n=1?:s) changed at %df: + %<-------- to: + %>' \ + myfile + + To specify a line group format, use one of the options listed below. +You can specify up to four line group formats, one for each kind of +line group. You should quote FORMAT, because it typically contains +shell metacharacters. + +`--old-group-format=FORMAT' + These line groups are hunks containing only lines from the first + file. The default old group format is the same as the changed + group format if it is specified; otherwise it is a format that + outputs the line group as-is. + +`--new-group-format=FORMAT' + These line groups are hunks containing only lines from the second + file. The default new group format is same as the changed group + format if it is specified; otherwise it is a format that outputs + the line group as-is. + +`--changed-group-format=FORMAT' + These line groups are hunks containing lines from both files. The + default changed group format is the concatenation of the old and + new group formats. + +`--unchanged-group-format=FORMAT' + These line groups contain lines common to both files. The default + unchanged group format is a format that outputs the line group + as-is. + + In a line group format, ordinary characters represent themselves; +conversion specifications start with `%' and have one of the following +forms. + +`%<' + stands for the lines from the first file, including the trailing + newline. Each line is formatted according to the old line format + (*note Line formats::). + +`%>' + stands for the lines from the second file, including the trailing + newline. Each line is formatted according to the new line format. + +`%=' + stands for the lines common to both files, including the trailing + newline. Each line is formatted according to the unchanged line + format. + +`%%' + stands for `%'. + +`%c'C'' + where C is a single character, stands for C. C may not be a + backslash or an apostrophe. For example, `%c':'' stands for a + colon, even inside the then-part of an if-then-else format, which + a colon would normally terminate. + +`%c'\O'' + where O is a string of 1, 2, or 3 octal digits, stands for the + character with octal code O. For example, `%c'\0'' stands for a + null character. + +`FN' + where F is a `printf' conversion specification and N is one of the + following letters, stands for N's value formatted with F. + + `e' + The line number of the line just before the group in the old + file. + + `f' + The line number of the first line in the group in the old + file; equals E + 1. + + `l' + The line number of the last line in the group in the old file. + + `m' + The line number of the line just after the group in the old + file; equals L + 1. + + `n' + The number of lines in the group in the old file; equals L - + F + 1. + + `E, F, L, M, N' + Likewise, for lines in the new file. + + + The `printf' conversion specification can be `%d', `%o', `%x', or + `%X', specifying decimal, octal, lower case hexadecimal, or upper + case hexadecimal output respectively. After the `%' the following + options can appear in sequence: a `-' specifying + left-justification; an integer specifying the minimum field width; + and a period followed by an optional integer specifying the + minimum number of digits. For example, `%5dN' prints the number + of new lines in the group in a field of width 5 characters, using + the `printf' format `"%5d"'. + +`(A=B?T:E)' + If A equals B then T else E. A and B are each either a decimal + constant or a single letter interpreted as above. This format + spec is equivalent to T if A's value equals B's; otherwise it is + equivalent to E. + + For example, `%(N=0?no:%dN) line%(N=1?:s)' is equivalent to `no + lines' if N (the number of lines in the group in the new file) is + 0, to `1 line' if N is 1, and to `%dN lines' otherwise. + + +File: cvs.info, Node: Line formats, Prev: Line group formats, Up: diff options + +A.11.1.2 Line formats +..................... + +Line formats control how each line taken from an input file is output +as part of a line group in if-then-else format. + + For example, the following command outputs text with a one-column +change indicator to the left of the text. The first column of output +is `-' for deleted lines, `|' for added lines, and a space for +unchanged lines. The formats contain newline characters where newlines +are desired on output. + + cvs diff \ + --old-line-format='-%l + ' \ + --new-line-format='|%l + ' \ + --unchanged-line-format=' %l + ' \ + myfile + + To specify a line format, use one of the following options. You +should quote FORMAT, since it often contains shell metacharacters. + +`--old-line-format=FORMAT' + formats lines just from the first file. + +`--new-line-format=FORMAT' + formats lines just from the second file. + +`--unchanged-line-format=FORMAT' + formats lines common to both files. + +`--line-format=FORMAT' + formats all lines; in effect, it sets all three above options + simultaneously. + + In a line format, ordinary characters represent themselves; +conversion specifications start with `%' and have one of the following +forms. + +`%l' + stands for the contents of the line, not counting its trailing + newline (if any). This format ignores whether the line is + incomplete. + +`%L' + stands for the contents of the line, including its trailing newline + (if any). If a line is incomplete, this format preserves its + incompleteness. + +`%%' + stands for `%'. + +`%c'C'' + where C is a single character, stands for C. C may not be a + backslash or an apostrophe. For example, `%c':'' stands for a + colon. + +`%c'\O'' + where O is a string of 1, 2, or 3 octal digits, stands for the + character with octal code O. For example, `%c'\0'' stands for a + null character. + +`Fn' + where F is a `printf' conversion specification, stands for the + line number formatted with F. For example, `%.5dn' prints the + line number using the `printf' format `"%.5d"'. *Note Line group + formats::, for more about printf conversion specifications. + + + The default line format is `%l' followed by a newline character. + + If the input contains tab characters and it is important that they +line up on output, you should ensure that `%l' or `%L' in a line format +is just after a tab stop (e.g. by preceding `%l' or `%L' with a tab +character), or you should use the `-t' or `--expand-tabs' option. + + Taken together, the line and line group formats let you specify many +different formats. For example, the following command uses a format +similar to `diff''s normal format. You can tailor this command to get +fine control over `diff''s output. + + cvs diff \ + --old-line-format='< %l + ' \ + --new-line-format='> %l + ' \ + --old-group-format='%df%(f=l?:,%dl)d%dE + %<' \ + --new-group-format='%dea%dF%(F=L?:,%dL) + %>' \ + --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) + %<--- + %>' \ + --unchanged-group-format='' \ + myfile + + +File: cvs.info, Node: diff examples, Prev: diff options, Up: diff + +A.11.2 diff examples +-------------------- + +The following line produces a Unidiff (`-u' flag) between revision 1.14 +and 1.19 of `backend.c'. Due to the `-kk' flag no keywords are +substituted, so differences that only depend on keyword substitution +are ignored. + + $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c + + Suppose the experimental branch EXPR1 was based on a set of files +tagged RELEASE_1_0. To see what has happened on that branch, the +following can be used: + + $ cvs diff -r RELEASE_1_0 -r EXPR1 + + A command like this can be used to produce a context diff between +two releases: + + $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs + + If you are maintaining ChangeLogs, a command like the following just +before you commit your changes may help you write the ChangeLog entry. +All local modifications that have not yet been committed will be +printed. + + $ cvs diff -u | less + + +File: cvs.info, Node: export, Next: history, Prev: diff, Up: CVS commands + +A.12 export--Export sources from CVS, similar to checkout +========================================================= + + * Synopsis: export [-flNnR] (-r rev[:date] | -D date) [-k subst] [-d + dir] module... + + * Requires: repository. + + * Changes: current directory. + + This command is a variant of `checkout'; use it when you want a copy +of the source for module without the CVS administrative directories. +For example, you might use `export' to prepare source for shipment +off-site. This command requires that you specify a date or tag (with +`-D' or `-r'), so that you can count on reproducing the source you ship +to others (and thus it always prunes empty directories). + + One often would like to use `-kv' with `cvs export'. This causes +any keywords to be expanded such that an import done at some other site +will not lose the keyword revision information. But be aware that +doesn't handle an export containing binary files correctly. Also be +aware that after having used `-kv', one can no longer use the `ident' +command (which is part of the RCS suite--see ident(1)) which looks for +keyword strings. If you want to be able to use `ident' you must not +use `-kv'. + +* Menu: + +* export options:: export options + + +File: cvs.info, Node: export options, Up: export + +A.12.1 export options +--------------------- + +These standard options are supported by `export' (*note Common +options::, for a complete description of them): + +`-D DATE' + Use the most recent revision no later than DATE. + +`-f' + If no matching revision is found, retrieve the most recent + revision (instead of ignoring the file). + +`-l' + Local; run only in current working directory. + +`-n' + Do not run any checkout program. + +`-R' + Export directories recursively. This is on by default. + +`-r TAG[:DATE]' + Export the revision specified by TAG or, when DATE is specified + and TAG is a branch tag, the version from the branch TAG as it + existed on DATE. See *Note Common options::. + + In addition, these options (that are common to `checkout' and +`export') are also supported: + +`-d DIR' + Create a directory called DIR for the working files, instead of + using the module name. *Note checkout options::, for complete + details on how CVS handles this flag. + +`-k SUBST' + Set keyword expansion mode (*note Substitution modes::). + +`-N' + Only useful together with `-d DIR'. *Note checkout options::, for + complete details on how CVS handles this flag. + + +File: cvs.info, Node: history, Next: import, Prev: export, Up: CVS commands + +A.13 history--Show status of files and users +============================================ + + * Synopsis: history [-report] [-flags] [-options args] [files...] + + * Requires: the file `$CVSROOT/CVSROOT/history' + + * Changes: nothing. + + CVS can keep a history log that tracks each use of most CVS +commands. You can use `history' to display this information in various +formats. + + To enable logging, the `LogHistory' config option must be set to +some value other than the empty string and the history file specified by +the `HistoryLogPath' option must be writable by all users who may run +the CVS executable (*note config::). + + To enable the `history' command, logging must be enabled as above and +the `HistorySearchPath' config option (*note config::) must be set to +specify some number of the history logs created thereby and these files +must be readable by each user who might run the `history' command. + + Creating a repository via the `cvs init' command will enable logging +of all possible events to a single history log file +(`$CVSROOT/CVSROOT/history') with read and write permissions for all +users (*note Creating a repository::). + + *Note_ `history' uses `-f', `-l', `-n', and `-p' in ways that +conflict with the normal use inside CVS (*note Common options::).* + +* Menu: + +* history options:: history options + + +File: cvs.info, Node: history options, Up: history + +A.13.1 history options +---------------------- + +Several options (shown above as `-report') control what kind of +report is generated: + +`-c' + Report on each time commit was used (i.e., each time the + repository was modified). + +`-e' + Everything (all record types). Equivalent to specifying `-x' with + all record types. Of course, `-e' will also include record types + which are added in a future version of CVS; if you are writing a + script which can only handle certain record types, you'll want to + specify `-x'. + +`-m MODULE' + Report on a particular module. (You can meaningfully use `-m' + more than once on the command line.) + +`-o' + Report on checked-out modules. This is the default report type. + +`-T' + Report on all tags. + +`-x TYPE' + Extract a particular set of record types TYPE from the CVS + history. The types are indicated by single letters, which you may + specify in combination. + + Certain commands have a single record type: + + `F' + release + + `O' + checkout + + `E' + export + + `T' + rtag + + One of five record types may result from an update: + + `C' + A merge was necessary but collisions were detected (requiring + manual merging). + + `G' + A merge was necessary and it succeeded. + + `U' + A working file was copied from the repository. + + `P' + A working file was patched to match the repository. + + `W' + The working copy of a file was deleted during update (because + it was gone from the repository). + + One of three record types results from commit: + + `A' + A file was added for the first time. + + `M' + A file was modified. + + `R' + A file was removed. + + The options shown as `-flags' constrain or expand the report without +requiring option arguments: + +`-a' + Show data for all users (the default is to show data only for the + user executing `history'). + +`-l' + Show last modification only. + +`-w' + Show only the records for modifications done from the same working + directory where `history' is executing. + + The options shown as `-options ARGS' constrain the report based on +an argument: + +`-b STR' + Show data back to a record containing the string STR in either + the module name, the file name, or the repository path. + +`-D DATE' + Show data since DATE. This is slightly different from the normal + use of `-D DATE', which selects the newest revision older than + DATE. + +`-f FILE' + Show data for a particular file (you can specify several `-f' + options on the same command line). This is equivalent to + specifying the file on the command line. + +`-n MODULE' + Show data for a particular module (you can specify several `-n' + options on the same command line). + +`-p REPOSITORY' + Show data for a particular source repository (you can specify + several `-p' options on the same command line). + +`-r REV' + Show records referring to revisions since the revision or tag + named REV appears in individual RCS files. Each RCS file is + searched for the revision or tag. + +`-t TAG' + Show records since tag TAG was last added to the history file. + This differs from the `-r' flag above in that it reads only the + history file, not the RCS files, and is much faster. + +`-u NAME' + Show records for user NAME. + +`-z TIMEZONE' + Show times in the selected records using the specified time zone + instead of UTC. + + +File: cvs.info, Node: import, Next: log, Prev: history, Up: CVS commands + +A.14 import--Import sources into CVS, using vendor branches +=========================================================== + + * Synopsis: import [-options] repository vendortag releasetag... + + * Requires: Repository, source distribution directory. + + * Changes: repository. + + Use `import' to incorporate an entire source distribution from an +outside source (e.g., a source vendor) into your source repository +directory. You can use this command both for initial creation of a +repository, and for wholesale updates to the module from the outside +source. *Note Tracking sources::, for a discussion on this subject. + + The REPOSITORY argument gives a directory name (or a path to a +directory) under the CVS root directory for repositories; if the +directory did not exist, import creates it. + + When you use import for updates to source that has been modified in +your source repository (since a prior import), it will notify you of +any files that conflict in the two branches of development; use +`checkout -j' to reconcile the differences, as import instructs you to +do. + + If CVS decides a file should be ignored (*note cvsignore::), it does +not import it and prints `I ' followed by the filename (*note import +output::, for a complete description of the output). + + If the file `$CVSROOT/CVSROOT/cvswrappers' exists, any file whose +names match the specifications in that file will be treated as packages +and the appropriate filtering will be performed on the file/directory +before being imported. *Note Wrappers::. + + The outside source is saved in a first-level branch, by default +1.1.1. Updates are leaves of this branch; for example, files from the +first imported collection of source will be revision 1.1.1.1, then +files from the first imported update will be revision 1.1.1.2, and so +on. + + At least three arguments are required. REPOSITORY is needed to +identify the collection of source. VENDORTAG is a tag for the entire +branch (e.g., for 1.1.1). You must also specify at least one +RELEASETAG to uniquely identify the files at the leaves created each +time you execute `import'. The RELEASETAG should be new, not +previously existing in the repository file, and uniquely identify the +imported release, + + Note that `import' does _not_ change the directory in which you +invoke it. In particular, it does not set up that directory as a CVS +working directory; if you want to work with the sources import them +first and then check them out into a different directory (*note Getting +the source::). + +* Menu: + +* import options:: import options +* import output:: import output +* import examples:: import examples + + +File: cvs.info, Node: import options, Next: import output, Up: import + +A.14.1 import options +--------------------- + +This standard option is supported by `import' (*note Common options::, +for a complete description): + +`-m MESSAGE' + Use MESSAGE as log information, instead of invoking an editor. + + There are the following additional special options. + +`-b BRANCH' + See *Note Multiple vendor branches::. + +`-k SUBST' + Indicate the keyword expansion mode desired. This setting will + apply to all files created during the import, but not to any files + that previously existed in the repository. See *Note Substitution + modes::, for a list of valid `-k' settings. + +`-I NAME' + Specify file names that should be ignored during import. You can + use this option repeatedly. To avoid ignoring any files at all + (even those ignored by default), specify `-I !'. + + NAME can be a file name pattern of the same type that you can + specify in the `.cvsignore' file. *Note cvsignore::. + +`-W SPEC' + Specify file names that should be filtered during import. You can + use this option repeatedly. + + SPEC can be a file name pattern of the same type that you can + specify in the `.cvswrappers' file. *Note Wrappers::. + +`-X' + Modify the algorithm used by CVS when importing new files so that + new files do not immediately appear on the main trunk. + + Specifically, this flag causes CVS to mark new files as if they + were deleted on the main trunk, by taking the following steps for + each file in addition to those normally taken on import: creating + a new revision on the main trunk indicating that the new file is + `dead', resetting the new file's default branch, and placing the + file in the Attic (*note Attic::) directory. + + Use of this option can be forced on a repository-wide basis by + setting the `ImportNewFilesToVendorBranchOnly' option in + CVSROOT/config (*note config::). + + +File: cvs.info, Node: import output, Next: import examples, Prev: import options, Up: import + +A.14.2 import output +-------------------- + +`import' keeps you informed of its progress by printing a line for each +file, preceded by one character indicating the status of the file: + +`U FILE' + The file already exists in the repository and has not been locally + modified; a new revision has been created (if necessary). + +`N FILE' + The file is a new file which has been added to the repository. + +`C FILE' + The file already exists in the repository but has been locally + modified; you will have to merge the changes. + +`I FILE' + The file is being ignored (*note cvsignore::). + +`L FILE' + The file is a symbolic link; `cvs import' ignores symbolic links. + People periodically suggest that this behavior should be changed, + but if there is a consensus on what it should be changed to, it is + not apparent. (Various options in the `modules' file can be used + to recreate symbolic links on checkout, update, etc.; *note + modules::.) + + +File: cvs.info, Node: import examples, Prev: import output, Up: import + +A.14.3 import examples +---------------------- + +See *Note Tracking sources::, and *Note From files::. + + +File: cvs.info, Node: log, Next: ls & rls, Prev: import, Up: CVS commands + +A.15 log--Print out log information for files +============================================= + + * Synopsis: log [options] [files...] + + * Requires: repository, working directory. + + * Changes: nothing. + + Display log information for files. `log' used to call the RCS +utility `rlog'. Although this is no longer true in the current +sources, this history determines the format of the output and the +options, which are not quite in the style of the other CVS commands. + + The output includes the location of the RCS file, the "head" +revision (the latest revision on the trunk), all symbolic names (tags) +and some other things. For each revision, the revision number, the +date, the author, the number of lines added/deleted, the commitid and +the log message are printed. All dates are displayed in local time at +the client. This is typically specified in the `$TZ' environment +variable, which can be set to govern how `log' displays dates. + + *Note_ `log' uses `-R' in a way that conflicts with the normal use +inside CVS (*note Common options::).* + +* Menu: + +* log options:: log options +* log examples:: log examples + + +File: cvs.info, Node: log options, Next: log examples, Up: log + +A.15.1 log options +------------------ + +By default, `log' prints all information that is available. All other +options restrict the output. Note that the revision selection options +(`-d', `-r', `-s', and `-w') have no effect, other than possibly +causing a search for files in Attic directories, when used in +conjunction with the options that restrict the output to only `log' +header fields (`-b', `-h', `-R', and `-t') unless the `-S' option is +also specified. + +`-b' + Print information about the revisions on the default branch, + normally the highest branch on the trunk. + +`-d DATES' + Print information about revisions with a checkin date/time in the + range given by the semicolon-separated list of dates. The date + formats accepted are those accepted by the `-D' option to many + other CVS commands (*note Common options::). Dates can be + combined into ranges as follows: + + `D1<D2' + `D2>D1' + Select the revisions that were deposited between D1 and D2. + + `<D' + `D>' + Select all revisions dated D or earlier. + + `D<' + `>D' + Select all revisions dated D or later. + + `D' + Select the single, latest revision dated D or earlier. + + The `>' or `<' characters may be followed by `=' to indicate an + inclusive range rather than an exclusive one. + + Note that the separator is a semicolon (;). + +`-h' + Print only the name of the RCS file, name of the file in the + working directory, head, default branch, access list, locks, + symbolic names, and suffix. + +`-l' + Local; run only in current working directory. (Default is to run + recursively). + +`-N' + Do not print the list of tags for this file. This option can be + very useful when your site uses a lot of tags, so rather than + "more"'ing over 3 pages of tag information, the log information is + presented without tags at all. + +`-R' + Print only the name of the RCS file. + +`-rREVISIONS' + Print information about revisions given in the comma-separated + list REVISIONS of revisions and ranges. The following table + explains the available range formats: + + `REV1:REV2' + Revisions REV1 to REV2 (which must be on the same branch). + + `REV1::REV2' + The same, but excluding REV1. + + `:REV' + `::REV' + Revisions from the beginning of the branch up to and + including REV. + + `REV:' + Revisions starting with REV to the end of the branch + containing REV. + + `REV::' + Revisions starting just after REV to the end of the branch + containing REV. + + `BRANCH' + An argument that is a branch means all revisions on that + branch. + + `BRANCH1:BRANCH2' + `BRANCH1::BRANCH2' + A range of branches means all revisions on the branches in + that range. + + `BRANCH.' + The latest revision in BRANCH. + + A bare `-r' with no revisions means the latest revision on the + default branch, normally the trunk. There can be no space between + the `-r' option and its argument. + +`-S' + Suppress the header if no revisions are selected. + +`-s STATES' + Print information about revisions whose state attributes match one + of the states given in the comma-separated list STATES. + Individual states may be any text string, though CVS commonly only + uses two states, `Exp' and `dead'. See *Note admin options:: for + more information. + +`-t' + Print the same as `-h', plus the descriptive text. + +`-wLOGINS' + Print information about revisions checked in by users with login + names appearing in the comma-separated list LOGINS. If LOGINS is + omitted, the user's login is assumed. There can be no space + between the `-w' option and its argument. + + `log' prints the intersection of the revisions selected with the +options `-d', `-s', and `-w', intersected with the union of the +revisions selected by `-b' and `-r'. + + +File: cvs.info, Node: log examples, Prev: log options, Up: log + +A.15.2 log examples +------------------- + +Since `log' shows dates in local time, you might want to see them in +Coordinated Universal Time (UTC) or some other timezone. To do this +you can set your `$TZ' environment variable before invoking CVS: + + $ TZ=UTC cvs log foo.c + $ TZ=EST cvs log bar.c + + (If you are using a `csh'-style shell, like `tcsh', you would need +to prefix the examples above with `env'.) + + +File: cvs.info, Node: ls & rls, Next: rdiff, Prev: log, Up: CVS commands + +A.16 ls & rls +============= + + * ls [-e | -l] [-RP] [-r tag[:date]] [-D date] [path...] + + * Requires: repository for `rls', repository & working directory for + `ls'. + + * Changes: nothing. + + * Synonym: `dir' & `list' are synonyms for `ls' and `rdir' & `rlist' + are synonyms for `rls'. + + The `ls' and `rls' commands are used to list files and directories +in the repository. + + By default `ls' lists the files and directories that belong in your +working directory, what would be there after an `update'. + + By default `rls' lists the files and directories on the tip of the +trunk in the topmost directory of the repository. + + Both commands accept an optional list of file and directory names, +relative to the working directory for `ls' and the topmost directory of +the repository for `rls'. Neither is recursive by default. + +* Menu: + +* ls & rls options:: ls & rls options +* rls examples: rls examples + + +File: cvs.info, Node: ls & rls options, Next: rls examples, Up: ls & rls + +A.16.1 ls & rls options +----------------------- + +These standard options are supported by `ls' & `rls': + +`-d' + Show dead revisions (with tag when specified). + +`-e' + Display in CVS/Entries format. This format is meant to remain + easily parsable by automation. + +`-l' + Display all details. + +`-P' + Don't list contents of empty directories when recursing. + +`-R' + List recursively. + +`-r TAG[:DATE]' + Show files specified by TAG or, when DATE is specified and TAG is + a branch tag, the version from the branch TAG as it existed on + DATE. See *Note Common options::. + +`-D DATE' + Show files from date. + + +File: cvs.info, Node: rls examples, Prev: ls & rls options, Up: ls & rls + +A.16.2 rls examples +------------------- + + $ cvs rls + cvs rls: Listing module: `.' + CVSROOT + first-dir + + $ cvs rls CVSROOT + cvs rls: Listing module: `CVSROOT' + checkoutlist + commitinfo + config + cvswrappers + loginfo + modules + notify + rcsinfo + taginfo + verifymsg + + +File: cvs.info, Node: rdiff, Next: release, Prev: ls & rls, Up: CVS commands + +A.17 rdiff--'patch' format diffs between releases +================================================= + + * rdiff [-flags] [-V vn] (-r tag1[:date1] | -D date1) [-r + tag2[:date2] | -D date2] modules... + + * Requires: repository. + + * Changes: nothing. + + * Synonym: patch + + Builds a Larry Wall format patch(1) file between two releases, that +can be fed directly into the `patch' program to bring an old release +up-to-date with the new release. (This is one of the few CVS commands +that operates directly from the repository, and doesn't require a prior +checkout.) The diff output is sent to the standard output device. + + You can specify (using the standard `-r' and `-D' options) any +combination of one or two revisions or dates. If only one revision or +date is specified, the patch file reflects differences between that +revision or date and the current head revisions in the RCS file. + + Note that if the software release affected is contained in more than +one directory, then it may be necessary to specify the `-p' option to +the `patch' command when patching the old sources, so that `patch' is +able to find the files that are located in other directories. + +* Menu: + +* rdiff options:: rdiff options +* rdiff examples:: rdiff examples + + +File: cvs.info, Node: rdiff options, Next: rdiff examples, Up: rdiff + +A.17.1 rdiff options +-------------------- + +These standard options are supported by `rdiff' (*note Common +options::, for a complete description of them): + +`-D DATE' + Use the most recent revision no later than DATE. + +`-f' + If no matching revision is found, retrieve the most recent + revision (instead of ignoring the file). + +`-k KFLAG' + Process keywords according to KFLAG. See *Note Keyword + substitution::. + +`-l' + Local; don't descend subdirectories. + +`-R' + Examine directories recursively. This option is on by default. + +`-r TAG' + Use the revision specified by TAG, or when DATE is specified and + TAG is a branch tag, the version from the branch TAG as it existed + on DATE. See *Note Common options::. + + In addition to the above, these options are available: + +`-c' + Use the context diff format. This is the default format. + +`-s' + Create a summary change report instead of a patch. The summary + includes information about files that were changed or added + between the releases. It is sent to the standard output device. + This is useful for finding out, for example, which files have + changed between two dates or revisions. + +`-t' + A diff of the top two revisions is sent to the standard output + device. This is most useful for seeing what the last change to a + file was. + +`-u' + Use the unidiff format for the context diffs. Remember that old + versions of the `patch' program can't handle the unidiff format, + so if you plan to post this patch to the net you should probably + not use `-u'. + +`-V VN' + Expand keywords according to the rules current in RCS version VN + (the expansion format changed with RCS version 5). Note that this + option is no longer accepted. CVS will always expand keywords the + way that RCS version 5 does. + + +File: cvs.info, Node: rdiff examples, Prev: rdiff options, Up: rdiff + +A.17.2 rdiff examples +--------------------- + +Suppose you receive mail from foo@example.net asking for an update from +release 1.2 to 1.4 of the tc compiler. You have no such patches on +hand, but with CVS that can easily be fixed with a command such as this: + + $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \ + $$ Mail -s 'The patches you asked for' foo@example.net + + Suppose you have made release 1.3, and forked a branch called +`R_1_3fix' for bug fixes. `R_1_3_1' corresponds to release 1.3.1, +which was made some time ago. Now, you want to see how much +development has been done on the branch. This command can be used: + + $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name + cvs rdiff: Diffing module-name + File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6 + File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4 + File bar.h,v changed from revision 1.29.2.1 to 1.2 + + +File: cvs.info, Node: release, Next: server & pserver, Prev: rdiff, Up: CVS commands + +A.18 release--Indicate that a Module is no longer in use +======================================================== + + * release [-d] directories... + + * Requires: Working directory. + + * Changes: Working directory, history log. + + This command is meant to safely cancel the effect of `cvs checkout'. +Since CVS doesn't lock files, it isn't strictly necessary to use this +command. You can always simply delete your working directory, if you +like; but you risk losing changes you may have forgotten, and you leave +no trace in the CVS history file (*note history file::) that you've +abandoned your checkout. + + Use `cvs release' to avoid these problems. This command checks that +no uncommitted changes are present; that you are executing it from +immediately above a CVS working directory; and that the repository +recorded for your files is the same as the repository defined in the +module database. + + If all these conditions are true, `cvs release' leaves a record of +its execution (attesting to your intentionally abandoning your +checkout) in the CVS history log. + +* Menu: + +* release options:: release options +* release output:: release output +* release examples:: release examples + + +File: cvs.info, Node: release options, Next: release output, Up: release + +A.18.1 release options +---------------------- + +The `release' command supports one command option: + +`-d' + Delete your working copy of the file if the release succeeds. If + this flag is not given your files will remain in your working + directory. + + *WARNING: The `release' command deletes all directories and files + recursively. This has the very serious side-effect that any + directory that you have created inside your checked-out sources, + and not added to the repository (using the `add' command; *note + Adding files::) will be silently deleted--even if it is non-empty!* + + +File: cvs.info, Node: release output, Next: release examples, Prev: release options, Up: release + +A.18.2 release output +--------------------- + +Before `release' releases your sources it will print a one-line message +for any file that is not up-to-date. + +`U FILE' +`P FILE' + There exists a newer revision of this file in the repository, and + you have not modified your local copy of the file (`U' and `P' + mean the same thing). + +`A FILE' + The file has been added to your private copy of the sources, but + has not yet been committed to the repository. If you delete your + copy of the sources this file will be lost. + +`R FILE' + The file has been removed from your private copy of the sources, + but has not yet been removed from the repository, since you have + not yet committed the removal. *Note commit::. + +`M FILE' + The file is modified in your working directory. There might also + be a newer revision inside the repository. + +`? FILE' + FILE is in your working directory, but does not correspond to + anything in the source repository, and is not in the list of files + for CVS to ignore (see the description of the `-I' option, and + *note cvsignore::). If you remove your working sources, this file + will be lost. + + +File: cvs.info, Node: release examples, Prev: release output, Up: release + +A.18.3 release examples +----------------------- + +Release the `tc' directory, and delete your local working copy of the +files. + + $ cd .. # You must stand immediately above the + # sources when you issue `cvs release'. + $ cvs release -d tc + You have [0] altered files in this repository. + Are you sure you want to release (and delete) directory `tc': y + $ + + +File: cvs.info, Node: server & pserver, Next: update, Prev: release, Up: CVS commands + +A.19 server & pserver--Act as a server for a client on stdin/stdout +=================================================================== + + * pserver [-c path] + + server [-c path] + + * Requires: repository, client conversation on stdin/stdout + + * Changes: Repository or, indirectly, client working directory. + + The CVS `server' and `pserver' commands are used to provide +repository access to remote clients and expect a client conversation on +stdin & stdout. Typically these commands are launched from `inetd' or +via `ssh' (*note Remote repositories::). + + `server' expects that the client has already been authenticated +somehow, typically via SSH, and `pserver' attempts to authenticate the +client itself. + + Only one option is available with the `server' and `pserver' +commands: + +`-c path' + Load configuration from PATH rather than the default location + `$CVSROOT/CVSROOT/config' (*note config::). PATH must be + `/etc/cvs.conf' or prefixed by `/etc/cvs/'. This option is + supported beginning with CVS release 1.12.13. + + +File: cvs.info, Node: update, Prev: server & pserver, Up: CVS commands + +A.20 update--Bring work tree in sync with repository +==================================================== + + * update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r + tag[:date] | -D date] [-W spec] files... + + * Requires: repository, working directory. + + * Changes: working directory. + + After you've run checkout to create your private copy of source from +the common repository, other developers will continue changing the +central source. From time to time, when it is convenient in your +development process, you can use the `update' command from within your +working directory to reconcile your work with any revisions applied to +the source repository since your last checkout or update. Without the +`-C' option, `update' will also merge any differences between the local +copy of files and their base revisions into any destination revisions +specified with `-r', `-D', or `-A'. + +* Menu: + +* update options:: update options +* update output:: update output + + +File: cvs.info, Node: update options, Next: update output, Up: update + +A.20.1 update options +--------------------- + +These standard options are available with `update' (*note Common +options::, for a complete description of them): + +`-D date' + Use the most recent revision no later than DATE. This option is + sticky, and implies `-P'. See *Note Sticky tags::, for more + information on sticky tags/dates. + +`-f' + Only useful with the `-D' or `-r' flags. If no matching revision + is found, retrieve the most recent revision (instead of ignoring + the file). + +`-k KFLAG' + Process keywords according to KFLAG. See *Note Keyword + substitution::. This option is sticky; future updates of this + file in this working directory will use the same KFLAG. The + `status' command can be viewed to see the sticky options. See + *Note Invoking CVS::, for more information on the `status' command. + +`-l' + Local; run only in current working directory. *Note Recursive + behavior::. + +`-P' + Prune empty directories. See *Note Moving directories::. + +`-p' + Pipe files to the standard output. + +`-R' + Update directories recursively (default). *Note Recursive + behavior::. + +`-r TAG[:DATE]' + Retrieve the revisions specified by TAG or, when DATE is specified + and TAG is a branch tag, the version from the branch TAG as it + existed on DATE. This option is sticky, and implies `-P'. See + *Note Sticky tags::, for more information on sticky tags/dates. + Also see *Note Common options::. + + These special options are also available with `update'. + +`-A' + Reset any sticky tags, dates, or `-k' options. See *Note Sticky + tags::, for more information on sticky tags/dates. + +`-C' + Overwrite locally modified files with clean copies from the + repository (the modified file is saved in `.#FILE.REVISION', + however). + +`-d' + Create any directories that exist in the repository if they're + missing from the working directory. Normally, `update' acts only + on directories and files that were already enrolled in your + working directory. + + This is useful for updating directories that were created in the + repository since the initial checkout; but it has an unfortunate + side effect. If you deliberately avoided certain directories in + the repository when you created your working directory (either + through use of a module name or by listing explicitly the files + and directories you wanted on the command line), then updating + with `-d' will create those directories, which may not be what you + want. + +`-I NAME' + Ignore files whose names match NAME (in your working directory) + during the update. You can specify `-I' more than once on the + command line to specify several files to ignore. Use `-I !' to + avoid ignoring any files at all. *Note cvsignore::, for other + ways to make CVS ignore some files. + +`-WSPEC' + Specify file names that should be filtered during update. You can + use this option repeatedly. + + SPEC can be a file name pattern of the same type that you can + specify in the `.cvswrappers' file. *Note Wrappers::. + +`-jREVISION' + With two `-j' options, merge changes from the revision specified + with the first `-j' option to the revision specified with the + second `j' option, into the working directory. + + With one `-j' option, merge changes from the ancestor revision to + the revision specified with the `-j' option, into the working + directory. The ancestor revision is the common ancestor of the + revision which the working directory is based on, and the revision + specified in the `-j' option. + + Note that using a single `-j TAGNAME' option rather than `-j + BRANCHNAME' to merge changes from a branch will often not remove + files which were removed on the branch. *Note Merging adds and + removals::, for more. + + In addition, each `-j' option can contain an optional date + specification which, when used with branches, can limit the chosen + revision to one within a specific date. An optional date is + specified by adding a colon (:) to the tag: + `-jSYMBOLIC_TAG:DATE_SPECIFIER'. + + *Note Branching and merging::. + + + +File: cvs.info, Node: update output, Prev: update options, Up: update + +A.20.2 update output +-------------------- + +`update' and `checkout' keep you informed of their progress by printing +a line for each file, preceded by one character indicating the status +of the file: + +`U FILE' + The file was brought up to date with respect to the repository. + This is done for any file that exists in the repository but not in + your working directory, and for files that you haven't changed but + are not the most recent versions available in the repository. + +`P FILE' + Like `U', but the CVS server sends a patch instead of an entire + file. This accomplishes the same thing as `U' using less + bandwidth. + +`A FILE' + The file has been added to your private copy of the sources, and + will be added to the source repository when you run `commit' on + the file. This is a reminder to you that the file needs to be + committed. + +`R FILE' + The file has been removed from your private copy of the sources, + and will be removed from the source repository when you run + `commit' on the file. This is a reminder to you that the file + needs to be committed. + +`M FILE' + The file is modified in your working directory. + + `M' can indicate one of two states for a file you're working on: + either there were no modifications to the same file in the + repository, so that your file remains as you last saw it; or there + were modifications in the repository as well as in your copy, but + they were merged successfully, without conflict, in your working + directory. + + CVS will print some messages if it merges your work, and a backup + copy of your working file (as it looked before you ran `update') + will be made. The exact name of that file is printed while + `update' runs. + +`C FILE' + A conflict was detected while trying to merge your changes to FILE + with changes from the source repository. FILE (the copy in your + working directory) is now the result of attempting to merge the + two revisions; an unmodified copy of your file is also in your + working directory, with the name `.#FILE.REVISION' where REVISION + is the revision that your modified file started from. Resolve the + conflict as described in *Note Conflicts example::. (Note that + some systems automatically purge files that begin with `.#' if + they have not been accessed for a few days. If you intend to keep + a copy of your original file, it is a very good idea to rename + it.) Under VMS, the file name starts with `__' rather than `.#'. + +`? FILE' + FILE is in your working directory, but does not correspond to + anything in the source repository, and is not in the list of files + for CVS to ignore (see the description of the `-I' option, and + *note cvsignore::). + + +File: cvs.info, Node: Invoking CVS, Next: Administrative files, Prev: CVS commands, Up: Top + +Appendix B Quick reference to CVS commands +****************************************** + +This appendix describes how to invoke CVS, with references to where +each command or feature is described in detail. For other references +run the `cvs --help' command, or see *Note Index::. + + A CVS command looks like: + + cvs [ GLOBAL_OPTIONS ] COMMAND [ COMMAND_OPTIONS ] [ COMMAND_ARGS ] + + Global options: + +`--allow-root=ROOTDIR' + Specify legal CVSROOT directory (server only) (not in CVS 1.9 and + older). See *Note Password authentication server::. + +`-a' + Authenticate all communication (client only) (not in CVS 1.9 and + older). See *Note Global options::. + +`-b' + Specify RCS location (CVS 1.9 and older). See *Note Global + options::. + +`-d ROOT' + Specify the CVSROOT. See *Note Repository::. + +`-e EDITOR' + Edit messages with EDITOR. See *Note Committing your changes::. + +`-f' + Do not read the `~/.cvsrc' file. See *Note Global options::. + +`-H' +`--help' + Print a help message. See *Note Global options::. + +`-n' + Do not change any files. See *Note Global options::. + +`-Q' + Be really quiet. See *Note Global options::. + +`-q' + Be somewhat quiet. See *Note Global options::. + +`-r' + Make new working files read-only. See *Note Global options::. + +`-s VARIABLE=VALUE' + Set a user variable. See *Note Variables::. + +`-T TEMPDIR' + Put temporary files in TEMPDIR. See *Note Global options::. + +`-t' + Trace CVS execution. See *Note Global options::. + +`-v' + +`--version' + Display version and copyright information for CVS. + +`-w' + Make new working files read-write. See *Note Global options::. + +`-x' + Encrypt all communication (client only). See *Note Global + options::. + +`-z GZIP-LEVEL' + Set the compression level (client only). See *Note Global + options::. + + Keyword expansion modes (*note Substitution modes::): + + -kkv $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $ + -kkvl $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ + -kk $Id$ + -kv file1,v 1.1 1993/12/09 03:21:13 joe Exp + -ko no expansion + -kb no expansion, file is binary + + Keywords (*note Keyword list::): + + $Author: joe $ + $Date: 1993/12/09 03:21:13 $ + $CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ + $Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ + $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ + $Locker: harry $ + $Name: snapshot_1_14 $ + $RCSfile: file1,v $ + $Revision: 1.1 $ + $Source: /home/files/file1,v $ + $State: Exp $ + $Log: file1,v $ + Revision 1.1 1993/12/09 03:30:17 joe + Initial revision + + Commands, command options, and command arguments: + +`add [OPTIONS] [FILES...]' + Add a new file/directory. See *Note Adding files::. + + `-k KFLAG' + Set keyword expansion. + + `-m MSG' + Set file description. + +`admin [OPTIONS] [FILES...]' + Administration of history files in the repository. See *Note + admin::. + + `-b[REV]' + Set default branch. See *Note Reverting local changes::. + + `-cSTRING' + Set comment leader. + + `-kSUBST' + Set keyword substitution. See *Note Keyword substitution::. + + `-l[REV]' + Lock revision REV, or latest revision. + + `-mREV:MSG' + Replace the log message of revision REV with MSG. + + `-oRANGE' + Delete revisions from the repository. See *Note admin + options::. + + `-q' + Run quietly; do not print diagnostics. + + `-sSTATE[:REV]' + Set the state. See *Note admin options:: for more + information on possible states. + + `-t' + Set file description from standard input. + + `-tFILE' + Set file description from FILE. + + `-t-STRING' + Set file description to STRING. + + `-u[REV]' + Unlock revision REV, or latest revision. + +`annotate [OPTIONS] [FILES...]' + Show last revision where each line was modified. See *Note + annotate::. + + `-D DATE' + Annotate the most recent revision no later than DATE. See + *Note Common options::. + + `-F' + Force annotation of binary files. (Without this option, + binary files are skipped with a message.) + + `-f' + Use head revision if tag/date not found. See *Note Common + options::. + + `-l' + Local; run only in current working directory. *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG[:DATE]' + Annotate revisions specified by TAG or, when DATE is specified + and TAG is a branch tag, the version from the branch TAG as it + existed on DATE. See *Note Common options::. + +`checkout [OPTIONS] MODULES...' + Get a copy of the sources. See *Note checkout::. + + `-A' + Reset any sticky tags/date/options. See *Note Sticky tags:: + and *Note Keyword substitution::. + + `-c' + Output the module database. See *Note checkout options::. + + `-D DATE' + Check out revisions as of DATE (is sticky). See *Note Common + options::. + + `-d DIR' + Check out into DIR. See *Note checkout options::. + + `-f' + Use head revision if tag/date not found. See *Note Common + options::. + + `-j TAG[:DATE]' + Merge in the change specified by TAG, or when DATE is + specified and TAG is a branch tag, the version from the + branch TAG as it existed on DATE. See *Note checkout + options::. + + `-k KFLAG' + Use KFLAG keyword expansion. See *Note Substitution modes::. + + `-l' + Local; run only in current working directory. *Note + Recursive behavior::. + + `-N' + Don't "shorten" module paths if -d specified. See *Note + checkout options::. + + `-n' + Do not run module program (if any). See *Note checkout + options::. + + `-P' + Prune empty directories. See *Note Moving directories::. + + `-p' + Check out files to standard output (avoids stickiness). See + *Note checkout options::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG[:DATE]' + Checkout the revision already tagged with TAG or, when DATE is + specified and TAG is a branch tag, the version from the + branch TAG as it existed on DATE. This . See *Note Common + options::. + + `-s' + Like -c, but include module status. See *Note checkout + options::. + +`commit [OPTIONS] [FILES...]' + Check changes into the repository. See *Note commit::. + + `-c' + Check for valid edits before committing. Requires a CVS + client and server both version 1.12.10 or greater. + + `-F FILE' + Read log message from FILE. See *Note commit options::. + + `-f' + Force the file to be committed; disables recursion. See + *Note commit options::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-m MSG' + Use MSG as log message. See *Note commit options::. + + `-n' + Do not run module program (if any). See *Note commit + options::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r REV' + Commit to REV. See *Note commit options::. + +`diff [OPTIONS] [FILES...]' + Show differences between revisions. See *Note diff::. In + addition to the options shown below, accepts a wide variety of + options to control output style, for example `-c' for context + diffs. + + `-D DATE1' + Diff revision for date against working file. See *Note diff + options::. + + `-D DATE2' + Diff REV1/DATE1 against DATE2. See *Note diff options::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-N' + Include diffs for added and removed files. See *Note diff + options::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG1[:DATE1]' + Diff the revisions specified by TAG1 or, when DATE1 is + specified and TAG1 is a branch tag, the version from the + branch TAG1 as it existed on DATE1, against the working file. + See *Note diff options:: and *Note Common options::. + + `-r TAG2[:DATE2]' + Diff the revisions specified by TAG2 or, when DATE2 is + specified and TAG2 is a branch tag, the version from the + branch TAG2 as it existed on DATE2, against REV1/DATE1. See + *Note diff options:: and *Note Common options::. + +`edit [OPTIONS] [FILES...]' + Get ready to edit a watched file. See *Note Editing files::. + + `-a ACTIONS' + Specify actions for temporary watch, where ACTIONS is `edit', + `unedit', `commit', `all', or `none'. See *Note Editing + files::. + + `-c' + Check edits: Edit fails if someone else is already editting + the file. Requires a CVS client and server both of version + 1.12.10 or greater. + + `-f' + Force edit; ignore other edits. Added in CVS 1.12.10. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + +`editors [OPTIONS] [FILES...]' + See who is editing a watched file. See *Note Watch information::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + +`export [OPTIONS] MODULES...' + Export files from CVS. See *Note export::. + + `-D DATE' + Check out revisions as of DATE. See *Note Common options::. + + `-d DIR' + Check out into DIR. See *Note export options::. + + `-f' + Use head revision if tag/date not found. See *Note Common + options::. + + `-k KFLAG' + Use KFLAG keyword expansion. See *Note Substitution modes::. + + `-l' + Local; run only in current working directory. *Note + Recursive behavior::. + + `-N' + Don't "shorten" module paths if -d specified. See *Note + export options::. + + `-n' + Do not run module program (if any). See *Note export + options::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG[:DATE]' + Export the revisions specified by TAG or, when DATE is + specified and TAG is a branch tag, the version from the + branch TAG as it existed on DATE. See *Note Common options::. + +`history [OPTIONS] [FILES...]' + Show repository access history. See *Note history::. + + `-a' + All users (default is self). See *Note history options::. + + `-b STR' + Back to record with STR in module/file/repos field. See + *Note history options::. + + `-c' + Report on committed (modified) files. See *Note history + options::. + + `-D DATE' + Since DATE. See *Note history options::. + + `-e' + Report on all record types. See *Note history options::. + + `-l' + Last modified (committed or modified report). See *Note + history options::. + + `-m MODULE' + Report on MODULE (repeatable). See *Note history options::. + + `-n MODULE' + In MODULE. See *Note history options::. + + `-o' + Report on checked out modules. See *Note history options::. + + `-p REPOSITORY' + In REPOSITORY. See *Note history options::. + + `-r REV' + Since revision REV. See *Note history options::. + + `-T' + Produce report on all TAGs. See *Note history options::. + + `-t TAG' + Since tag record placed in history file (by anyone). See + *Note history options::. + + `-u USER' + For user USER (repeatable). See *Note history options::. + + `-w' + Working directory must match. See *Note history options::. + + `-x TYPES' + Report on TYPES, one or more of `TOEFWUPCGMAR'. See *Note + history options::. + + `-z ZONE' + Output for time zone ZONE. See *Note history options::. + +`import [OPTIONS] REPOSITORY VENDOR-TAG RELEASE-TAGS...' + Import files into CVS, using vendor branches. See *Note import::. + + `-b BRA' + Import to vendor branch BRA. See *Note Multiple vendor + branches::. + + `-d' + Use the file's modification time as the time of import. See + *Note import options::. + + `-k KFLAG' + Set default keyword substitution mode. See *Note import + options::. + + `-m MSG' + Use MSG for log message. See *Note import options::. + + `-I IGN' + More files to ignore (! to reset). See *Note import + options::. + + `-W SPEC' + More wrappers. See *Note import options::. + +`init' + Create a CVS repository if it doesn't exist. See *Note Creating a + repository::. + +`kserver' + Kerberos authenticated server. See *Note Kerberos authenticated::. + +`log [OPTIONS] [FILES...]' + Print out history information for files. See *Note log::. + + `-b' + Only list revisions on the default branch. See *Note log + options::. + + `-d DATES' + Specify dates (D1<D2 for range, D for latest before). See + *Note log options::. + + `-h' + Only print header. See *Note log options::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-N' + Do not list tags. See *Note log options::. + + `-R' + Only print name of RCS file. See *Note log options::. + + `-rREVS' + Only list revisions REVS. See *Note log options::. + + `-s STATES' + Only list revisions with specified states. See *Note log + options::. + + `-t' + Only print header and descriptive text. See *Note log + options::. + + `-wLOGINS' + Only list revisions checked in by specified logins. See + *Note log options::. + +`login' + Prompt for password for authenticating server. See *Note Password + authentication client::. + +`logout' + Remove stored password for authenticating server. See *Note + Password authentication client::. + +`pserver' + Password authenticated server. See *Note Password authentication + server::. + +`rannotate [OPTIONS] [MODULES...]' + Show last revision where each line was modified. See *Note + annotate::. + + `-D DATE' + Annotate the most recent revision no later than DATE. See + *Note Common options::. + + `-F' + Force annotation of binary files. (Without this option, + binary files are skipped with a message.) + + `-f' + Use head revision if tag/date not found. See *Note Common + options::. + + `-l' + Local; run only in current working directory. *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG[:DATE]' + Annotate the revision specified by TAG or, when DATE is + specified and TAG is a branch tag, the version from the + branch TAG as it existed on DATE. See *Note Common options::. + +`rdiff [OPTIONS] MODULES...' + Show differences between releases. See *Note rdiff::. + + `-c' + Context diff output format (default). See *Note rdiff + options::. + + `-D DATE' + Select revisions based on DATE. See *Note Common options::. + + `-f' + Use head revision if tag/date not found. See *Note Common + options::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG[:DATE]' + Select the revisions specified by TAG or, when DATE is + specified and TAG is a branch tag, the version from the + branch TAG as it existed on DATE. See *Note diff options:: + and *Note Common options::. + + `-s' + Short patch - one liner per file. See *Note rdiff options::. + + `-t' + Top two diffs - last change made to the file. See *Note diff + options::. + + `-u' + Unidiff output format. See *Note rdiff options::. + + `-V VERS' + Use RCS Version VERS for keyword expansion (obsolete). See + *Note rdiff options::. + +`release [OPTIONS] DIRECTORY' + Indicate that a directory is no longer in use. See *Note + release::. + + `-d' + Delete the given directory. See *Note release options::. + +`remove [OPTIONS] [FILES...]' + Remove an entry from the repository. See *Note Removing files::. + + `-f' + Delete the file before removing it. See *Note Removing + files::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + +`rlog [OPTIONS] [FILES...]' + Print out history information for modules. See *Note log::. + + `-b' + Only list revisions on the default branch. See *Note log + options::. + + `-d DATES' + Specify dates (D1<D2 for range, D for latest before). See + *Note log options::. + + `-h' + Only print header. See *Note log options::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-N' + Do not list tags. See *Note log options::. + + `-R' + Only print name of RCS file. See *Note log options::. + + `-rREVS' + Only list revisions REVS. See *Note log options::. + + `-s STATES' + Only list revisions with specified states. See *Note log + options::. + + `-t' + Only print header and descriptive text. See *Note log + options::. + + `-wLOGINS' + Only list revisions checked in by specified logins. See + *Note log options::. + +`rtag [OPTIONS] TAG MODULES...' + Add a symbolic tag to a module. See *Note Revisions:: and *Note + Branching and merging::. + + `-a' + Clear tag from removed files that would not otherwise be + tagged. See *Note Tagging add/remove::. + + `-b' + Create a branch named TAG. See *Note Branching and merging::. + + `-B' + Used in conjunction with -F or -d, enables movement and + deletion of branch tags. Use with extreme caution. + + `-D DATE' + Tag revisions as of DATE. See *Note Tagging by date/tag::. + + `-d' + Delete TAG. See *Note Modifying tags::. + + `-F' + Move TAG if it already exists. See *Note Modifying tags::. + + `-f' + Force a head revision match if tag/date not found. See *Note + Tagging by date/tag::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-n' + No execution of tag program. See *Note Common options::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG[:DATE]' + Tag the revision already tagged with TAG or, when DATE is + specified and TAG is a branch tag, the version from the + branch TAG as it existed on DATE. See *Note Tagging by + date/tag:: and *Note Common options::. + +`server' + Rsh server. See *Note Connecting via rsh::. + +`status [OPTIONS] FILES...' + Display status information in a working directory. See *Note File + status::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-v' + Include tag information for file. See *Note Tags::. + +`tag [OPTIONS] TAG [FILES...]' + Add a symbolic tag to checked out version of files. See *Note + Revisions:: and *Note Branching and merging::. + + `-b' + Create a branch named TAG. See *Note Branching and merging::. + + `-c' + Check that working files are unmodified. See *Note Tagging + the working directory::. + + `-D DATE' + Tag revisions as of DATE. See *Note Tagging by date/tag::. + + `-d' + Delete TAG. See *Note Modifying tags::. + + `-F' + Move TAG if it already exists. See *Note Modifying tags::. + + `-f' + Force a head revision match if tag/date not found. See *Note + Tagging by date/tag::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG[:DATE]' + Tag the revision already tagged with TAG, or when DATE is + specified and TAG is a branch tag, the version from the + branch TAG as it existed on DATE. See *Note Tagging by + date/tag:: and *Note Common options::. + +`unedit [OPTIONS] [FILES...]' + Undo an edit command. See *Note Editing files::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + +`update [OPTIONS] [FILES...]' + Bring work tree in sync with repository. See *Note update::. + + `-A' + Reset any sticky tags/date/options. See *Note Sticky tags:: + and *Note Keyword substitution::. + + `-C' + Overwrite locally modified files with clean copies from the + repository (the modified file is saved in `.#FILE.REVISION', + however). + + `-D DATE' + Check out revisions as of DATE (is sticky). See *Note Common + options::. + + `-d' + Create directories. See *Note update options::. + + `-f' + Use head revision if tag/date not found. See *Note Common + options::. + + `-I IGN' + More files to ignore (! to reset). See *Note import + options::. + + `-j TAG[:DATE]' + Merge in changes from revisions specified by TAG or, when + DATE is specified and TAG is a branch tag, the version from + the branch TAG as it existed on DATE. See *Note update + options::. + + `-k KFLAG' + Use KFLAG keyword expansion. See *Note Substitution modes::. + + `-l' + Local; run only in current working directory. *Note + Recursive behavior::. + + `-P' + Prune empty directories. See *Note Moving directories::. + + `-p' + Check out files to standard output (avoids stickiness). See + *Note update options::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + `-r TAG[:DATE]' + Checkout the revisions specified by TAG or, when DATE is + specified and TAG is a branch tag, the version from the + branch TAG as it existed on DATE. See *Note Common options::. + + `-W SPEC' + More wrappers. See *Note import options::. + +`version' + Display the version of CVS being used. If the repository is + remote, display both the client and server versions. + +`watch [on|off|add|remove] [OPTIONS] [FILES...]' + on/off: turn on/off read-only checkouts of files. See *Note + Setting a watch::. + + add/remove: add or remove notification on actions. See *Note + Getting Notified::. + + `-a ACTIONS' + Specify actions for temporary watch, where ACTIONS is `edit', + `unedit', `commit', `all', or `none'. See *Note Editing + files::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + +`watchers [OPTIONS] [FILES...]' + See who is watching a file. See *Note Watch information::. + + `-l' + Local; run only in current working directory. See *Note + Recursive behavior::. + + `-R' + Operate recursively (default). *Note Recursive behavior::. + + + +File: cvs.info, Node: Administrative files, Next: Environment variables, Prev: Invoking CVS, Up: Top + +Appendix C Reference manual for Administrative files +**************************************************** + +Inside the repository, in the directory `$CVSROOT/CVSROOT', there are a +number of supportive files for CVS. You can use CVS in a limited +fashion without any of them, but if they are set up properly they can +help make life easier. For a discussion of how to edit them, see *Note +Intro administrative files::. + + The most important of these files is the `modules' file, which +defines the modules inside the repository. + +* Menu: + +* modules:: Defining modules +* Wrappers:: Specify binary-ness based on file name +* Trigger Scripts:: Launch scripts in response to server events +* rcsinfo:: Templates for the log messages +* cvsignore:: Ignoring files via cvsignore +* checkoutlist:: Adding your own administrative files +* history file:: History information +* Variables:: Various variables are expanded +* config:: Miscellaneous CVS configuration + + +File: cvs.info, Node: modules, Next: Wrappers, Up: Administrative files + +C.1 The modules file +==================== + +The `modules' file records your definitions of names for collections of +source code. CVS will use these definitions if you use CVS to update +the modules file (use normal commands like `add', `commit', etc). + + The `modules' file may contain blank lines and comments (lines +beginning with `#') as well as module definitions. Long lines can be +continued on the next line by specifying a backslash (`\') as the last +character on the line. + + There are three basic types of modules: alias modules, regular +modules, and ampersand modules. The difference between them is the way +that they map files in the repository to files in the working +directory. In all of the following examples, the top-level repository +contains a directory called `first-dir', which contains two files, +`file1' and `file2', and a directory `sdir'. `first-dir/sdir' contains +a file `sfile'. + +* Menu: + +* Alias modules:: The simplest kind of module +* Regular modules:: +* Ampersand modules:: +* Excluding directories:: Excluding directories from a module +* Module options:: Regular and ampersand modules can take options +* Module program options:: How the modules ``program options'' programs + are run. + + +File: cvs.info, Node: Alias modules, Next: Regular modules, Up: modules + +C.1.1 Alias modules +------------------- + +Alias modules are the simplest kind of module: + +`MNAME -a ALIASES...' + This represents the simplest way of defining a module MNAME. The + `-a' flags the definition as a simple alias: CVS will treat any + use of MNAME (as a command argument) as if the list of names + ALIASES had been specified instead. ALIASES may contain either + other module names or paths. When you use paths in aliases, + `checkout' creates all intermediate directories in the working + directory, just as if the path had been specified explicitly in + the CVS arguments. + + For example, if the modules file contains: + + amodule -a first-dir + +then the following two commands are equivalent: + + $ cvs co amodule + $ cvs co first-dir + +and they each would provide output such as: + + cvs checkout: Updating first-dir + U first-dir/file1 + U first-dir/file2 + cvs checkout: Updating first-dir/sdir + U first-dir/sdir/sfile + + +File: cvs.info, Node: Regular modules, Next: Ampersand modules, Prev: Alias modules, Up: modules + +C.1.2 Regular modules +--------------------- + +`MNAME [ options ] DIR [ FILES... ]' + In the simplest case, this form of module definition reduces to + `MNAME DIR'. This defines all the files in directory DIR as + module mname. DIR is a relative path (from `$CVSROOT') to a + directory of source in the source repository. In this case, on + checkout, a single directory called MNAME is created as a working + directory; no intermediate directory levels are used by default, + even if DIR was a path involving several directory levels. + + For example, if a module is defined by: + + regmodule first-dir + +then regmodule will contain the files from first-dir: + + $ cvs co regmodule + cvs checkout: Updating regmodule + U regmodule/file1 + U regmodule/file2 + cvs checkout: Updating regmodule/sdir + U regmodule/sdir/sfile + $ + + By explicitly specifying files in the module definition after DIR, +you can select particular files from directory DIR. Here is an example: + + regfiles first-dir/sdir sfile + +With this definition, getting the regfiles module will create a single +working directory `regfiles' containing the file listed, which comes +from a directory deeper in the CVS source repository: + + $ cvs co regfiles + U regfiles/sfile + $ + + +File: cvs.info, Node: Ampersand modules, Next: Excluding directories, Prev: Regular modules, Up: modules + +C.1.3 Ampersand modules +----------------------- + +A module definition can refer to other modules by including `&MODULE' +in its definition. + MNAME [ options ] &MODULE... + + Then getting the module creates a subdirectory for each such module, +in the directory containing the module. For example, if modules +contains + + ampermod &first-dir + +then a checkout will create an `ampermod' directory which contains a +directory called `first-dir', which in turns contains all the +directories and files which live there. For example, the command + + $ cvs co ampermod + +will create the following files: + + ampermod/first-dir/file1 + ampermod/first-dir/file2 + ampermod/first-dir/sdir/sfile + + There is one quirk/bug: the messages that CVS prints omit the +`ampermod', and thus do not correctly display the location to which it +is checking out the files: + + $ cvs co ampermod + cvs checkout: Updating first-dir + U first-dir/file1 + U first-dir/file2 + cvs checkout: Updating first-dir/sdir + U first-dir/sdir/sfile + $ + + Do not rely on this buggy behavior; it may get fixed in a future +release of CVS. + + +File: cvs.info, Node: Excluding directories, Next: Module options, Prev: Ampersand modules, Up: modules + +C.1.4 Excluding directories +--------------------------- + +An alias module may exclude particular directories from other modules +by using an exclamation mark (`!') before the name of each directory to +be excluded. + + For example, if the modules file contains: + + exmodule -a !first-dir/sdir first-dir + +then checking out the module `exmodule' will check out everything in +`first-dir' except any files in the subdirectory `first-dir/sdir'. + + +File: cvs.info, Node: Module options, Next: Module program options, Prev: Excluding directories, Up: modules + +C.1.5 Module options +-------------------- + +Either regular modules or ampersand modules can contain options, which +supply additional information concerning the module. + +`-d NAME' + Name the working directory something other than the module name. + +`-e PROG' + Specify a program PROG to run whenever files in a module are + exported. PROG runs with a single argument, the module name. + +`-o PROG' + Specify a program PROG to run whenever files in a module are + checked out. PROG runs with a single argument, the module name. + See *Note Module program options:: for information on how PROG is + called. + +`-s STATUS' + Assign a status to the module. When the module file is printed + with `cvs checkout -s' the modules are sorted according to + primarily module status, and secondarily according to the module + name. This option has no other meaning. You can use this option + for several things besides status: for instance, list the person + that is responsible for this module. + +`-t PROG' + Specify a program PROG to run whenever files in a module are + tagged with `rtag'. PROG runs with two arguments: the module name + and the symbolic tag specified to `rtag'. It is not run when + `tag' is executed. Generally you will find that the `taginfo' + file is a better solution (*note taginfo::). + + You should also see *note Module program options:: about how the +"program options" programs are run. + + +File: cvs.info, Node: Module program options, Prev: Module options, Up: modules + +C.1.6 How the modules file "program options" programs are run +------------------------------------------------------------- + +For checkout, rtag, and export, the program is server-based, and as +such the following applies:- + + If using remote access methods (pserver, ext, etc.), CVS will +execute this program on the server from a temporary directory. The path +is searched for this program. + + If using "local access" (on a local or remote NFS file system, i.e. +repository set just to a path), the program will be executed from the +newly checked-out tree, if found there, or alternatively searched for +in the path if not. + + The programs are all run after the operation has effectively +completed. + + +File: cvs.info, Node: Wrappers, Next: Trigger Scripts, Prev: modules, Up: Administrative files + +C.2 The cvswrappers file +======================== + +Wrappers refers to a CVS feature which lets you control certain +settings based on the name of the file which is being operated on. The +settings are `-k' for binary files, and `-m' for nonmergeable text +files. + + The `-m' option specifies the merge methodology that should be used +when a non-binary file is updated. `MERGE' means the usual CVS +behavior: try to merge the files. `COPY' means that `cvs update' will +refuse to merge files, as it also does for files specified as binary +with `-kb' (but if the file is specified as binary, there is no need to +specify `-m 'COPY''). CVS will provide the user with the two versions +of the files, and require the user using mechanisms outside CVS, to +insert any necessary changes. + + *WARNING: do not use `COPY' with CVS 1.9 or earlier - such versions +of CVS will copy one version of your file over the other, wiping out +the previous contents.* The `-m' wrapper option only affects behavior +when merging is done on update; it does not affect how files are +stored. See *Note Binary files::, for more on binary files. + + The basic format of the file `cvswrappers' is: + + wildcard [option value][option value]... + + where option is one of + -m update methodology value: MERGE or COPY + -k keyword expansion value: expansion mode + + and value is a single-quote delimited value. + + For example, the following command imports a directory, treating +files whose name ends in `.exe' as binary: + + cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag + + +File: cvs.info, Node: Trigger Scripts, Next: rcsinfo, Prev: Wrappers, Up: Administrative files + +C.3 The Trigger Scripts +======================= + +Several of the administrative files support triggers, or the launching +external scripts or programs at specific times before or after +particular events, during the execution of CVS commands. These hooks +can be used to prevent certain actions, log them, and/or maintain +anything else you deem practical. + + All the trigger scripts are launched in a copy of the user sandbox +being committed, on the server, in client-server mode. In local mode, +the scripts are actually launched directly from the user sandbox +directory being committed. For most intents and purposes, the same +scripts can be run in both locations without alteration. + +* Menu: + +* syntax:: The common syntax +* Trigger Script Security:: Trigger script security + +* commit files:: The commit support files (commitinfo, + verifymsg, loginfo) +* commitinfo:: Pre-commit checking +* verifymsg:: How are log messages evaluated? +* loginfo:: Where should log messages be sent? + +* postadmin:: Logging admin commands +* taginfo:: Verifying/Logging tags +* posttag:: Logging tags +* postwatch:: Logging watch commands + +* preproxy:: Launch a script on a secondary server prior + to becoming a write proxy +* postproxy:: Launch a script on a secondary server after + completing proxy operations + + +File: cvs.info, Node: syntax, Next: Trigger Script Security, Up: Trigger Scripts + +C.3.1 The common syntax +----------------------- + +The administrative files such as `commitinfo', `loginfo', `rcsinfo', +`verifymsg', etc., all have a common format. The purpose of the files +are described later on. The common syntax is described here. + + Each line contains the following: + + * A regular expression or the literal string `DEFAULT'. Some script + hooks also support the literal string `ALL'. Other than the `ALL' + and `DEFAULT' keywords, this is a basic regular expression in the + syntax used by GNU emacs. See the descriptions of the individual + script hooks for information on whether the `ALL' keyword is + supported (*note Trigger Scripts::). + + * A whitespace separator--one or more spaces and/or tabs. + + * A file name or command-line template. + +Blank lines are ignored. Lines that start with the character `#' are +treated as comments. Long lines unfortunately can _not_ be broken in +two parts in any way. + + The first regular expression that matches the current directory name +in the repository or the first line containing `DEFAULT' in lieu of a +regular expression is used and all lines containing `ALL' is used for +the hooks which support the `ALL' keyword. The rest of the line is +used as a file name or command-line template as appropriate. See the +descriptions of the individual script hooks for information on whether +the `ALL' keyword is supported (*note Trigger Scripts::). + +_Note: The following information on format strings is valid as long as +the line `UseNewInfoFmtStrings=yes' appears in your repository's config +file (*note config::). Otherwise, default format strings may be +appended to the command line and the `loginfo' file, especially, can +exhibit slightly different behavior. For more information, *Note +Updating Commit Files::._ + + In the cases where the second segment of the matched line is a +command line template (e.g. `commitinfo', `loginfo', & `verifymsg'), +the command line template may contain format strings which will be +replaced with specific values before the script is run. + + Format strings can represent a single variable or one or more +attributes of a list variable. An example of a list variable would be +the list available to scripts hung on the loginfo hooks - the list of +files which were just committed. In the case of loginfo, three +attributes are available for each list item: file name, precommit +version, and postcommit version. + + Format strings consist of a `%' character followed by an optional +`{' (required in the multiple list attribute case), a single format +character representing a variable or a single attribute of list +elements or multiple format characters representing attributes of list +elements, and a closing `}' when the open bracket was present. + + _Flat format strings_, or single format characters which get replaced +with a single value, will generate a single argument to the called +script, regardless of whether the replacement variable contains white +space or other special characters. + + _List attributes_ will generate an argument for each attribute +requested for each list item. For example, `%{sVv}' in a `loginfo' +command template will generate three arguments (file name, precommit +version, postcommit version, ...) for each file committed. As in the +flat format string case, each attribute will be passed in as a single +argument regardless of whether it contains white space or other special +characters. + + `%%' will be replaced with a literal `%'. + + The format strings available to all script hooks are: + +c + The canonical name of the command being executed. For instance, + in the case of a hook run from `cvs up', CVS would replace `%c' + with the string `update' and, in the case of a hook run from `cvs + ci', CVS would replace `%c' with the string `commit'. + +n + The null, or empty, string. + +p + The name of the directory being operated on within the repository. + +r + The name of the repository (the path portion of `$CVSROOT'). + +R + On a server, the name of the referrer, if any. The referrer is + the CVSROOT the client reports it used to contact a server which + then referred it to this server. Should usually be set on a + primary server with a write proxy setup. + + Other format strings are file specific. See the docs on the +particular script hooks for more information (*note Trigger Scripts::). + + As an example, the following line in a `loginfo' file would match +only the directory `module' and any subdirectories of `module': + + ^module\(/\|$\) (echo; echo %p; echo %{sVv}; cat) >>$CVSROOT/CVSROOT/commitlog + + Using this same line and assuming a commit of new revisions 1.5.4.4 +and 1.27.4.1 based on old revisions 1.5.4.3 and 1.27, respectively, of +file1 and file2 in module, something like the following log message +should be appended to commitlog: + + + module + file1 1.5.4.3 1.5.4.4 file2 1.27 1.27.4.1 + Update of /cvsroot/module + In directory localhost.localdomain:/home/jrandom/work/module + + Modified Files: + file1 file2 + Log Message: + A log message. + + +File: cvs.info, Node: Trigger Script Security, Next: commit files, Prev: syntax, Up: Trigger Scripts + +C.3.2 Security and the Trigger Scripts +-------------------------------------- + +Security is a huge subject, and implementing a secure system is a +non-trivial task. This section will barely touch on all the issues +involved, but it is well to note that, as with any script you will be +allowing an untrusted user to run on your server, there are measures +you can take to help prevent your trigger scripts from being abused. + + For instance, since the CVS trigger scripts all run in a copy of the +user's sandbox on the server, a naively coded Perl trigger script which +attempts to use a Perl module that is not installed on the system can +be hijacked by any user with commit access who is checking in a file +with the correct name. Other scripting languages may be vulnerable to +similar hacks. + + One way to make a script more secure, at least with Perl, is to use +scripts which invoke the `-T', or "taint-check" switch on their `#!' +line. In the most basic terms, this causes Perl to avoid running code +that may have come from an external source. Please run the `perldoc +perlsec' command for more on Perl security. Again, other languages may +implement other security verification hooks which look more or less +like Perl's "taint-check" mechanism. + + +File: cvs.info, Node: commit files, Next: commitinfo, Prev: Trigger Script Security, Up: Trigger Scripts + +C.3.3 The commit support files +------------------------------ + +The `-i' flag in the `modules' file can be used to run a certain +program whenever files are committed (*note modules::). The files +described in this section provide other, more flexible, ways to run +programs whenever something is committed. + + There are three kinds of programs that can be run on commit. They +are specified in files in the repository, as described below. The +following table summarizes the file names and the purpose of the +corresponding programs. + +`commitinfo' + The program is responsible for checking that the commit is + allowed. If it exits with a non-zero exit status the commit will + be aborted. *Note commitinfo::. + +`verifymsg' + The specified program is used to evaluate the log message, and + possibly verify that it contains all required fields. This is + most useful in combination with the `rcsinfo' file, which can hold + a log message template (*note rcsinfo::). *Note verifymsg::. + +`loginfo' + The specified program is called when the commit is complete. It + receives the log message and some additional information and can + store the log message in a file, or mail it to appropriate + persons, or maybe post it to a local newsgroup, or... Your + imagination is the limit! *Note loginfo::. + +* Menu: + +* Updating Commit Files:: Updating legacy repositories to stop using + deprecated command line template formats + + +File: cvs.info, Node: Updating Commit Files, Up: commit files + +C.3.3.1 Updating legacy repositories to stop using deprecated command line template formats +........................................................................................... + +New repositories are created set to use the new format strings by +default, so if you are creating a new repository, you shouldn't have to +worry about this section. + + If you are attempting to maintain a legacy repository which was +making use of the `commitinfo', `editinfo', `verifymsg', `loginfo', +and/or `taginfo' script hooks, you should have no immediate problems +with using the current CVS executable, but your users will probably +start to see deprecation warnings. + + The reason for this is that all of the script hooks have been +updated to use a new command line parser that extensibly supports +multiple `loginfo' & `notify' style format strings (*note syntax::) and +this support is not completely compatible with the old style format +strings. + + The quick upgrade method is to stick a `1' after each format string +in your old `loginfo' file. For example: + + DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog + + would become: + + DEFAULT (echo ""; id; echo %1{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog + + If you were counting on the fact that only the first `%' in the line +was replaced as a format string, you may also have to double up any +further percent signs on the line. + + If you did this all at once and checked it in, everything should +still be running properly. + + Now add the following line to your config file (*note config::): + UseNewInfoFmtStrings=yes + + Everything should still be running properly, but your users will +probably start seeing new deprecation warnings. + + Dealing with the deprecation warnings now generated by `commitinfo', +`editinfo', `verifymsg', and `taginfo' should be easy. Simply specify +what are currently implicit arguments explicitly. This means appending +the following strings to each active command line template in each file: +`commitinfo' + ` %r/%p %s' + +`editinfo' + ` %l' + +`taginfo' + ` %t %o %p %{sv}' + +`verifymsg' + ` %l' + + If you don't desire that any of the newly available information be +passed to the scripts hanging off of these hooks, no further +modifications to these files should be necessary to insure current and +future compatibility with CVS's format strings. + + Fixing `loginfo' could be a little tougher. The old style `loginfo' +format strings caused a single space and comma separated argument to be +passed in in place of the format string. This is what will continue to +be generated due to the deprecated `1' you inserted into the format +strings. + + Since the new format separates each individual item and passes it +into the script as a separate argument (for a good reason - arguments +containing commas and/or white space are now parsable), to remove the +deprecated `1' from your `loginfo' command line templates, you will +most likely have to rewrite any scripts called by the hook to handle +the new argument format. + + Also note that the way `%' followed by unrecognized characters and by +`{}' was treated in past versions of CVS is not strictly adhered to as +there were bugs in the old versions. Specifically, `%{}' would eat the +next character and unrecognized strings resolved only to the empty +string, which was counter to what was stated in the documentation. +This version will do what the documentation said it should have (if you +were using only some combination of `%{sVv}', e.g. `%{sVv}', `%{sV}', or +`%v', you should have no troubles). + + On the bright side, you should have plenty of time to do this before +all support for the old format strings is removed from CVS, so you can +just put up with the deprecation warnings for awhile if you like. + + +File: cvs.info, Node: commitinfo, Next: verifymsg, Prev: commit files, Up: Trigger Scripts + +C.3.4 Commitinfo +---------------- + +The `commitinfo' file defines programs to execute whenever `cvs commit' +is about to execute. These programs are used for pre-commit checking +to verify that the modified, added and removed files are really ready +to be committed. This could be used, for instance, to verify that the +changed files conform to to your site's standards for coding practice. + + The `commitinfo' file has the standard form for script hooks (*note +Trigger Scripts::), where each line is a regular expression followed by +a command to execute. It supports only the DEFAULT keywords. + + In addition to the common format strings (*note syntax::), +`commitinfo' supports: + +{s} + a list of the names of files to be committed + + Currently, if no format strings are specified, a default string of ` +%r/%p %{s}' will be appended to the command line template before +replacement is performed, but this feature is deprecated. It is simply +in place so that legacy repositories will remain compatible with the +new CVS application. For information on updating, *note Updating +Commit Files::. + + The first line with a regular expression matching the directory +within the repository will be used. If the command returns a non-zero +exit status the commit will be aborted. + + The command will be run in the root of the workspace containing the +new versions of any files the user would like to modify (commit), _or +in a copy of the workspace on the server (*note Remote +repositories::)_. If a file is being removed, there will be no copy of +the file under the current directory. If a file is being added, there +will be no corresponding archive file in the repository unless the file +is being resurrected. + + Note that both the repository directory and the corresponding Attic +(*note Attic::) directory may need to be checked to locate the archive +file corresponding to any given file being committed. Much of the +information about the specific commit request being made, including the +destination branch, commit message, and command line options specified, +is not available to the command. + + +File: cvs.info, Node: verifymsg, Next: loginfo, Prev: commitinfo, Up: Trigger Scripts + +C.3.5 Verifying log messages +---------------------------- + +Once you have entered a log message, you can evaluate that message to +check for specific content, such as a bug ID. Use the `verifymsg' file +to specify a program that is used to verify the log message. This +program could be a simple script that checks that the entered message +contains the required fields. + + The `verifymsg' file is often most useful together with the +`rcsinfo' file, which can be used to specify a log message template +(*note rcsinfo::). + + The `verifymsg' file has the standard form for script hooks (*note +Trigger Scripts::), where each line is a regular expression followed by +a command to execute. It supports only the DEFAULT keywords. + + In addition to the common format strings (*note syntax::), +`verifymsg' supports: + +l + the full path to the file containing the log message to be verified + +{sV} + File attributes, where: + s + file name + + V + old version number (pre-checkin) + + Currently, if no format strings are specified, a default string of ` +%l' will be appended to the command line template before replacement is +performed, but this feature is deprecated. It is simply in place so +that legacy repositories will remain compatible with the new CVS +application. For information on updating, *note Updating Commit +Files::. + + One thing that should be noted is that the `ALL' keyword is not +supported. If more than one matching line is found, the first one is +used. This can be useful for specifying a default verification script +in a directory, and then overriding it in a subdirectory. + + If the verification script exits with a non-zero exit status, the +commit is aborted. + + In the default configuration, CVS allows the verification script to +change the log message. This is controlled via the RereadLogAfterVerify +CVSROOT/config option. + + When `RereadLogAfterVerify=always' or `RereadLogAfterVerify=stat', +the log message will either always be reread after the verification +script is run or reread only if the log message file status has changed. + + *Note config::, for more on CVSROOT/config options. + + It is NOT a good idea for a `verifymsg' script to interact directly +with the user in the various client/server methods. For the `pserver' +method, there is no protocol support for communicating between +`verifymsg' and the client on the remote end. For the `ext' and +`server' methods, it is possible for CVS to become confused by the +characters going along the same channel as the CVS protocol messages. +See *Note Remote repositories::, for more information on client/server +setups. In addition, at the time the `verifymsg' script runs, the CVS +server has locks in place in the repository. If control is returned to +the user here then other users may be stuck waiting for access to the +repository. + + This option can be useful if you find yourself using an rcstemplate +that needs to be modified to remove empty elements or to fill in +default values. It can also be useful if the rcstemplate has changed +in the repository and the CVS/Template was not updated, but is able to +be adapted to the new format by the verification script that is run by +`verifymsg'. + + An example of an update might be to change all occurrences of +'BugId:' to be 'DefectId:' (which can be useful if the rcstemplate has +recently been changed and there are still checked-out user trees with +cached copies in the CVS/Template file of the older version). + + Another example of an update might be to delete a line that contains +'BugID: none' from the log message after validation of that value as +being allowed is made. + +* Menu: + +* verifymsg example:: Verifymsg example + + +File: cvs.info, Node: verifymsg example, Up: verifymsg + +C.3.5.1 Verifying log messages +.............................. + +The following is a little silly example of a `verifymsg' file, together +with the corresponding `rcsinfo' file, the log message template and a +verification script. We begin with the log message template. We want +to always record a bug-id number on the first line of the log message. +The rest of log message is free text. The following template is found +in the file `/usr/cvssupport/tc.template'. + + BugId: + + The script `/usr/cvssupport/bugid.verify' is used to evaluate the +log message. + + #!/bin/sh + # + # bugid.verify filename + # + # Verify that the log message contains a valid bugid + # on the first line. + # + if sed 1q < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then + exit 0 + elif sed 1q < $1 | grep '^BugId:[ ]*none$' > /dev/null; then + # It is okay to allow commits with 'BugId: none', + # but do not put that text into the real log message. + grep -v '^BugId:[ ]*none$' > $1.rewrite + mv $1.rewrite $1 + exit 0 + else + echo "No BugId found." + exit 1 + fi + + The `verifymsg' file contains this line: + + ^tc /usr/cvssupport/bugid.verify %l + + The `rcsinfo' file contains this line: + + ^tc /usr/cvssupport/tc.template + + The `config' file contains this line: + + RereadLogAfterVerify=always + + +File: cvs.info, Node: loginfo, Next: postadmin, Prev: verifymsg, Up: Trigger Scripts + +C.3.6 Loginfo +------------- + +The `loginfo' file is used to control where log information is sent +after versioned changes are made to repository archive files and after +directories are added ot the repository. *Note posttag:: for how to +log tagging information and *Note postadmin:: for how to log changes +due to the `admin' command. + + The `loginfo' file has the standard form for script hooks (*note +Trigger Scripts::), where each line is a regular expression followed by +a command to execute. It supports the ALL and DEFAULT keywords. + + Any specified scripts are called: + +`commit' + Once per directory, immediately after a successfully completing + the commit of all files within that directory. + +`import' + Once per import, immediately after completion of all write + operations. + +`add' + Immediately after the successful `add' of a directory. + + Any script called via `loginfo' will be fed the log information on +its standard input. Note that the filter program *must* read *all* of +the log information from its standard input or CVS may fail with a +broken pipe signal. + + In addition to the common format strings (*note syntax::), `loginfo' +supports: + +{stVv} + File attributes, where: + s + file name + + T + tag name of destination, or the empty string when there is no + associated tag name (this usually means the trunk) + + V + old version number (pre-checkin) + + v + new version number (post-checkin) + + For example, some valid format strings are `%%', `%s', `%{s}', and +`%{stVv}'. + + Currently, if `UseNewInfoFmtStrings' is not set in the `config' +administration file (*note config::), the format strings will be +substituted as they were in past versions of CVS, but this feature is +deprecated. It is simply in place so that legacy repositories will +remain compatible with the new CVS application. For information on +updating, please see *Note Updating Commit Files::. + + As an example, if `/u/src/master/yoyodyne/tc' is the repository, `%p' +and `%{sVv}' are the format strings, and three files (ChangeLog, +Makefile, foo.c) were modified, the output might be: + + yoyodyne/tc ChangeLog 1.1 1.2 Makefile 1.3 1.4 foo.c 1.12 1.13 + + Note: when CVS is accessing a remote repository, `loginfo' will be +run on the _remote_ (i.e., server) side, not the client side (*note +Remote repositories::). + +* Menu: + +* loginfo example:: Loginfo example +* Keeping a checked out copy:: Updating a tree on every checkin + + +File: cvs.info, Node: loginfo example, Next: Keeping a checked out copy, Up: loginfo + +C.3.6.1 Loginfo example +....................... + +The following `loginfo' file, together with the tiny shell-script +below, appends all log messages to the file +`$CVSROOT/CVSROOT/commitlog', and any commits to the administrative +files (inside the `CVSROOT' directory) are also logged in +`/usr/adm/cvsroot-log'. Commits to the `prog1' directory are mailed to +ceder. + + ALL /usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER + ^CVSROOT\(/\|$\) /usr/local/bin/cvs-log /usr/adm/cvsroot-log $USER + ^prog1\(/\|$\) Mail -s "%p %s" ceder + + The shell-script `/usr/local/bin/cvs-log' looks like this: + + #!/bin/sh + (echo "------------------------------------------------------"; + echo -n "$2 "; + date; + echo; + cat) >> $1 + + +File: cvs.info, Node: Keeping a checked out copy, Prev: loginfo example, Up: loginfo + +C.3.6.2 Keeping a checked out copy +.................................. + +It is often useful to maintain a directory tree which contains files +which correspond to the latest version in the repository. For example, +other developers might want to refer to the latest sources without +having to check them out, or you might be maintaining a web site with +CVS and want every checkin to cause the files used by the web server to +be updated. + + The way to do this is by having loginfo invoke `cvs update'. Doing +so in the naive way will cause a problem with locks, so the `cvs update' +must be run in the background. Here is an example for unix (this +should all be on one line): + + ^cyclic-pages\(/\|$\) (date; cat; (sleep 2; cd /u/www/local-docs; + cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1 + + This will cause checkins to repository directory `cyclic-pages' and +its subdirectories to update the checked out tree in +`/u/www/local-docs'. + + +File: cvs.info, Node: postadmin, Next: taginfo, Prev: loginfo, Up: Trigger Scripts + +C.3.7 Logging admin commands +---------------------------- + +The `postadmin' file defines programs to execute after an `admin' +command modifies files. The `postadmin' file has the standard form for +script hooks (*note Trigger Scripts::), where each line is a regular +expression followed by a command to execute. It supports the ALL and +DEFAULT keywords. + + The `postadmin' file supports no format strings other than the common +ones (*note syntax::), + + +File: cvs.info, Node: taginfo, Next: posttag, Prev: postadmin, Up: Trigger Scripts + +C.3.8 Taginfo +------------- + +The `taginfo' file defines programs to execute when someone executes a +`tag' or `rtag' command. The `taginfo' file has the standard form for +script hooks (*note Trigger Scripts::), where each line is a regular +expression followed by a command to execute. It supports the ALL and +DEFAULT keywords. + + In addition to the common format strings (*note syntax::), `taginfo' +supports: + +b + tag type (`T' for branch, `N' for not-branch, or `?' for unknown, + as during delete operations) + +o + operation (`add' for `tag', `mov' for `tag -F', or `del' for `tag + -d') + +t + new tag name + +{sTVv} + file attributes, where: + s + file name + + T + tag name of destination, or the empty string when there is no + associated tag name (this usually means the trunk) + + V + old version number (for a move or delete operation) + + v + new version number (for an add or move operation) + + For example, some valid format strings are `%%', `%p', `%t', `%s', +`%{s}', and `%{sVv}'. + + Currently, if no format strings are specified, a default string of ` +%t %o %p %{sv}' will be appended to the command line template before +replacement is performed, but this feature is deprecated. It is simply +in place so that legacy repositories will remain compatible with the +new CVS application. For information on updating, *note Updating +Commit Files::. + + A non-zero exit of the filter program will cause the tag to be +aborted. + + Here is an example of using `taginfo' to log `tag' and `rtag' +commands. In the `taginfo' file put: + + ALL /usr/local/cvsroot/CVSROOT/loggit %t %b %o %p %{sVv} + +Where `/usr/local/cvsroot/CVSROOT/loggit' contains the following script: + + #!/bin/sh + echo "$@" >>/home/kingdon/cvsroot/CVSROOT/taglog + + +File: cvs.info, Node: posttag, Next: postwatch, Prev: taginfo, Up: Trigger Scripts + +C.3.9 Logging tags +------------------ + +The `posttag' file defines programs to execute after a `tag' or `rtag' +command modifies files. The `posttag' file has the standard form for +script hooks (*note Trigger Scripts::), where each line is a regular +expression followed by a command to execute. It supports the ALL and +DEFAULT keywords. + + The `posttag' admin file supports the same format strings as the +`taginfo' file (*note taginfo::), + + +File: cvs.info, Node: postwatch, Next: preproxy, Prev: posttag, Up: Trigger Scripts + +C.3.10 Logging watch commands +----------------------------- + +The `postwatch' file defines programs to execute after any command (for +instance, `watch', `edit', `unedit', or `commit') modifies any +`CVS/fileattr' file in the repository (*note Watches::). The +`postwatch' file has the standard form for script hooks (*note Trigger +Scripts::), where each line is a regular expression followed by a +command to execute. It supports the ALL and DEFAULT keywords. + + The `postwatch' file supports no format strings other than the common +ones (*note syntax::), but it is worth noting that the `%c' format +string may not be replaced as you might expect. Client runs of `edit' +and `unedit' can sometimes skip contacting the CVS server and cache the +notification of the file attribute change to be sent the next time the +client contacts the server for whatever other reason, + + +File: cvs.info, Node: preproxy, Next: postproxy, Prev: postwatch, Up: Trigger Scripts + +C.3.11 Launch a Script before Proxying +-------------------------------------- + +The `preproxy' file defines programs to execute after a secondary +server receives a write request from a client, just before it starts up +the primary server and becomes a write proxy. This hook could be used +to dial a modem, launch an SSH tunnel, establish a VPN, or anything +else that might be necessary to do before contacting the primary server. + + `preproxy' scripts are called once, at the time of the write +request, with the repository argument (if requested) set from the +topmost directory sent by the client. + + The `preproxy' file has the standard form for script hooks (*note +Trigger Scripts::), where each line is a regular expression followed by +a command to execute. It supports the ALL and DEFAULT keywords. + + In addition to the common format strings, the `preproxy' file +supports the following format string: + +P + the CVSROOT string which specifies the primary server + + +File: cvs.info, Node: postproxy, Prev: preproxy, Up: Trigger Scripts + +C.3.12 Launch a Script after Proxying +------------------------------------- + +The `postproxy' file defines programs to execute after a secondary +server notes that the connection to the primary server has shut down +and before it releases the client by shutting down the connection to +the client. This could hook could be used to disconnect a modem, an +SSH tunnel, a VPN, or anything else that might be necessary to do after +contacting the primary server. This hook should also be used to pull +updates from the primary server before allowing the client which did +the write to disconnect since otherwise the client's next read request +may generate error messages and fail upon encountering an out of date +repository on the secondary server. + + `postproxy' scripts are called once per directory. + + The `postproxy' file has the standard form for script hooks (*note +Trigger Scripts::), where each line is a regular expression followed by +a command to execute. It supports the ALL and DEFAULT keywords. + + In addition to the common format strings, the `postproxy' file +supports the following format string: + +P + the CVSROOT string which specifies the primary server + + +File: cvs.info, Node: rcsinfo, Next: cvsignore, Prev: Trigger Scripts, Up: Administrative files + +C.4 Rcsinfo +=========== + +The `rcsinfo' file can be used to specify a form to edit when filling +out the commit log. The `rcsinfo' file has a syntax similar to the +`verifymsg', `commitinfo' and `loginfo' files. *Note syntax::. Unlike +the other files the second part is _not_ a command-line template. +Instead, the part after the regular expression should be a full +pathname to a file containing the log message template. + + If the repository name does not match any of the regular expressions +in this file, the `DEFAULT' line is used, if it is specified. + + All occurrences of the name `ALL' appearing as a regular expression +are used in addition to the first matching regular expression or +`DEFAULT'. + + The log message template will be used as a default log message. If +you specify a log message with `cvs commit -m MESSAGE' or `cvs commit -f +FILE' that log message will override the template. + + *Note verifymsg::, for an example `rcsinfo' file. + + When CVS is accessing a remote repository, the contents of `rcsinfo' +at the time a directory is first checked out will specify a template. +This template will be updated on all `cvs update' commands. It will +also be added to new directories added with a `cvs add new-directory' +command. In versions of CVS prior to version 1.12, the `CVS/Template' +file was not updated. If the CVS server is at version 1.12 or higher an +older client may be used and the `CVS/Template' will be updated from +the server. + + +File: cvs.info, Node: cvsignore, Next: checkoutlist, Prev: rcsinfo, Up: Administrative files + +C.5 Ignoring files via cvsignore +================================ + +There are certain file names that frequently occur inside your working +copy, but that you don't want to put under CVS control. Examples are +all the object files that you get while you compile your sources. +Normally, when you run `cvs update', it prints a line for each file it +encounters that it doesn't know about (*note update output::). + + CVS has a list of files (or sh(1) file name patterns) that it should +ignore while running `update', `import' and `release'. This list is +constructed in the following way. + + * The list is initialized to include certain file name patterns: + names associated with CVS administration, or with other common + source control systems; common names for patch files, object files, + archive files, and editor backup files; and other names that are + usually artifacts of assorted utilities. Currently, the default + list of ignored file name patterns is: + + RCS SCCS CVS CVS.adm + RCSLOG cvslog.* + tags TAGS + .make.state .nse_depinfo + *~ #* .#* ,* _$* *$ + *.old *.bak *.BAK *.orig *.rej .del-* + *.a *.olb *.o *.obj *.so *.exe + *.Z *.elc *.ln + core + + * The per-repository list in `$CVSROOT/CVSROOT/cvsignore' is + appended to the list, if that file exists. + + * The per-user list in `.cvsignore' in your home directory is + appended to the list, if it exists. + + * Any entries in the environment variable `$CVSIGNORE' is appended + to the list. + + * Any `-I' options given to CVS is appended. + + * As CVS traverses through your directories, the contents of any + `.cvsignore' will be appended to the list. The patterns found in + `.cvsignore' are only valid for the directory that contains them, + not for any sub-directories. + + In any of the 5 places listed above, a single exclamation mark (`!') +clears the ignore list. This can be used if you want to store any file +which normally is ignored by CVS. + + Specifying `-I !' to `cvs import' will import everything, which is +generally what you want to do if you are importing files from a +pristine distribution or any other source which is known to not contain +any extraneous files. However, looking at the rules above you will see +there is a fly in the ointment; if the distribution contains any +`.cvsignore' files, then the patterns from those files will be +processed even if `-I !' is specified. The only workaround is to +remove the `.cvsignore' files in order to do the import. Because this +is awkward, in the future `-I !' might be modified to override +`.cvsignore' files in each directory. + + Note that the syntax of the ignore files consists of a series of +lines, each of which contains a space separated list of filenames. +This offers no clean way to specify filenames which contain spaces, but +you can use a workaround like `foo?bar' to match a file named `foo bar' +(it also matches `fooxbar' and the like). Also note that there is +currently no way to specify comments. + + +File: cvs.info, Node: checkoutlist, Next: history file, Prev: cvsignore, Up: Administrative files + +C.6 The checkoutlist file +========================= + +It may be helpful to use CVS to maintain your own files in the +`CVSROOT' directory. For example, suppose that you have a script +`logcommit.pl' which you run by including the following line in the +`commitinfo' administrative file: + + ALL $CVSROOT/CVSROOT/logcommit.pl %r/%p %s + + To maintain `logcommit.pl' with CVS you would add the following line +to the `checkoutlist' administrative file: + + logcommit.pl + + The format of `checkoutlist' is one line for each file that you want +to maintain using CVS, giving the name of the file, followed optionally +by more whitespace and any error message that should print if the file +cannot be checked out into CVSROOT after a commit: + + logcommit.pl Could not update CVSROOT/logcommit.pl. + + After setting up `checkoutlist' in this fashion, the files listed +there will function just like CVS's built-in administrative files. For +example, when checking in one of the files you should get a message +such as: + + cvs commit: Rebuilding administrative file database + +and the checked out copy in the `CVSROOT' directory should be updated. + + Note that listing `passwd' (*note Password authentication server::) +in `checkoutlist' is not recommended for security reasons. + + For information about keeping a checkout out copy in a more general +context than the one provided by `checkoutlist', see *Note Keeping a +checked out copy::. + + +File: cvs.info, Node: history file, Next: Variables, Prev: checkoutlist, Up: Administrative files + +C.7 The history file +==================== + +By default, the file `$CVSROOT/CVSROOT/history' is used to log +information for the `history' command (*note history::). This file +name may be changed with the `HistoryLogPath' and `HistorySearchPath' +config options (*note config::). + + The file format of the `history' file is documented only in comments +in the CVS source code, but generally programs should use the `cvs +history' command to access it anyway, in case the format changes with +future releases of CVS. + + +File: cvs.info, Node: Variables, Next: config, Prev: history file, Up: Administrative files + +C.8 Expansions in administrative files +====================================== + +Sometimes in writing an administrative file, you might want the file to +be able to know various things based on environment CVS is running in. +There are several mechanisms to do that. + + To find the home directory of the user running CVS (from the `HOME' +environment variable), use `~' followed by `/' or the end of the line. +Likewise for the home directory of USER, use `~USER'. These variables +are expanded on the server machine, and don't get any reasonable +expansion if pserver (*note Password authenticated::) is in use; +therefore user variables (see below) may be a better choice to +customize behavior based on the user running CVS. + + One may want to know about various pieces of information internal to +CVS. A CVS internal variable has the syntax `${VARIABLE}', where +VARIABLE starts with a letter and consists of alphanumeric characters +and `_'. If the character following VARIABLE is a non-alphanumeric +character other than `_', the `{' and `}' can be omitted. The CVS +internal variables are: + +`CVSROOT' + This is the absolute path to the current CVS root directory. + *Note Repository::, for a description of the various ways to + specify this, but note that the internal variable contains just + the directory and not any of the access method information. + +`RCSBIN' + In CVS 1.9.18 and older, this specified the directory where CVS + was looking for RCS programs. Because CVS no longer runs RCS + programs, specifying this internal variable is now an error. + +`CVSEDITOR' +`EDITOR' +`VISUAL' + These all expand to the same value, which is the editor that CVS + is using. *Note Global options::, for how to specify this. + +`USER' + Username of the user running CVS (on the CVS server machine). + When using pserver, this is the user specified in the repository + specification which need not be the same as the username the + server is running as (*note Password authentication server::). Do + not confuse this with the environment variable of the same name. + +`SESSIONID' + Unique Session ID of the CVS process. This is a random string of + printable characters of at least 16 characters length. Users + should assume that it may someday grow to at most 256 characters + in length. + +`COMMITID' + Unique Session ID of the CVS process. This is a random string of + printable characters of at least 16 characters length. Users + should assume that it may someday grow to at most 256 characters + in length. + + If you want to pass a value to the administrative files which the +user who is running CVS can specify, use a user variable. To expand a +user variable, the administrative file contains `${=VARIABLE}'. To set +a user variable, specify the global option `-s' to CVS, with argument +`VARIABLE=VALUE'. It may be particularly useful to specify this option +via `.cvsrc' (*note ~/.cvsrc::). + + For example, if you want the administrative file to refer to a test +directory you might create a user variable `TESTDIR'. Then if CVS is +invoked as + + cvs -s TESTDIR=/work/local/tests + +and the administrative file contains `sh ${=TESTDIR}/runtests', then +that string is expanded to `sh /work/local/tests/runtests'. + + All other strings containing `$' are reserved; there is no way to +quote a `$' character so that `$' represents itself. + + Environment variables passed to administrative files are: + +`CVS_USER' + The CVS-specific username provided by the user, if it can be + provided (currently just for the pserver access method), and to + the empty string otherwise. (`CVS_USER' and `USER' may differ + when `$CVSROOT/CVSROOT/passwd' is used to map CVS usernames to + system usernames.) + +`LOGNAME' + The username of the system user. + +`USER' + Same as `LOGNAME'. Do not confuse this with the internal variable + of the same name. + + +File: cvs.info, Node: config, Prev: Variables, Up: Administrative files + +C.9 The CVSROOT/config configuration file +========================================= + +Usually, the `config' file is found at `$CVSROOT/CVSROOT/config', but +this may be overridden on the `pserver' and `server' command lines +(*note server & pserver::). + + The administrative file `config' contains various miscellaneous +settings which affect the behavior of CVS. The syntax is slightly +different from the other administrative files. + + Leading white space on any line is ignored, though the syntax is +very strict and will reject spaces and tabs almost anywhere else. + + Empty lines, lines containing nothing but white space, and lines +which start with `#' (discounting any leading white space) are ignored. + + Other lines consist of the optional leading white space, a keyword, +`=', and a value. Please note again that this syntax is very strict. +Extraneous spaces or tabs, other than the leading white space, are not +permitted on these lines. + + As of CVS 1.12.13, lines of the form `[CVSROOT]' mark the subsequent +section of the config file as applying only to certain repositories. +Multiple `[CVSROOT]' lines without intervening `KEYWORD=VALUE' pairs +cause processing to fall through, processing subsequent keywords for +any root in the list. Finally, keywords and values which appear before +any `[CVSROOT]' lines are defaults, and may to apply to any repository. +For example, consider the following file: + + # Defaults + LogHistory=TMAR + + [/cvsroots/team1] + LockDir=/locks/team1 + + [/cvsroots/team2] + LockDir=/locks/team2 + + [/cvsroots/team3] + LockDir=/locks/team3 + + [/cvsroots/team4] + LockDir=/locks/team4 + + [/cvsroots/team3] + [/cvsroots/team4] + # Override logged commands for teams 3 & 4. + LogHistory=all + + This example file sets up separate lock directories for each +project, as well as a default set of logged commands overridden for the +example's team 3 & team 4. This syntax could be useful, for instance, +if you wished to share a single config file, for instance +`/etc/cvs.conf', among several repositories. + + Currently defined keywords are: + +`HistorySearchPath=PATTERN' + Request that CVS look for its history information in files matching + PATTERN, which is a standard UNIX file glob. If PATTERN matches + multiple files, all will be searched in lexicographically sorted + order. *Note history::, and *Note history file::, for more. + + If no value is supplied for this option, it defaults to + `$CVSROOT/CVSROOT/history'. + +`HistoryLogPath=PATH' + Control where CVS logs its history. If the file does not exist, + CVS will attempt to create it. Format strings, as available to + the GNU C `strftime' function and often the UNIX date command, and + the string $CVSROOT will be substituted in this path. For + example, consider the line: + + HistoryLogPath=$CVSROOT/CVSROOT/history/%Y-%m-%d + + This line would cause CVS to attempt to create its history file in + a subdirectory (`history') of the configuration directory + (`CVSROOT') with a name equal to the current date representation + in the ISO8601 format (for example, on May 11, 2005, CVS would + attempt to log its history under the repository root directory in + a file named `CVSROOT/history/2005-05-11'). *Note history::, and + *Note history file::, for more. + + If no value is supplied for this option, it defaults to + `$CVSROOT/CVSROOT/history'. + +`ImportNewFilesToVendorBranchOnly=VALUE' + Specify whether `cvs import' should always behave as if the `-X' + flag was specified on the command line. VALUE may be either `yes' + or `no'. If set to `yes', all uses of `cvs import' on the + repository will behave as if the `-X' flag was set. The default + value is `no'. + +`KeywordExpand=VALUE' + Specify `i' followed by a list of keywords to be expanded (for + example, `KeywordExpand=iMYCVS,Name,Date'), or `e' followed by a + list of keywords not to be expanded (for example, + `KeywordExpand=eCVSHeader'). For more on keyword expansion, see + *Note Configuring keyword expansion::. + +`LocalKeyword=VALUE' + Specify a local alias for a standard keyword. For example, + `LocalKeyword=MYCVS=CVSHeader'. For more on local keywords, see + *Note Keyword substitution::. + +`LockDir=DIRECTORY' + Put CVS lock files in DIRECTORY rather than directly in the + repository. This is useful if you want to let users read from the + repository while giving them write access only to DIRECTORY, not + to the repository. It can also be used to put the locks on a very + fast in-memory file system to speed up locking and unlocking the + repository. You need to create DIRECTORY, but CVS will create + subdirectories of DIRECTORY as it needs them. For information on + CVS locks, see *Note Concurrency::. + + Before enabling the LockDir option, make sure that you have + tracked down and removed any copies of CVS 1.9 or older. Such + versions neither support LockDir, nor will give an error + indicating that they don't support it. The result, if this is + allowed to happen, is that some CVS users will put the locks one + place, and others will put them another place, and therefore the + repository could become corrupted. CVS 1.10 does not support + LockDir but it will print a warning if run on a repository with + LockDir enabled. + +`LogHistory=VALUE' + Control what is logged to the `CVSROOT/history' file (*note + history::). Default of `TOEFWUPCGMAR' (or simply `all') will log + all transactions. Any subset of the default is legal. (For + example, to only log transactions that modify the `*,v' files, use + `LogHistory=TMAR'.) To disable history logging completely, use + `LogHistory='. + +`MaxCommentLeaderLength=LENGTH' + Set to some length, in bytes, where a trailing `k', `M', `G', or + `T' causes the preceding nubmer to be interpreted as kilobytes, + megabytes, gigabytes, or terrabytes, respectively, will cause + `$Log$' keywords (*note Keyword substitution::), with more than + LENGTH bytes preceding it on a line to be ignored (or to fall back + on the comment leader set in the RCS archive file - see + `UseArchiveCommentLeader' below). Defaults to 20 bytes to allow + checkouts to proceed normally when they include binary files + containing `$Log$' keywords and which users have neglected to mark + as binary. + +`MinCompressionLevel=VALUE' +`MaxCompressionLevel=VALUE' + Restricts the level of compression used by the CVS server to a + VALUE between 0 and 9. VALUEs 1 through 9 are the same ZLIB + compression levels accepted by the `-z' option (*note Global + options::), and 0 means no compression. When one or both of these + keys are set and a client requests a level outside the specified + range, the server will simply use the closest permissable level. + Clients will continue compressing at the level requested by the + user. + + The exception is when level 0 (no compression) is not available + and the client fails to request any compression. The CVS server + will then exit with an error message when it becomes apparent that + the client is not going to request compression. This will not + happen with clients version 1.12.13 and later since these client + versions allow the server to notify them that they must request + some level of compression. + +`PrimaryServer=CVSROOT' + When specified, and the repository specified by CVSROOT is not the + one currently being accessed, then the server will turn itself + into a transparent proxy to CVSROOT for write requests. The + HOSTNAME configured as part of CVSROOT must resolve to the same + string returned by the `uname' command on the primary server for + this to work. Host name resolution is performed via some + combination of `named', a broken out line from `/etc/hosts', and + the Network Information Service (NIS or YP), depending on the + configuration of the particular system. + + Only the `:ext:' method is currently supported for primaries + (actually, `:fork:' is supported as well, but only for testing - + if you find another use for accessing a primary via the `:fork:' + method, please send a note to <bug-cvs@nongnu.org> about it). See + *Note Write proxies:: for more on configuring and using write + proxies. + +`RCSBIN=BINDIR' + For CVS 1.9.12 through 1.9.18, this setting told CVS to look for + RCS programs in the BINDIR directory. Current versions of CVS do + not run RCS programs; for compatibility this setting is accepted, + but it does nothing. + +`RereadLogAfterVerify=VALUE' + Modify the `commit' command such that CVS will reread the log + message after running the program specified by `verifymsg'. VALUE + may be one of `yes' or `always', indicating that the log message + should always be reread; `no' or `never', indicating that it + should never be reread; or VALUE may be `stat', indicating that + the file should be checked with the file system `stat()' function + to see if it has changed (see warning below) before rereading. + The default value is `always'. + + *Note_ the `stat' mode can cause CVS to pause for up to one extra + second per directory committed. This can be less IO and CPU + intensive but is not recommended for use with large repositories* + + *Note verifymsg::, for more information on how verifymsg may be + used. + +`SystemAuth=VALUE' + If VALUE is `yes', then pserver should check for users in the + system's user database if not found in `CVSROOT/passwd'. If it is + `no', then all pserver users must exist in `CVSROOT/passwd'. The + default is `yes'. For more on pserver, see *Note Password + authenticated::. + +`TmpDir=PATH' + Specify PATH as the directory to create temporary files in. *Note + Global options::, for more on setting the path to the temporary + directory. This option first appeared with CVS release 1.12.13. + +`TopLevelAdmin=VALUE' + Modify the `checkout' command to create a `CVS' directory at the + top level of the new working directory, in addition to `CVS' + directories created within checked-out directories. The default + value is `no'. + + This option is useful if you find yourself performing many + commands at the top level of your working directory, rather than + in one of the checked out subdirectories. The `CVS' directory + created there will mean you don't have to specify `CVSROOT' for + each command. It also provides a place for the `CVS/Template' + file (*note Working directory storage::). + +`UseArchiveCommentLeader=VALUE' + Set to `true', if the text preceding a `$Log$' keyword is found to + exceed `MaxCommentLeaderLength' (above) bytes, then the comment + leader set in the RCS archive file (*note admin::), if any, will + be used instead. If there is no comment leader set in the archive + file or VALUE is set to `false', then the keyword will not be + expanded (*note Keyword list::). To force the comment leader in + the RCS archive file to be used exclusively (and `$Log$' expansion + skipped in files where the comment leader has not been set in the + archive file), set VALUE and set `MaxCommentLeaderLength' to `0'. + +`UseNewInfoFmtStrings=VALUE' + Specify whether CVS should support the new or old command line + template model for the commit support files (*note commit files::). + This configuration variable began life in deprecation and is only + here in order to give people time to update legacy repositories to + use the new format string syntax before support for the old syntax + is removed. For information on updating your repository to + support the new model, please see *Note Updating Commit Files::. + + _Note that new repositories (created with the `cvs init' command) + will have this value set to `yes', but the default value is `no'._ + +`UserAdminOptions=VALUE' + Control what options will be allowed with the `cvs admin' command + (*note admin::) for users not in the `cvsadmin' group. The VALUE + string is a list of single character options which should be + allowed. If a user who is not a member of the `cvsadmin' group + tries to execute any `cvs admin' option which is not listed they + will will receive an error message reporting that the option is + restricted. + + If no `cvsadmin' group exists on the server, CVS will ignore the + `UserAdminOptions' keyword (*note admin::). + + When not specified, `UserAdminOptions' defaults to `k'. In other + words, it defaults to allowing users outside of the `cvsadmin' + group to use the `cvs admin' command only to change the default + keyword expansion mode for files. + + As an example, to restrict users not in the `cvsadmin' group to + using `cvs admin' to change the default keyword substitution mode, + lock revisions, unlock revisions, and replace the log message, use + `UserAdminOptions=klum'. + + +File: cvs.info, Node: Environment variables, Next: Compatibility, Prev: Administrative files, Up: Top + +Appendix D All environment variables which affect CVS +***************************************************** + +This is a complete list of all environment variables that affect CVS +(Windows users, please bear with this list; $VAR is equivalent to %VAR% +at the Windows command prompt). + +`$CVSIGNORE' + A whitespace-separated list of file name patterns that CVS should + ignore. *Note cvsignore::. + +`$CVSWRAPPERS' + A whitespace-separated list of file name patterns that CVS should + treat as wrappers. *Note Wrappers::. + +`$CVSREAD' + If this is set, `checkout' and `update' will try hard to make the + files in your working directory read-only. When this is not set, + the default behavior is to permit modification of your working + files. + +`$CVSREADONLYFS' + Turns on read-only repository mode. This allows one to check out + from a read-only repository, such as within an anoncvs server, or + from a CD-ROM repository. + + It has the same effect as if the `-R' command-line option is used. + This can also allow the use of read-only NFS repositories. + +`$CVSUMASK' + Controls permissions of files in the repository. See *Note File + permissions::. + +`$CVSROOT' + Should contain the full pathname to the root of the CVS source + repository (where the RCS files are kept). This information must + be available to CVS for most commands to execute; if `$CVSROOT' is + not set, or if you wish to override it for one invocation, you can + supply it on the command line: `cvs -d cvsroot cvs_command...' + Once you have checked out a working directory, CVS stores the + appropriate root (in the file `CVS/Root'), so normally you only + need to worry about this when initially checking out a working + directory. + +`$CVSEDITOR' +`$EDITOR' +`$VISUAL' + Specifies the program to use for recording log messages during + commit. `$CVSEDITOR' overrides `$EDITOR', which overrides + `$VISUAL'. See *Note Committing your changes:: for more or *Note + Global options:: for alternative ways of specifying a log editor. + +`$PATH' + If `$RCSBIN' is not set, and no path is compiled into CVS, it will + use `$PATH' to try to find all programs it uses. + +`$HOME' + +`$HOMEPATH' + +`$HOMEDRIVE' + Used to locate the directory where the `.cvsrc' file, and other + such files, are searched. On Unix, CVS just checks for `HOME'. + On Windows NT, the system will set `HOMEDRIVE', for example to + `d:' and `HOMEPATH', for example to `\joe'. On Windows 95, you'll + probably need to set `HOMEDRIVE' and `HOMEPATH' yourself. + +`$CVS_RSH' + Specifies the external program which CVS connects with, when + `:ext:' access method is specified. *note Connecting via rsh::. + +`$CVS_SERVER' + Used in client-server mode when accessing a remote repository + using RSH. It specifies the name of the program to start on the + server side (and any necessary arguments) when accessing a remote + repository using the `:ext:', `:fork:', or `:server:' access + methods. The default value for `:ext:' and `:server:' is `cvs'; + the default value for `:fork:' is the name used to run the client. + *note Connecting via rsh:: + +`$CVS_PASSFILE' + Used in client-server mode when accessing the `cvs login server'. + Default value is `$HOME/.cvspass'. *note Password authentication + client:: + +`$CVS_CLIENT_PORT' + Used in client-server mode to set the port to use when accessing + the server via Kerberos, GSSAPI, or CVS's password authentication + protocol if the port is not specified in the CVSROOT. *note + Remote repositories:: + +`$CVS_PROXY_PORT' + Used in client-server mode to set the port to use when accessing a + server via a web proxy, if the port is not specified in the + CVSROOT. Works with GSSAPI, and the password authentication + protocol. *note Remote repositories:: + +`$CVS_RCMD_PORT' + Used in client-server mode. If set, specifies the port number to + be used when accessing the RCMD demon on the server side. + (Currently not used for Unix clients). + +`$CVS_CLIENT_LOG' + Used for debugging only in client-server mode. If set, everything + sent to the server is logged into ``$CVS_CLIENT_LOG'.in' and + everything sent from the server is logged into + ``$CVS_CLIENT_LOG'.out'. + +`$CVS_SERVER_SLEEP' + Used only for debugging the server side in client-server mode. If + set, delays the start of the server child process the specified + amount of seconds so that you can attach to it with a debugger. + +`$CVS_IGNORE_REMOTE_ROOT' + For CVS 1.10 and older, setting this variable prevents CVS from + overwriting the `CVS/Root' file when the `-d' global option is + specified. Later versions of CVS do not rewrite `CVS/Root', so + `CVS_IGNORE_REMOTE_ROOT' has no effect. + +`$CVS_LOCAL_BRANCH_NUM' + Setting this variable allows some control over the branch number + that is assigned. This is specifically to support the local commit + feature of CVSup. If one sets `CVS_LOCAL_BRANCH_NUM' to (say) 1000 + then branches the local repository, the revision numbers will look + like 1.66.1000.xx. There is almost a dead-set certainty that there + will be no conflicts with version numbers. + +`$COMSPEC' + Used under OS/2 only. It specifies the name of the command + interpreter and defaults to CMD.EXE. + +`$TMPDIR' + Directory in which temporary files are located. *Note Global + options::, for more on setting the temporary directory. + +`$CVS_PID' + This is the process identification (aka pid) number of the CVS + process. It is often useful in the programs and/or scripts + specified by the `commitinfo', `verifymsg', `loginfo' files. + + +File: cvs.info, Node: Compatibility, Next: Troubleshooting, Prev: Environment variables, Up: Top + +Appendix E Compatibility between CVS Versions +********************************************* + +The repository format is compatible going back to CVS 1.3. But see +*Note Watches Compatibility::, if you have copies of CVS 1.6 or older +and you want to use the optional developer communication features. + + The working directory format is compatible going back to CVS 1.5. +It did change between CVS 1.3 and CVS 1.5. If you run CVS 1.5 or newer +on a working directory checked out with CVS 1.3, CVS will convert it, +but to go back to CVS 1.3 you need to check out a new working directory +with CVS 1.3. + + The remote protocol is interoperable going back to CVS 1.5, but no +further (1.5 was the first official release with the remote protocol, +but some older versions might still be floating around). In many cases +you need to upgrade both the client and the server to take advantage of +new features and bug fixes, however. + + +File: cvs.info, Node: Troubleshooting, Next: Credits, Prev: Compatibility, Up: Top + +Appendix F Troubleshooting +************************** + +If you are having trouble with CVS, this appendix may help. If there +is a particular error message which you are seeing, then you can look +up the message alphabetically. If not, you can look through the +section on other problems to see if your problem is mentioned there. + +* Menu: + +* Error messages:: Partial list of CVS errors +* Connection:: Trouble making a connection to a CVS server +* Other problems:: Problems not readily listed by error message + + +File: cvs.info, Node: Error messages, Next: Connection, Up: Troubleshooting + +F.1 Partial list of error messages +================================== + +Here is a partial list of error messages that you may see from CVS. It +is not a complete list--CVS is capable of printing many, many error +messages, often with parts of them supplied by the operating system, +but the intention is to list the common and/or potentially confusing +error messages. + + The messages are alphabetical, but introductory text such as `cvs +update: ' is not considered in ordering them. + + In some cases the list includes messages printed by old versions of +CVS (partly because users may not be sure which version of CVS they are +using at any particular moment). + +`FILE:LINE: Assertion 'TEXT' failed' + The exact format of this message may vary depending on your + system. It indicates a bug in CVS, which can be handled as + described in *Note BUGS::. + +`cvs COMMAND: authorization failed: server HOST rejected access' + This is a generic response when trying to connect to a pserver + server which chooses not to provide a specific reason for denying + authorization. Check that the username and password specified are + correct and that the `CVSROOT' specified is allowed by + `--allow-root' in `inetd.conf'. See *Note Password + authenticated::. + +`cvs COMMAND: conflict: removed FILE was modified by second party' + This message indicates that you removed a file, and someone else + modified it. To resolve the conflict, first run `cvs add FILE'. + If desired, look at the other party's modification to decide + whether you still want to remove it. If you don't want to remove + it, stop here. If you do want to remove it, proceed with `cvs + remove FILE' and commit your removal. + +`cannot change permissions on temporary directory' + Operation not permitted + This message has been happening in a non-reproducible, occasional + way when we run the client/server testsuite, both on Red Hat Linux + 3.0.3 and 4.1. We haven't been able to figure out what causes it, + nor is it known whether it is specific to Linux (or even to this + particular machine!). If the problem does occur on other unices, + `Operation not permitted' would be likely to read `Not owner' or + whatever the system in question uses for the unix `EPERM' error. + If you have any information to add, please let us know as + described in *Note BUGS::. If you experience this error while + using CVS, retrying the operation which produced it should work + fine. + +`cvs [server aborted]: Cannot check out files into the repository itself' + The obvious cause for this message (especially for + non-client/server CVS) is that the CVS root is, for example, + `/usr/local/cvsroot' and you try to check out files when you are + in a subdirectory, such as `/usr/local/cvsroot/test'. However, + there is a more subtle cause, which is that the temporary + directory on the server is set to a subdirectory of the root + (which is also not allowed). If this is the problem, set the + temporary directory to somewhere else, for example `/var/tmp'; see + `TMPDIR' in *Note Environment variables::, for how to set the + temporary directory. + +`cannot commit files as 'root'' + See `'root' is not allowed to commit files'. + +`cannot open CVS/Entries for reading: No such file or directory' + This generally indicates a CVS internal error, and can be handled + as with other CVS bugs (*note BUGS::). Usually there is a + workaround--the exact nature of which would depend on the + situation but which hopefully could be figured out. + +`cvs [init aborted]: cannot open CVS/Root: No such file or directory' + This message is harmless. Provided it is not accompanied by other + errors, the operation has completed successfully. This message + should not occur with current versions of CVS, but it is documented + here for the benefit of CVS 1.9 and older. + +`cvs server: cannot open /root/.cvsignore: Permission denied' +`cvs [server aborted]: can't chdir(/root): Permission denied' + See *Note Connection::. + +`cvs [checkout aborted]: cannot rename file FILE to CVS/,,FILE: Invalid argument' + This message has been reported as intermittently happening with + CVS 1.9 on Solaris 2.5. The cause is unknown; if you know more + about what causes it, let us know as described in *Note BUGS::. + +`cvs [COMMAND aborted]: cannot start server via rcmd' + This, unfortunately, is a rather nonspecific error message which + CVS 1.9 will print if you are running the CVS client and it is + having trouble connecting to the server. Current versions of CVS + should print a much more specific error message. If you get this + message when you didn't mean to run the client at all, you + probably forgot to specify `:local:', as described in *Note + Repository::. + +`ci: FILE,v: bad diff output line: Binary files - and /tmp/T2a22651 differ' + CVS 1.9 and older will print this message when trying to check in + a binary file if RCS is not correctly installed. Re-read the + instructions that came with your RCS distribution and the INSTALL + file in the CVS distribution. Alternately, upgrade to a current + version of CVS, which checks in files itself rather than via RCS. + +`cvs checkout: could not check out FILE' + With CVS 1.9, this can mean that the `co' program (part of RCS) + returned a failure. It should be preceded by another error + message, however it has been observed without another error + message and the cause is not well-understood. With the current + version of CVS, which does not run `co', if this message occurs + without another error message, it is definitely a CVS bug (*note + BUGS::). + +`cvs [login aborted]: could not find out home directory' + This means that you need to set the environment variables that CVS + uses to locate your home directory. See the discussion of `HOME', + `HOMEDRIVE', and `HOMEPATH' in *Note Environment variables::. + +`cvs update: could not merge revision REV of FILE: No such file or directory' + CVS 1.9 and older will print this message if there was a problem + finding the `rcsmerge' program. Make sure that it is in your + `PATH', or upgrade to a current version of CVS, which does not + require an external `rcsmerge' program. + +`cvs [update aborted]: could not patch FILE: No such file or directory' + This means that there was a problem finding the `patch' program. + Make sure that it is in your `PATH'. Note that despite + appearances the message is _not_ referring to whether it can find + FILE. If both the client and the server are running a current + version of CVS, then there is no need for an external patch + program and you should not see this message. But if either client + or server is running CVS 1.9, then you need `patch'. + +`cvs update: could not patch FILE; will refetch' + This means that for whatever reason the client was unable to apply + a patch that the server sent. The message is nothing to be + concerned about, because inability to apply the patch only slows + things down and has no effect on what CVS does. + +`dying gasps from SERVER unexpected' + There is a known bug in the server for CVS 1.9.18 and older which + can cause this. For me, this was reproducible if I used the `-t' + global option. It was fixed by Andy Piper's 14 Nov 1997 change to + src/filesubr.c, if anyone is curious. If you see the message, you + probably can just retry the operation which failed, or if you have + discovered information concerning its cause, please let us know as + described in *Note BUGS::. + +`end of file from server (consult above messages if any)' + The most common cause for this message is if you are using an + external `rsh' program and it exited with an error. In this case + the `rsh' program should have printed a message, which will appear + before the above message. For more information on setting up a + CVS client and server, see *Note Remote repositories::. + +`cvs [update aborted]: EOF in key in RCS file FILE,v' +`cvs [checkout aborted]: EOF while looking for end of string in RCS file FILE,v' + This means that there is a syntax error in the given RCS file. + Note that this might be true even if RCS can read the file OK; CVS + does more error checking of errors in the RCS file. That is why + you may see this message when upgrading from CVS 1.9 to CVS 1.10. + The likely cause for the original corruption is hardware, the + operating system, or the like. Of course, if you find a case in + which CVS seems to corrupting the file, by all means report it, + (*note BUGS::). There are quite a few variations of this error + message, depending on exactly where in the RCS file CVS finds the + syntax error. + +`cvs commit: Executing 'mkmodules'' + This means that your repository is set up for a version of CVS + prior to CVS 1.8. When using CVS 1.8 or later, the above message + will be preceded by + + cvs commit: Rebuilding administrative file database + + If you see both messages, the database is being rebuilt twice, + which is unnecessary but harmless. If you wish to avoid the + duplication, and you have no versions of CVS 1.7 or earlier in + use, remove `-i mkmodules' every place it appears in your `modules' + file. For more information on the `modules' file, see *Note + modules::. + +`missing author' + Typically this can happen if you created an RCS file with your + username set to empty. CVS will, bogusly, create an illegal RCS + file with no value for the author field. The solution is to make + sure your username is set to a non-empty value and re-create the + RCS file. + +`cvs [checkout aborted]: no such tag TAG' + This message means that CVS isn't familiar with the tag TAG. + Usually the root cause is that you have mistyped a tag name. + Ocassionally this can also occur because the users creating tags + do not have permissions to write to the `CVSROOT/val-tags' file + (*note File permissions::, for more). + + Prior to CVS version 1.12.10, there were a few relatively obscure + cases where a given tag could be created in an archive file in the + repository but CVS would require the user to try a few other CVS + commands involving that tag until one was found whch caused CVS to + update the `val-tags' file, at which point the originally failing + command would begin to work. This same method can be used to + repair a `val-tags' file that becomes out of date due to the + permissions problem mentioned above. This updating is only + required once per tag - once a tag is listed in `val-tags', it + stays there. + + Note that using `tag -f' to not require tag matches did not and + does not override this check (*note Common options::). + +`*PANIC* administration files missing' + This typically means that there is a directory named CVS but it + does not contain the administrative files which CVS puts in a CVS + directory. If the problem is that you created a CVS directory via + some mechanism other than CVS, then the answer is simple, use a + name other than CVS. If not, it indicates a CVS bug (*note + BUGS::). + +`rcs error: Unknown option: -x,v/' + This message will be followed by a usage message for RCS. It + means that you have an old version of RCS (probably supplied with + your operating system), as well as an old version of CVS. CVS + 1.9.18 and earlier only work with RCS version 5 and later; current + versions of CVS do not run RCS programs. + +`cvs [server aborted]: received broken pipe signal' + This message can be caused by a loginfo program that fails to read + all of the log information from its standard input. If you find + it happening in any other circumstances, please let us know as + described in *Note BUGS::. + +`'root' is not allowed to commit files' + When committing a permanent change, CVS makes a log entry of who + committed the change. If you are committing the change logged in + as "root" (not under "su" or other root-priv giving program), CVS + cannot determine who is actually making the change. As such, by + default, CVS disallows changes to be committed by users logged in + as "root". (You can disable this option by passing the + `--enable-rootcommit' option to `configure' and recompiling CVS. + On some systems this means editing the appropriate `config.h' file + before building CVS.) + +`cvs [server aborted]: Secondary out of sync with primary!' + This usually means that the version of CVS running on a secondary + server is incompatible with the version running on the primary + server (*note Write proxies::). This will not occur if the client + supports redirection. + + It is not the version number that is significant here, but the + list of supported requests that the servers provide to the client. + For example, even if both servers were the same version, if the + secondary was compiled with GSSAPI support and the primary was not, + the list of supported requests provided by the two servers would + be different and the secondary would not work as a transparent + proxy to the primary. Conversely, even if the two servers were + radically different versions but both provided the same list of + valid requests to the client, the transparent proxy would succeed. + +`Terminated with fatal signal 11' + This message usually indicates that CVS (the server, if you're + using client/server mode) has run out of (virtual) memory. + Although CVS tries to catch the error and issue a more meaningful + message, there are many circumstances where that is not possible. + If you appear to have lots of memory available to the system, the + problem is most likely that you're running into a system-wide + limit on the amount of memory a single process can use or a + similar process-specific limit. The mechanisms for displaying and + setting such limits vary from system to system, so you'll have to + consult an expert for your particular system if you don't know how + to do that. + +`Too many arguments!' + This message is typically printed by the `log.pl' script which is + in the `contrib' directory in the CVS source distribution. In + some versions of CVS, `log.pl' has been part of the default CVS + installation. The `log.pl' script gets called from the `loginfo' + administrative file. Check that the arguments passed in `loginfo' + match what your version of `log.pl' expects. In particular, the + `log.pl' from CVS 1.3 and older expects the log file as an + argument whereas the `log.pl' from CVS 1.5 and newer expects the + log file to be specified with a `-f' option. Of course, if you + don't need `log.pl' you can just comment it out of `loginfo'. + +`cvs [update aborted]: unexpected EOF reading FILE,v' + See `EOF in key in RCS file'. + +`cvs [login aborted]: unrecognized auth response from SERVER' + This message typically means that the server is not set up + properly. For example, if `inetd.conf' points to a nonexistent + cvs executable. To debug it further, find the log file which + inetd writes (`/var/log/messages' or whatever inetd uses on your + system). For details, see *Note Connection::, and *Note Password + authentication server::. + +`cvs commit: Up-to-date check failed for `FILE'' + This means that someone else has committed a change to that file + since the last time that you did a `cvs update'. So before + proceeding with your `cvs commit' you need to `cvs update'. CVS + will merge the changes that you made and the changes that the + other person made. If it does not detect any conflicts it will + report `M FILE' and you are ready to `cvs commit'. If it detects + conflicts it will print a message saying so, will report `C FILE', + and you need to manually resolve the conflict. For more details + on this process see *Note Conflicts example::. + +`Usage: diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 file2 file3' + Only one of [exEX3] allowed + This indicates a problem with the installation of `diff3' and + `rcsmerge'. Specifically `rcsmerge' was compiled to look for GNU + diff3, but it is finding unix diff3 instead. The exact text of + the message will vary depending on the system. The simplest + solution is to upgrade to a current version of CVS, which does not + rely on external `rcsmerge' or `diff3' programs. + +`warning: unrecognized response `TEXT' from cvs server' + If TEXT contains a valid response (such as `ok') followed by an + extra carriage return character (on many systems this will cause + the second part of the message to overwrite the first part), then + it probably means that you are using the `:ext:' access method + with a version of rsh, such as most non-unix rsh versions, which + does not by default provide a transparent data stream. In such + cases you probably want to try `:server:' instead of `:ext:'. If + TEXT is something else, this may signify a problem with your CVS + server. Double-check your installation against the instructions + for setting up the CVS server. + +`cvs commit: [TIME] waiting for USER's lock in DIRECTORY' + This is a normal message, not an error. See *Note Concurrency::, + for more details. + +`cvs commit: warning: editor session failed' + This means that the editor which CVS is using exits with a nonzero + exit status. Some versions of vi will do this even when there was + not a problem editing the file. If so, point the `CVSEDITOR' + environment variable to a small script such as: + + #!/bin/sh + vi $* + exit 0 + +`cvs update: warning: FILE was lost' + This means that the working copy of FILE has been deleted but it + has not been removed from CVS. This is nothing to be concerned + about, the update will just recreate the local file from the + repository. (This is a convenient way to discard local changes to + a file: just delete it and then run `cvs update'.) + +`cvs update: warning: FILE is not (any longer) pertinent' + This means that the working copy of FILE has been deleted, it has + not been removed from CVS in the current working directory, but it + has been removed from CVS in some other working directory. This + is nothing to be concerned about, the update would have removed + the local file anyway. + + + +File: cvs.info, Node: Connection, Next: Other problems, Prev: Error messages, Up: Troubleshooting + +F.2 Trouble making a connection to a CVS server +=============================================== + +This section concerns what to do if you are having trouble making a +connection to a CVS server. If you are running the CVS command line +client running on Windows, first upgrade the client to CVS 1.9.12 or +later. The error reporting in earlier versions provided much less +information about what the problem was. If the client is non-Windows, +CVS 1.9 should be fine. + + If the error messages are not sufficient to track down the problem, +the next steps depend largely on which access method you are using. + +`:ext:' + Try running the rsh program from the command line. For example: + "rsh servername cvs -v" should print CVS version information. If + this doesn't work, you need to fix it before you can worry about + CVS problems. + +`:server:' + You don't need a command line rsh program to use this access + method, but if you have an rsh program around, it may be useful as + a debugging tool. Follow the directions given for :ext:. + +`:pserver:' + Errors along the lines of "connection refused" typically indicate + that inetd isn't even listening for connections on port 2401 + whereas errors like "connection reset by peer", "received broken + pipe signal", "recv() from server: EOF", or "end of file from + server" typically indicate that inetd is listening for connections + but is unable to start CVS (this is frequently caused by having an + incorrect path in `inetd.conf' or by firewall software rejecting + the connection). "unrecognized auth response" errors are caused + by a bad command line in `inetd.conf', typically an invalid option + or forgetting to put the `pserver' command at the end of the line. + Another less common problem is invisible control characters that + your editor "helpfully" added without you noticing. + + One good debugging tool is to "telnet servername 2401". After + connecting, send any text (for example "foo" followed by return). + If CVS is working correctly, it will respond with + + cvs [pserver aborted]: bad auth protocol start: foo + + If instead you get: + + Usage: cvs [cvs-options] command [command-options-and-arguments] + ... + + then you're missing the `pserver' command at the end of the line + in `inetd.conf'; check to make sure that the entire command is on + one line and that it's complete. + + Likewise, if you get something like: + + Unknown command: `pserved' + + CVS commands are: + add Add a new file/directory to the repository + ... + + then you've misspelled `pserver' in some way. If it isn't + obvious, check for invisible control characters (particularly + carriage returns) in `inetd.conf'. + + If it fails to work at all, then make sure inetd is working right. + Change the invocation in `inetd.conf' to run the echo program + instead of cvs. For example: + + 2401 stream tcp nowait root /bin/echo echo hello + + After making that change and instructing inetd to re-read its + configuration file, "telnet servername 2401" should show you the + text hello and then the server should close the connection. If + this doesn't work, you need to fix it before you can worry about + CVS problems. + + On AIX systems, the system will often have its own program trying + to use port 2401. This is AIX's problem in the sense that port + 2401 is registered for use with CVS. I hear that there is an AIX + patch available to address this problem. + + Another good debugging tool is the `-d' (debugging) option to + inetd. Consult your system documentation for more information. + + If you seem to be connecting but get errors like: + + cvs server: cannot open /root/.cvsignore: Permission denied + cvs [server aborted]: can't chdir(/root): Permission denied + + then you probably haven't specified `-f' in `inetd.conf'. (In + releases prior to CVS 1.11.1, this problem can be caused by your + system setting the `$HOME' environment variable for programs being + run by inetd. In this case, you can either have inetd run a shell + script that unsets `$HOME' and then runs CVS, or you can use `env' + to run CVS with a pristine environment.) + + If you can connect successfully for a while but then can't, you've + probably hit inetd's rate limit. (If inetd receives too many + requests for the same service in a short period of time, it + assumes that something is wrong and temporarily disables the + service.) Check your inetd documentation to find out how to + adjust the rate limit (some versions of inetd have a single rate + limit, others allow you to set the limit for each service + separately.) + + +File: cvs.info, Node: Other problems, Prev: Connection, Up: Troubleshooting + +F.3 Other common problems +========================= + +Here is a list of problems which do not fit into the above categories. +They are in no particular order. + + * On Windows, if there is a 30 second or so delay when you run a CVS + command, it may mean that you have your home directory set to + `C:/', for example (see `HOMEDRIVE' and `HOMEPATH' in *Note + Environment variables::). CVS expects the home directory to not + end in a slash, for example `C:' or `C:\cvs'. + + * If you are running CVS 1.9.18 or older, and `cvs update' finds a + conflict and tries to merge, as described in *Note Conflicts + example::, but doesn't tell you there were conflicts, then you may + have an old version of RCS. The easiest solution probably is to + upgrade to a current version of CVS, which does not rely on + external RCS programs. + + +File: cvs.info, Node: Credits, Next: BUGS, Prev: Troubleshooting, Up: Top + +Appendix G Credits +****************** + +Roland Pesch, then of Cygnus Support <roland@wrs.com> wrote the manual +pages which were distributed with CVS 1.3. Much of their text was +copied into this manual. He also read an early draft of this manual +and contributed many ideas and corrections. + + The mailing-list `info-cvs' is sometimes informative. I have +included information from postings made by the following persons: David +G. Grubbs <dgg@think.com>. + + Some text has been extracted from the man pages for RCS. + + The CVS FAQ by David G. Grubbs has provided useful material. The +FAQ is no longer maintained, however, and this manual is about the +closest thing there is to a successor (with respect to documenting how +to use CVS, at least). + + In addition, the following persons have helped by telling me about +mistakes I've made: + + Roxanne Brunskill <rbrunski@datap.ca>, + Kathy Dyer <dyer@phoenix.ocf.llnl.gov>, + Karl Pingle <pingle@acuson.com>, + Thomas A Peterson <tap@src.honeywell.com>, + Inge Wallin <ingwa@signum.se>, + Dirk Koschuetzki <koschuet@fmi.uni-passau.de> + and Michael Brown <brown@wi.extrel.com>. + + The list of contributors here is not comprehensive; for a more +complete list of who has contributed to this manual see the file +`doc/ChangeLog' in the CVS source distribution. + + +File: cvs.info, Node: BUGS, Next: Index, Prev: Credits, Up: Top + +Appendix H Dealing with bugs in CVS or this manual +************************************************** + +Neither CVS nor this manual is perfect, and they probably never will +be. If you are having trouble using CVS, or think you have found a +bug, there are a number of things you can do about it. Note that if +the manual is unclear, that can be considered a bug in the manual, so +these problems are often worth doing something about as well as +problems with CVS itself. + + * If you want someone to help you and fix bugs that you report, + there are companies which will do that for a fee. One such + company is: + + Ximbiot + 319 S. River St. + Harrisburg, PA 17104-1657 + USA + Email: info@ximbiot.com + Phone: (717) 579-6168 + Fax: (717) 234-3125 + `http://ximbiot.com/' + + * If you got CVS through a distributor, such as an operating system + vendor or a vendor of freeware CD-ROMs, you may wish to see + whether the distributor provides support. Often, they will provide + no support or minimal support, but this may vary from distributor + to distributor. + + * If you have the skills and time to do so, you may wish to fix the + bug yourself. If you wish to submit your fix for inclusion in + future releases of CVS, see the file HACKING in the CVS source + distribution. It contains much more information on the process of + submitting fixes. + + * There may be resources on the net which can help. A good place to + start is: + + `http://cvs.nongnu.org/' + + If you are so inspired, increasing the information available on + the net is likely to be appreciated. For example, before the + standard CVS distribution worked on Windows 95, there was a web + page with some explanation and patches for running CVS on Windows + 95, and various people helped out by mentioning this page on + mailing lists or newsgroups when the subject came up. + + * It is also possible to report bugs to <bug-cvs@nongnu.org>. Note + that someone may or may not want to do anything with your bug + report--if you need a solution consider one of the options + mentioned above. People probably do want to hear about bugs which + are particularly severe in consequences and/or easy to fix, + however. You can also increase your odds by being as clear as + possible about the exact nature of the bug and any other relevant + information. The way to report bugs is to send email to + <bug-cvs@nongnu.org>. Note that submissions to + <bug-cvs@nongnu.org> may be distributed under the terms of the GNU + Public License, so if you don't like this, don't submit them. + There is usually no justification for sending mail directly to one + of the CVS maintainers rather than to <bug-cvs@nongnu.org>; those + maintainers who want to hear about such bug reports read + <bug-cvs@nongnu.org>. Also note that sending a bug report to + other mailing lists or newsgroups is _not_ a substitute for + sending it to <bug-cvs@nongnu.org>. It is fine to discuss CVS + bugs on whatever forum you prefer, but there are not necessarily + any maintainers reading bug reports sent anywhere except + <bug-cvs@nongnu.org>. + + People often ask if there is a list of known bugs or whether a +particular bug is a known one. The file BUGS in the CVS source +distribution is one list of known bugs, but it doesn't necessarily try +to be comprehensive. Perhaps there will never be a comprehensive, +detailed list of known bugs. + + +File: cvs.info, Node: Index, Prev: BUGS, Up: Top + +Index +***** + + +* Menu: + +* !, in modules file: Excluding directories. + (line 6) +* #cvs.lock, removing: Concurrency. (line 11) +* #cvs.lock, technical details: Locks. (line 6) +* #cvs.pfl, technical details: Locks. (line 6) +* #cvs.rfl, and backups: Backing up. (line 10) +* #cvs.rfl, removing: Concurrency. (line 11) +* #cvs.rfl, technical details: Locks. (line 6) +* #cvs.tfl: Locks. (line 14) +* #cvs.wfl, removing: Concurrency. (line 11) +* #cvs.wfl, technical details: Locks. (line 6) +* &, in modules file: Ampersand modules. (line 6) +* -a, in modules file: Alias modules. (line 6) +* -d, in modules file: Module options. (line 9) +* -e, in modules file <1>: Module program options. + (line 6) +* -e, in modules file: Module options. (line 12) +* -j (merging branches): Merging a branch. (line 6) +* -j (merging branches), and keyword substitution: Merging and keywords. + (line 6) +* -k (keyword substitution): Substitution modes. (line 6) +* -kk, to avoid conflicts during a merge: Merging and keywords. + (line 6) +* -o, in modules file <1>: Module program options. + (line 6) +* -o, in modules file: Module options. (line 16) +* -s, in modules file: Module options. (line 22) +* -t, in modules file <1>: Module program options. + (line 6) +* -t, in modules file: Module options. (line 30) +* .# files: update output. (line 49) +* .bashrc, setting CVSROOT in: Specifying a repository. + (line 12) +* .cshrc, setting CVSROOT in: Specifying a repository. + (line 12) +* .cvsrc file: ~/.cvsrc. (line 6) +* .profile, setting CVSROOT in: Specifying a repository. + (line 12) +* .tcshrc, setting CVSROOT in: Specifying a repository. + (line 12) +* /usr/local/cvsroot, as example repository: Repository. (line 6) +* :ext:, setting up: Connecting via rsh. (line 35) +* :ext:, troubleshooting: Connection. (line 16) +* :fork:, setting up: Connecting via fork. (line 6) +* :gserver:, setting up: GSSAPI authenticated. + (line 6) +* :kserver:, setting up: Kerberos authenticated. + (line 6) +* :local:, setting up: Repository. (line 19) +* :pserver:, setting up: Password authentication client. + (line 6) +* :pserver:, troubleshooting: Connection. (line 27) +* :server:, setting up: Connecting via rsh. (line 35) +* :server:, troubleshooting: Connection. (line 22) +* <<<<<<<: Conflicts example. (line 96) +* =======: Conflicts example. (line 96) +* >>>>>>>: Conflicts example. (line 96) +* __ files (VMS): update output. (line 49) +* Abandoning work: Editing files. (line 42) +* abbreviations for months: Calendar date items. (line 38) +* Access a branch: Accessing branches. (line 6) +* add (subcommand): Adding files. (line 34) +* Adding a tag: Tags. (line 45) +* Adding files: Adding files. (line 6) +* Admin (subcommand): admin. (line 6) +* Admin commands, logging: postadmin. (line 6) +* Administrative files (intro): Intro administrative files. + (line 6) +* Administrative files (reference): Administrative files. + (line 6) +* Administrative files, editing them: Intro administrative files. + (line 33) +* Alias modules: Alias modules. (line 6) +* ALL keyword, in lieu of regular expressions in script hooks: syntax. + (line 12) +* Ampersand modules: Ampersand modules. (line 6) +* annotate (subcommand): annotate. (line 6) +* Atomic transactions, lack of: Concurrency. (line 27) +* Attic: Attic. (line 6) +* Authenticated client, using: Password authentication client. + (line 6) +* Authenticating server, setting up: Password authentication server. + (line 10) +* Authentication, stream: Global options. (line 16) +* Author keyword: Keyword list. (line 8) +* authors of get_date: Authors of get_date. (line 6) +* Automatically ignored files: cvsignore. (line 23) +* Avoiding editor invocation: Common options. (line 86) +* Backing up, repository: Backing up. (line 6) +* Base directory, in CVS directory: Working directory storage. + (line 178) +* BASE, as reserved tag name: Tags. (line 25) +* BASE, special tag: Common options. (line 122) +* Baserev file, in CVS directory: Working directory storage. + (line 184) +* Baserev.tmp file, in CVS directory: Working directory storage. + (line 192) +* beginning of time, for POSIX: Seconds since the Epoch. + (line 13) +* Bellovin, Steven M.: Authors of get_date. (line 6) +* Berets, Jim: Authors of get_date. (line 6) +* Berry, K.: Authors of get_date. (line 14) +* Bill of materials: Builds. (line 25) +* Binary files: Binary files. (line 6) +* Branch merge example: Merging a branch. (line 15) +* Branch number <1>: Branches and revisions. + (line 6) +* Branch number: Revision numbers. (line 6) +* Branch tags, deleting: Modifying tags. (line 19) +* Branch tags, moving: Modifying tags. (line 37) +* Branch, accessing: Accessing branches. (line 6) +* Branch, check out: Accessing branches. (line 6) +* Branch, creating a: Creating a branch. (line 6) +* Branch, identifying: Accessing branches. (line 6) +* Branch, retrieving: Accessing branches. (line 6) +* Branch, vendor-: Tracking sources. (line 10) +* Branches motivation: Branches motivation. (line 6) +* Branches, copying changes between: Branching and merging. + (line 6) +* Branches, sticky: Accessing branches. (line 37) +* Branching: Branching and merging. + (line 6) +* Bringing a file up to date: Updating a file. (line 6) +* Bugs in this manual or CVS: BUGS. (line 6) +* Bugs, reporting: BUGS. (line 13) +* Builds: Builds. (line 6) +* calendar date item: Calendar date items. (line 6) +* case, ignored in dates: General date syntax. (line 64) +* Changes, copying between branches: Branching and merging. + (line 6) +* Changing a log message: admin options. (line 73) +* Check out a branch: Accessing branches. (line 6) +* Checked out copy, keeping: Keeping a checked out copy. + (line 6) +* Checking out source: Getting the source. (line 6) +* checkout (subcommand): checkout. (line 6) +* Checkout program: Module options. (line 16) +* Checkout, as term for getting ready to edit: Editing files. (line 6) +* Checkout, example: Getting the source. (line 6) +* checkoutlist: checkoutlist. (line 6) +* Choosing, reserved or unreserved checkouts: Choosing a model. + (line 6) +* Cleaning up: Cleaning up. (line 6) +* Client/Server Operation: Remote repositories. (line 6) +* Client/Server Operation, port specification <1>: Password authentication server. + (line 10) +* Client/Server Operation, port specification: Remote repositories. + (line 6) +* co (subcommand): checkout. (line 6) +* Command reference: Invoking CVS. (line 6) +* Command structure: Structure. (line 6) +* Comment leader: admin options. (line 27) +* comments, in dates: General date syntax. (line 64) +* commit (subcommand): commit. (line 6) +* commit files, see Info files: commit files. (line 6) +* COMMITID, internal variable: Variables. (line 50) +* commitinfo: commitinfo. (line 6) +* commitinfo (admin file): commitinfo. (line 6) +* commitinfo (admin file), exit status: commitinfo. (line 29) +* commitinfo (admin file), updating legacy repositories: commitinfo. + (line 22) +* commitinfo, command environment: commitinfo. (line 33) +* commitinfo, working directory: commitinfo. (line 33) +* Commits, administrative support files: commit files. (line 6) +* Commits, precommit verification of: commitinfo. (line 6) +* Committing changes to files: Committing your changes. + (line 6) +* Committing, when to: When to commit. (line 6) +* Common options: Common options. (line 6) +* Common syntax of info files, format strings: syntax. (line 35) +* Common syntax of info files, updating legacy repositories: Updating Commit Files. + (line 6) +* compatibility notes, commitinfo admin file: commitinfo. (line 22) +* compatibility notes, config admin file: config. (line 245) +* compatibility notes, loginfo admin file: loginfo. (line 55) +* compatibility notes, taginfo admin file: taginfo. (line 44) +* compatibility notes, verifymsg admin file: verifymsg. (line 34) +* Compatibility, between CVS versions: Compatibility. (line 6) +* Compression <1>: Invoking CVS. (line 75) +* Compression: Global options. (line 140) +* Compression levels, restricting on server: config. (line 149) +* COMSPEC, environment variable: Environment variables. + (line 130) +* config (admin file), import: config. (line 90) +* config (admin file), updating legacy repositories: config. (line 245) +* config, in CVSROOT: config. (line 6) +* configuration file <1>: config. (line 6) +* configuration file: server & pserver. (line 26) +* Configuring keyword expansion: Configuring keyword expansion. + (line 6) +* Conflict markers: Conflicts example. (line 96) +* Conflict resolution: Conflicts example. (line 101) +* Conflicts (merge example): Conflicts example. (line 68) +* connection method options: The connection method. + (line 16) +* Contributors (CVS program): What is CVS?. (line 28) +* Contributors (manual): Credits. (line 6) +* Copying a repository: Moving a repository. (line 6) +* Copying changes: Branching and merging. + (line 6) +* Correcting a log message: admin options. (line 73) +* Creating a branch: Creating a branch. (line 6) +* Creating a project: Starting a new project. + (line 6) +* Creating a repository: Creating a repository. + (line 6) +* Credits (CVS program): What is CVS?. (line 28) +* Credits (manual): Credits. (line 6) +* CVS 1.6, and watches: Watches Compatibility. + (line 6) +* CVS command structure: Structure. (line 6) +* CVS directory, in repository: CVS in repository. (line 6) +* CVS directory, in working directory: Working directory storage. + (line 6) +* CVS passwd file: Password authentication server. + (line 67) +* CVS, history of: What is CVS?. (line 28) +* CVS, introduction to: What is CVS?. (line 6) +* CVS, versions of: Compatibility. (line 6) +* CVS/Base directory: Working directory storage. + (line 178) +* CVS/Baserev file: Working directory storage. + (line 184) +* CVS/Baserev.tmp file: Working directory storage. + (line 192) +* CVS/Entries file: Working directory storage. + (line 60) +* CVS/Entries.Backup file: Working directory storage. + (line 143) +* CVS/Entries.Log file: Working directory storage. + (line 120) +* CVS/Entries.Static file: Working directory storage. + (line 148) +* CVS/Notify file: Working directory storage. + (line 167) +* CVS/Notify.tmp file: Working directory storage. + (line 172) +* CVS/Repository file: Working directory storage. + (line 32) +* CVS/Root file: Specifying a repository. + (line 25) +* CVS/Tag file: Working directory storage. + (line 156) +* CVS/Template file: Working directory storage. + (line 198) +* CVS_CLIENT_LOG, environment variable: Environment variables. + (line 105) +* CVS_CLIENT_PORT: Environment variables. + (line 88) +* CVS_IGNORE_REMOTE_ROOT, environment variable: Environment variables. + (line 116) +* CVS_LOCAL_BRANCH_NUM, environment variable: Environment variables. + (line 122) +* CVS_PASSFILE, environment variable: Password authentication client. + (line 46) +* CVS_PID, environment variable: Environment variables. + (line 138) +* CVS_PROXY_PORT <1>: Environment variables. + (line 94) +* CVS_PROXY_PORT: The connection method. + (line 26) +* CVS_RCMD_PORT, environment variable: Environment variables. + (line 100) +* CVS_RSH method option: The connection method. + (line 51) +* CVS_RSH, environment variable: Environment variables. + (line 70) +* CVS_SERVER method option: The connection method. + (line 65) +* CVS_SERVER, and :fork:: Connecting via fork. (line 24) +* CVS_SERVER, environment variable: Connecting via rsh. (line 22) +* CVS_SERVER_SLEEP, environment variable: Environment variables. + (line 111) +* CVS_USER, environment variable: Variables. (line 83) +* cvsadmin: admin. (line 18) +* CVSEDITOR, environment variable <1>: Environment variables. + (line 48) +* CVSEDITOR, environment variable: Committing your changes. + (line 17) +* CVSEDITOR, internal variable: Variables. (line 37) +* CVSHeader keyword: Keyword list. (line 11) +* cvsignore (admin file), global: cvsignore. (line 6) +* CVSIGNORE, environment variable: Environment variables. + (line 10) +* CVSREAD, environment variable: Environment variables. + (line 18) +* CVSREAD, overriding: Global options. (line 124) +* CVSREADONLYFS, environment variable: Environment variables. + (line 24) +* cvsroot: Repository. (line 6) +* CVSROOT (file): Administrative files. + (line 6) +* CVSROOT, environment variable: Specifying a repository. + (line 12) +* CVSROOT, internal variable: Variables. (line 26) +* CVSROOT, module name: Intro administrative files. + (line 6) +* CVSROOT, multiple repositories: Multiple repositories. + (line 6) +* CVSROOT, overriding: Global options. (line 53) +* CVSROOT, storage of files: CVSROOT storage. (line 6) +* CVSROOT/config: config. (line 6) +* CVSROOT/Emptydir directory: Working directory storage. + (line 58) +* CVSROOT/val-tags file, and read-only access to projects: File permissions. + (line 26) +* CVSROOT/val-tags file, forcing tags into: Error messages. (line 202) +* CVSUMASK, environment variable: File permissions. (line 35) +* cvswrappers (admin file): Wrappers. (line 6) +* CVSWRAPPERS, environment variable <1>: Environment variables. + (line 14) +* CVSWRAPPERS, environment variable: Wrappers. (line 6) +* date format, ISO 8601: Calendar date items. (line 30) +* date input formats: Date input formats. (line 6) +* Date keyword: Keyword list. (line 25) +* Dates: Common options. (line 18) +* day of week item: Day of week items. (line 6) +* Dead state: Attic. (line 17) +* Decimal revision number: Revision numbers. (line 6) +* DEFAULT keyword, in lieu of regular expressions in script hooks: syntax. + (line 12) +* Defining a module: Defining the module. (line 6) +* Defining modules (intro): Intro administrative files. + (line 6) +* Defining modules (reference manual): modules. (line 6) +* Deleting branch tags: Modifying tags. (line 19) +* Deleting files: Removing files. (line 6) +* Deleting revisions: admin options. (line 95) +* Deleting sticky tags: Sticky tags. (line 30) +* Deleting tags: Modifying tags. (line 19) +* Descending directories: Recursive behavior. (line 6) +* Device nodes: Special Files. (line 6) +* Diff: Viewing differences. (line 6) +* diff (subcommand): diff. (line 6) +* Differences, merging: Merging two revisions. + (line 6) +* Directories, moving: Moving directories. (line 6) +* Directories, removing: Removing directories. + (line 6) +* Directory, descending: Recursive behavior. (line 6) +* Disjoint repositories: Multiple repositories. + (line 6) +* displacement of dates: Relative items in date strings. + (line 6) +* Distributing log messages: loginfo. (line 6) +* driver.c (merge example): Conflicts example. (line 6) +* edit (subcommand): Editing files. (line 13) +* Editing administrative files: Intro administrative files. + (line 33) +* Editing the modules file: Defining the module. (line 6) +* Editor, avoiding invocation of: Common options. (line 86) +* EDITOR, environment variable <1>: Environment variables. + (line 49) +* EDITOR, environment variable: Committing your changes. + (line 17) +* EDITOR, internal variable: Variables. (line 38) +* EDITOR, overriding: Global options. (line 58) +* editors (subcommand): Watch information. (line 15) +* Eggert, Paul: Authors of get_date. (line 6) +* emerge: Conflicts example. (line 140) +* Emptydir, in CVSROOT directory: Working directory storage. + (line 58) +* Encryption: Global options. (line 130) +* Entries file, in CVS directory: Working directory storage. + (line 60) +* Entries.Backup file, in CVS directory: Working directory storage. + (line 143) +* Entries.Log file, in CVS directory: Working directory storage. + (line 120) +* Entries.Static file, in CVS directory: Working directory storage. + (line 148) +* Environment variables: Environment variables. + (line 6) +* environment variables, passed to administrative files: Variables. + (line 82) +* epoch, for POSIX: Seconds since the Epoch. + (line 13) +* Errors, reporting: BUGS. (line 13) +* Example of a work-session: A sample session. (line 6) +* Example of merge: Conflicts example. (line 6) +* Example, branch merge: Merging a branch. (line 15) +* Excluding directories, in modules file: Excluding directories. + (line 6) +* Exit status, of commitinfo: commitinfo. (line 29) +* Exit status, of CVS: Exit status. (line 6) +* Exit status, of editor: Error messages. (line 333) +* Exit status, of taginfo admin file: taginfo. (line 51) +* Exit status, of verifymsg: verifymsg. (line 46) +* export (subcommand): export. (line 6) +* Export program: Module options. (line 12) +* Fetching source: Getting the source. (line 6) +* File had conflicts on merge: File status. (line 46) +* File locking: Multiple developers. (line 6) +* File permissions, general: File permissions. (line 6) +* File permissions, Windows-specific: Windows permissions. (line 6) +* File status: File status. (line 6) +* Files, moving: Moving files. (line 6) +* Files, reference manual: Administrative files. + (line 6) +* Fixing a log message: admin options. (line 73) +* Forcing a tag match: Common options. (line 43) +* fork, access method: Connecting via fork. (line 6) +* Form for log message: rcsinfo. (line 6) +* Format of CVS commands: Structure. (line 6) +* format strings: syntax. (line 35) +* format strings, commitinfo admin file: commitinfo. (line 16) +* format strings, common syntax: syntax. (line 35) +* format strings, config admin file: config. (line 245) +* format strings, loginfo admin file: loginfo. (line 34) +* format strings, postadmin admin file: postadmin. (line 12) +* format strings, postproxy admin file: postproxy. (line 23) +* format strings, posttag admin file: posttag. (line 12) +* format strings, postwatch admin file: postwatch. (line 13) +* format strings, preproxy admin file: preproxy. (line 20) +* format strings, taginfo admin file: taginfo. (line 12) +* format strings, verifymsg admin file: verifymsg. (line 20) +* general date syntax: General date syntax. (line 6) +* Getting started: A sample session. (line 6) +* Getting the source: Getting the source. (line 6) +* Global cvsignore: cvsignore. (line 6) +* Global options: Global options. (line 6) +* Group, UNIX file permissions, in repository: File permissions. + (line 6) +* gserver (client/server connection method), port specification <1>: Password authentication server. + (line 10) +* gserver (client/server connection method), port specification: Remote repositories. + (line 6) +* GSSAPI: GSSAPI authenticated. + (line 6) +* Gzip <1>: Invoking CVS. (line 75) +* Gzip: Global options. (line 140) +* Hard links: Special Files. (line 6) +* HEAD, as reserved tag name: Tags. (line 25) +* HEAD, special tag: Common options. (line 122) +* Header keyword: Keyword list. (line 28) +* history (subcommand): history. (line 6) +* History browsing: History browsing. (line 6) +* History file: history file. (line 6) +* History files: Repository files. (line 68) +* History of CVS: What is CVS?. (line 28) +* HistoryLogPath, in CVSROOT/config: config. (line 61) +* HistorySearchPath, in CVSROOT/config: config. (line 70) +* HOME, environment variable: Environment variables. + (line 59) +* HOMEDRIVE, environment variable: Environment variables. + (line 62) +* HOMEPATH, environment variable: Environment variables. + (line 60) +* HTTP proxies, connecting via: The connection method. + (line 26) +* Id keyword: Keyword list. (line 34) +* Ident (shell command): Using keywords. (line 19) +* Identifying a branch: Accessing branches. (line 6) +* Identifying files: Keyword substitution. + (line 6) +* Ignored files: cvsignore. (line 23) +* Ignoring files: cvsignore. (line 6) +* import (subcommand): import. (line 6) +* import, config admin file: config. (line 90) +* Importing files: From files. (line 6) +* Importing files, from other version control systems: From other version control systems. + (line 6) +* Importing modules: First import. (line 6) +* ImportNewFilesToVendorBranchOnly, in CVSROOT/config: config. + (line 90) +* Index: Index. (line 6) +* inetd, configuring for pserver: Password authentication server. + (line 10) +* info files: Trigger Scripts. (line 6) +* info files, commitinfo: commitinfo. (line 6) +* info files, common syntax: syntax. (line 6) +* info files, common syntax, format strings: syntax. (line 35) +* info files, common syntax, updating legacy repositories: Updating Commit Files. + (line 6) +* info files, precommit verification of commits: commitinfo. (line 6) +* info files, security: Trigger Script Security. + (line 6) +* Informing others: Informing others. (line 6) +* init (subcommand): Creating a repository. + (line 35) +* Installed images (VMS): File permissions. (line 59) +* Internal variables: Variables. (line 6) +* Introduction to CVS: What is CVS?. (line 6) +* Invoking CVS: Invoking CVS. (line 6) +* ISO 8601 date format: Calendar date items. (line 30) +* Isolation: History browsing. (line 6) +* items in date strings: General date syntax. (line 6) +* Join: Merging a branch. (line 13) +* Keeping a checked out copy: Keeping a checked out copy. + (line 6) +* Kerberos, using :gserver:: GSSAPI authenticated. + (line 6) +* Kerberos, using :kserver:: Kerberos authenticated. + (line 6) +* Kerberos, using kerberized rsh: Connecting via rsh. (line 35) +* Keyword expansion: Keyword substitution. + (line 6) +* Keyword List: Keyword list. (line 6) +* Keyword substitution: Keyword substitution. + (line 6) +* Keyword substitution, and merging: Merging and keywords. + (line 6) +* Keyword substitution, changing modes: Substitution modes. (line 6) +* KeywordExpand, in CVSROOT/config: config. (line 97) +* Kflag: Substitution modes. (line 6) +* kinit: Kerberos authenticated. + (line 27) +* Known bugs in this manual or CVS: BUGS. (line 71) +* kserver (client/server connection method), port specification <1>: Password authentication server. + (line 10) +* kserver (client/server connection method), port specification: Remote repositories. + (line 6) +* language, in dates: General date syntax. (line 40) +* Layout of repository: Repository. (line 6) +* Left-hand options: Global options. (line 6) +* Linear development: Revision numbers. (line 6) +* Link, symbolic, importing: import output. (line 23) +* List, mailing list: What is CVS?. (line 44) +* Local keyword: Keyword list. (line 97) +* LocalKeyword, in CVSROOT/config: config. (line 104) +* Locally Added: File status. (line 19) +* Locally Modified: File status. (line 16) +* Locally Removed: File status. (line 23) +* LockDir, in CVSROOT/config: config. (line 109) +* Locker keyword: Keyword list. (line 43) +* Locking files: Multiple developers. (line 6) +* Locks, cvs, and backups: Backing up. (line 10) +* Locks, cvs, introduction: Concurrency. (line 6) +* Locks, cvs, technical details: Locks. (line 6) +* log (subcommand): log. (line 6) +* Log information, saving: history file. (line 6) +* Log keyword: Keyword list. (line 47) +* Log keyword, configuring substitution behavior <1>: config. (line 137) +* Log keyword, configuring substitution behavior: Keyword list. + (line 47) +* Log message entry: Committing your changes. + (line 6) +* Log message template: rcsinfo. (line 6) +* Log message, correcting: admin options. (line 73) +* Log message, verifying: verifymsg. (line 6) +* Log messages: loginfo. (line 6) +* logging, commits <1>: rcsinfo. (line 6) +* logging, commits <2>: loginfo. (line 6) +* logging, commits: verifymsg. (line 6) +* LogHistory, in CVSROOT/config: config. (line 129) +* Login (subcommand): Password authentication client. + (line 6) +* loginfo (admin file): loginfo. (line 6) +* loginfo (admin file), updating legacy repositories: loginfo. + (line 55) +* LOGNAME, environment variable: Variables. (line 90) +* Logout (subcommand): Password authentication client. + (line 70) +* ls (subcommand): ls & rls. (line 6) +* MacKenzie, David: Authors of get_date. (line 6) +* Mail, automatic mail on commit: Informing others. (line 6) +* Mailing list: What is CVS?. (line 44) +* Mailing log messages: loginfo. (line 6) +* Main trunk and branches: Branching and merging. + (line 6) +* make: Builds. (line 6) +* Many repositories: Multiple repositories. + (line 6) +* Markers, conflict: Conflicts example. (line 96) +* MaxCommentLeaderLength: Keyword list. (line 47) +* MaxCommentLeaderLength, in CVSROOT/config: config. (line 137) +* MaxCompressionLevel, in CVSROOT/config: config. (line 149) +* Merge, an example: Conflicts example. (line 6) +* Merge, branch example: Merging a branch. (line 15) +* Merging: Branching and merging. + (line 6) +* Merging a branch: Merging a branch. (line 6) +* Merging a file: Updating a file. (line 6) +* Merging two revisions: Merging two revisions. + (line 6) +* Merging, and keyword substitution: Merging and keywords. + (line 6) +* Meyering, Jim: Authors of get_date. (line 6) +* MinCompressionLevel, in CVSROOT/config: config. (line 149) +* minutes, time zone correction by: Time of day items. (line 29) +* mkmodules: Error messages. (line 170) +* Modifications, copying between branches: Branching and merging. + (line 6) +* Module status: Module options. (line 22) +* Module, defining: Defining the module. (line 6) +* Modules (admin file): modules. (line 6) +* Modules file: Intro administrative files. + (line 6) +* Modules file program options: Module program options. + (line 6) +* Modules file, changing: Defining the module. (line 6) +* modules.db: CVSROOT storage. (line 25) +* modules.dir: CVSROOT storage. (line 25) +* modules.pag: CVSROOT storage. (line 25) +* month names in date strings: Calendar date items. (line 38) +* months, written-out: General date syntax. (line 36) +* Motivation for branches: Branches motivation. (line 6) +* Moving a repository: Moving a repository. (line 6) +* Moving branch tags: Modifying tags. (line 37) +* Moving directories: Moving directories. (line 6) +* Moving files: Moving files. (line 6) +* Moving tags: Modifying tags. (line 37) +* Multiple developers: Multiple developers. (line 6) +* Multiple repositories: Multiple repositories. + (line 6) +* Name keyword: Keyword list. (line 37) +* Name, symbolic (tag): Tags. (line 25) +* Needs Checkout: File status. (line 27) +* Needs Merge: File status. (line 37) +* Needs Patch: File status. (line 32) +* Newsgroups: What is CVS?. (line 44) +* notify (admin file): Getting Notified. (line 60) +* Notify file, in CVS directory: Working directory storage. + (line 167) +* Notify.tmp file, in CVS directory: Working directory storage. + (line 172) +* Number, branch <1>: Branches and revisions. + (line 6) +* Number, branch: Revision numbers. (line 6) +* Number, revision-: Revision numbers. (line 6) +* numbers, written-out: General date syntax. (line 26) +* Option defaults: ~/.cvsrc. (line 6) +* options, connection method: The connection method. + (line 16) +* Options, global: Global options. (line 6) +* Options, in modules file: Module options. (line 6) +* ordinal numbers: General date syntax. (line 26) +* Outdating revisions: admin options. (line 95) +* Overlap: Updating a file. (line 24) +* Overriding CVSREAD: Global options. (line 124) +* Overriding CVSROOT: Global options. (line 53) +* Overriding EDITOR: Global options. (line 58) +* Overriding RCSBIN: Global options. (line 24) +* Overview: Overview. (line 6) +* Ownership, saving in CVS: Special Files. (line 6) +* Parallel repositories: Multiple repositories. + (line 6) +* passwd (admin file): Password authentication server. + (line 67) +* Password client, using: Password authentication client. + (line 6) +* Password server, setting up: Password authentication server. + (line 10) +* PATH, environment variable: Environment variables. + (line 55) +* Per-directory sticky tags/dates: Working directory storage. + (line 156) +* Permissions, general: File permissions. (line 6) +* Permissions, saving in CVS: Special Files. (line 6) +* Permissions, Windows-specific: Windows permissions. (line 6) +* Pinard, F.: Authors of get_date. (line 14) +* Policy: When to commit. (line 6) +* port, specifying for remote repositories <1>: Password authentication server. + (line 10) +* port, specifying for remote repositories: Remote repositories. + (line 6) +* postadmin (admin file): postadmin. (line 6) +* postproxy (admin file): postproxy. (line 6) +* posttag (admin file): posttag. (line 6) +* postwatch (admin file): postwatch. (line 6) +* preproxy (admin file): preproxy. (line 6) +* Primary server <1>: config. (line 168) +* Primary server: Write proxies. (line 6) +* PrimaryServer, in CVSROOT/config <1>: config. (line 168) +* PrimaryServer, in CVSROOT/config: Write proxies. (line 6) +* proxies, HTTP, connecting via: The connection method. + (line 26) +* proxies, web, connecting via: The connection method. + (line 26) +* proxy, method option: The connection method. + (line 26) +* proxy, write <1>: config. (line 168) +* proxy, write: Write proxies. (line 6) +* proxyport, method option: The connection method. + (line 26) +* pserver (client/server connection method), port specification <1>: Password authentication server. + (line 10) +* pserver (client/server connection method), port specification: Remote repositories. + (line 6) +* pserver (subcommand) <1>: server & pserver. (line 6) +* pserver (subcommand): Password authentication server. + (line 10) +* pure numbers in date strings: Pure numbers in date strings. + (line 6) +* PVCS, importing files from: From other version control systems. + (line 45) +* RCS history files: Repository files. (line 68) +* RCS revision numbers: Tags. (line 10) +* RCS, importing files from: From other version control systems. + (line 10) +* RCS-style locking: Multiple developers. (line 6) +* RCSBIN, in CVSROOT/config: config. (line 186) +* RCSBIN, internal variable: Variables. (line 32) +* RCSBIN, overriding: Global options. (line 24) +* RCSfile keyword: Keyword list. (line 84) +* rcsinfo (admin file): rcsinfo. (line 6) +* rdiff (subcommand): rdiff. (line 6) +* Read-only files, and -r: Global options. (line 105) +* Read-only files, and CVSREAD: Environment variables. + (line 18) +* Read-only files, and watches: Setting a watch. (line 10) +* Read-only files, in repository: File permissions. (line 6) +* Read-only mode: Global options. (line 86) +* Read-only repository access: Read-only access. (line 6) +* Read-only repository mode: Global options. (line 78) +* readers (admin file): Read-only access. (line 6) +* Recursive (directory descending): Recursive behavior. (line 6) +* Redirect, method option: The connection method. + (line 86) +* Reference manual (files): Administrative files. + (line 6) +* Reference manual for variables: Environment variables. + (line 6) +* Reference, commands: Invoking CVS. (line 6) +* Regular expression syntax: syntax. (line 10) +* Regular modules: Regular modules. (line 6) +* relative items in date strings: Relative items in date strings. + (line 6) +* release (subcommand): release. (line 6) +* Releases, revisions and versions: Versions revisions releases. + (line 6) +* Releasing your working copy: Cleaning up. (line 6) +* Remote repositories: Remote repositories. (line 6) +* Remote repositories, port specification <1>: Password authentication server. + (line 10) +* Remote repositories, port specification: Remote repositories. + (line 6) +* Remove (subcommand): Removing files. (line 34) +* Removing a change: Merging two revisions. + (line 9) +* Removing branch tags: Modifying tags. (line 19) +* Removing directories: Removing directories. + (line 6) +* Removing files: Removing files. (line 6) +* Removing tags: Modifying tags. (line 19) +* Removing your working copy: Cleaning up. (line 6) +* Renaming directories: Moving directories. (line 6) +* Renaming files: Moving files. (line 6) +* Renaming tags: Modifying tags. (line 57) +* Replacing a log message: admin options. (line 73) +* Reporting bugs: BUGS. (line 13) +* Repositories, multiple: Multiple repositories. + (line 6) +* Repositories, remote: Remote repositories. (line 6) +* Repositories, remote, port specification <1>: Password authentication server. + (line 10) +* Repositories, remote, port specification: Remote repositories. + (line 6) +* Repository (intro): Repository. (line 6) +* Repository file, in CVS directory: Working directory storage. + (line 32) +* Repository, backing up: Backing up. (line 6) +* Repository, example: Repository. (line 6) +* Repository, how data is stored: Repository storage. (line 6) +* Repository, moving: Moving a repository. (line 6) +* Repository, setting up: Creating a repository. + (line 6) +* RereadLogAfterVerify, in CVSROOT/config: config. (line 192) +* Reserved checkouts: Multiple developers. (line 6) +* Resetting sticky tags: Sticky tags. (line 30) +* Resolving a conflict: Conflicts example. (line 101) +* Restoring old version of removed file: Merging two revisions. + (line 19) +* Resurrecting old version of dead file: Merging two revisions. + (line 19) +* Retrieve a branch: Accessing branches. (line 6) +* Retrieving an old revision using tags: Tags. (line 84) +* Reverting to repository version: Editing files. (line 42) +* Revision keyword: Keyword list. (line 87) +* Revision management: Revision management. (line 6) +* Revision numbers: Revision numbers. (line 6) +* Revision numbers (branches): Branches and revisions. + (line 6) +* Revision tree: Revision numbers. (line 6) +* Revision tree, making branches: Branching and merging. + (line 6) +* Revisions, merging differences between: Merging two revisions. + (line 6) +* Revisions, versions and releases: Versions revisions releases. + (line 6) +* Right-hand options: Common options. (line 6) +* rls (subcommand): ls & rls. (line 6) +* Root file, in CVS directory: Specifying a repository. + (line 25) +* rsh: Connecting via rsh. (line 6) +* rsh replacements (Kerberized, SSH, &c): Connecting via rsh. (line 35) +* rtag (subcommand): Tagging by date/tag. (line 6) +* rtag (subcommand), creating a branch using: Creating a branch. + (line 6) +* Salz, Rich: Authors of get_date. (line 6) +* Saving space: admin options. (line 95) +* SCCS, importing files from: From other version control systems. + (line 38) +* script hook, postadmin: postadmin. (line 6) +* script hook, postproxy: postproxy. (line 6) +* script hook, posttag: posttag. (line 6) +* script hook, postwatch: postwatch. (line 6) +* script hook, preproxy: preproxy. (line 6) +* script hook, taginfo: taginfo. (line 6) +* script hooks: Trigger Scripts. (line 6) +* script hooks, commitinfo: commitinfo. (line 6) +* script hooks, common syntax: syntax. (line 6) +* script hooks, precommit verification of commits: commitinfo. + (line 6) +* script hooks, security: Trigger Script Security. + (line 6) +* Secondary server <1>: config. (line 168) +* Secondary server: Write proxies. (line 6) +* secondary server, pull updates: postproxy. (line 6) +* Security, file permissions in repository: File permissions. (line 6) +* Security, GSSAPI: GSSAPI authenticated. + (line 6) +* Security, Kerberos: Kerberos authenticated. + (line 6) +* Security, of pserver: Password authentication security. + (line 6) +* Security, setuid: File permissions. (line 59) +* server (subcommand): server & pserver. (line 6) +* Server, CVS: Remote repositories. (line 6) +* Server, temporary directories: Server temporary directory. + (line 6) +* Setgid: File permissions. (line 59) +* Setting up a repository: Creating a repository. + (line 6) +* Setuid: File permissions. (line 59) +* Source keyword: Keyword list. (line 90) +* Source, getting CVS source: What is CVS?. (line 38) +* Source, getting from CVS: Getting the source. (line 6) +* Special files: Special Files. (line 6) +* Specifying dates: Common options. (line 18) +* Spreading information: Informing others. (line 6) +* SSH (rsh replacement): Connecting via rsh. (line 35) +* Starting a project with CVS: Starting a new project. + (line 6) +* State keyword: Keyword list. (line 93) +* Status of a file: File status. (line 6) +* Status of a module: Module options. (line 22) +* Sticky date: Sticky tags. (line 36) +* Sticky tags: Sticky tags. (line 6) +* Sticky tags, resetting: Sticky tags. (line 30) +* Sticky tags/dates, per-directory: Working directory storage. + (line 156) +* Storing log messages: loginfo. (line 6) +* Stream authentication: Global options. (line 16) +* Structure: Structure. (line 6) +* Subdirectories: Recursive behavior. (line 6) +* Support, getting CVS support: BUGS. (line 17) +* Symbolic link, importing: import output. (line 23) +* Symbolic links: Special Files. (line 6) +* Symbolic name (tag): Tags. (line 25) +* Syntax of info files, updating legacy repositories: Updating Commit Files. + (line 6) +* syntax of trigger script hooks: syntax. (line 6) +* SystemAuth, in CVSROOT/config: config. (line 209) +* tag (subcommand): Tagging the working directory. + (line 6) +* tag (subcommand), creating a branch using: Creating a branch. + (line 6) +* tag (subcommand), introduction: Tags. (line 25) +* Tag file, in CVS directory: Working directory storage. + (line 156) +* Tag program: Module options. (line 30) +* taginfo (admin file): taginfo. (line 6) +* taginfo (admin file), exit status: taginfo. (line 51) +* taginfo (admin file), updating legacy repositories: taginfo. + (line 44) +* Tags: Tags. (line 6) +* Tags, deleting: Modifying tags. (line 19) +* Tags, example: Tags. (line 45) +* Tags, logging <1>: posttag. (line 6) +* Tags, logging: taginfo. (line 6) +* Tags, moving: Modifying tags. (line 37) +* Tags, renaming: Modifying tags. (line 57) +* Tags, retrieving old revisions: Tags. (line 84) +* Tags, sticky: Sticky tags. (line 6) +* Tags, symbolic name: Tags. (line 25) +* Tags, verifying: taginfo. (line 6) +* tc, Trivial Compiler (example): A sample session. (line 6) +* Team of developers: Multiple developers. (line 6) +* Template file, in CVS directory: Working directory storage. + (line 198) +* Template for log message: rcsinfo. (line 6) +* Temporary directories, and server: Server temporary directory. + (line 6) +* temporary directory, set in config: config. (line 216) +* temporary file directory, set via command line: Global options. + (line 30) +* temporary file directory, set via config: Global options. (line 30) +* temporary file directory, set via environment variable <1>: Environment variables. + (line 134) +* temporary file directory, set via environment variable: Global options. + (line 30) +* temporary files, location of <1>: Environment variables. + (line 134) +* temporary files, location of <2>: config. (line 216) +* temporary files, location of: Global options. (line 30) +* Third-party sources: Tracking sources. (line 6) +* Time: Common options. (line 18) +* time of day item: Time of day items. (line 6) +* time zone correction: Time of day items. (line 29) +* time zone item <1>: Time zone items. (line 6) +* time zone item: General date syntax. (line 44) +* Timezone, in output <1>: log examples. (line 6) +* Timezone, in output: log. (line 17) +* TMPDIR, environment variable <1>: Environment variables. + (line 134) +* TMPDIR, environment variable: Global options. (line 30) +* TmpDir, in config: config. (line 216) +* TopLevelAdmin, in CVSROOT/config: config. (line 221) +* Trace: Global options. (line 114) +* Traceability: History browsing. (line 6) +* Tracking sources: Tracking sources. (line 6) +* Transactions, atomic, lack of: Concurrency. (line 27) +* trigger script hooks, common syntax: syntax. (line 6) +* trigger scripts: Trigger Scripts. (line 6) +* trigger scripts, commitinfo: commitinfo. (line 6) +* trigger scripts, precommit verification of commits: commitinfo. + (line 6) +* trigger scripts, security: Trigger Script Security. + (line 6) +* Trivial Compiler (example): A sample session. (line 6) +* Typical repository: Repository. (line 6) +* Umask, for repository files: File permissions. (line 35) +* Undoing a change: Merging two revisions. + (line 9) +* unedit (subcommand): Editing files. (line 42) +* Unknown: File status. (line 52) +* Unreserved checkouts: Multiple developers. (line 6) +* Unresolved Conflict: File status. (line 41) +* Up-to-date: File status. (line 11) +* update (subcommand): update. (line 6) +* Update, introduction: Updating a file. (line 6) +* update, to display file status: File status. (line 75) +* Updating a file: Updating a file. (line 6) +* UseArchiveCommentLeader: Keyword list. (line 47) +* UseArchiveCommentLeader, in CVSROOT/config: config. (line 234) +* UseNewInfoFmtStrings, in CVSROOT/config: config. (line 245) +* User aliases: Password authentication server. + (line 96) +* User variables: Variables. (line 62) +* USER, environment variable: Variables. (line 93) +* USER, internal variable: Variables. (line 43) +* UserAdminOptions, in CVSROOT/config <1>: config. (line 257) +* UserAdminOptions, in CVSROOT/config: admin. (line 18) +* users (admin file): Getting Notified. (line 75) +* val-tags file, and read-only access to projects: File permissions. + (line 26) +* val-tags file, forcing tags into: Error messages. (line 202) +* Variables: Variables. (line 6) +* Vendor: Tracking sources. (line 10) +* Vendor branch: Tracking sources. (line 10) +* verifymsg (admin file): verifymsg. (line 6) +* verifymsg (admin/commit file), updating legacy repositories: verifymsg. + (line 34) +* verifymsg, changing the log message <1>: config. (line 192) +* verifymsg, changing the log message: verifymsg. (line 49) +* verifymsg, example: verifymsg example. (line 6) +* version (subcommand): Invoking CVS. (line 821) +* Versions, of CVS: Compatibility. (line 6) +* Versions, revisions and releases: Versions revisions releases. + (line 6) +* Viewing differences: Viewing differences. (line 6) +* VISUAL, environment variable <1>: Environment variables. + (line 50) +* VISUAL, environment variable: Committing your changes. + (line 23) +* VISUAL, internal variable: Variables. (line 39) +* watch add (subcommand): Getting Notified. (line 11) +* Watch family of commands, logging: postwatch. (line 6) +* watch off (subcommand): Setting a watch. (line 26) +* watch on (subcommand): Setting a watch. (line 9) +* watch remove (subcommand): Getting Notified. (line 54) +* watchers (subcommand): Watch information. (line 6) +* Watches: Watches. (line 6) +* wdiff (import example): First import. (line 19) +* Web pages, maintaining with CVS: Keeping a checked out copy. + (line 6) +* web proxies, connecting via: The connection method. + (line 26) +* What (shell command): Using keywords. (line 32) +* What branches are good for: Branches motivation. (line 6) +* What is CVS not?: What is CVS not?. (line 6) +* What is CVS?: What is CVS?. (line 6) +* When to commit: When to commit. (line 6) +* Windows, and permissions: Windows permissions. (line 6) +* Work-session, example of: A sample session. (line 6) +* Working copy: Multiple developers. (line 6) +* Working copy, removing: Cleaning up. (line 6) +* Wrappers: Wrappers. (line 6) +* write proxy <1>: config. (line 168) +* write proxy: Write proxies. (line 6) +* Write proxy, logging <1>: postproxy. (line 6) +* Write proxy, logging: preproxy. (line 6) +* Write proxy, pull updates: postproxy. (line 6) +* Write proxy, verifying: preproxy. (line 6) +* writers (admin file): Read-only access. (line 6) +* Ximbiot: BUGS. (line 17) +* xinetd, configuring for pserver: Password authentication server. + (line 10) +* Zone, time, in output <1>: log examples. (line 6) +* Zone, time, in output: log. (line 17) + + |