Trailing whitespace deleted.
[bpt/emacs.git] / man / pcl-cvs.texi
1 \input texinfo @c -*-texinfo-*-
2 @c "@(#)$Name: $:$Id: pcl-cvs.texi,v 1.18 2002/12/07 13:38:26 pj Exp $"
3 @c %**start of header
4 @setfilename ../info/pcl-cvs
5 @settitle PCL-CVS --- Emacs Front-End to CVS
6 @syncodeindex vr fn
7 @c %**end of header
8
9 @copying
10 Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
11 1999, 2000, 2002 Free Software Foundation, Inc.
12
13 @quotation
14 Permission is granted to copy, distribute and/or modify this document
15 under the terms of the GNU Free Documentation License, Version 1.1 or
16 any later version published by the Free Software Foundation; with the
17 Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and
18 ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU
19 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
20 license is included in the section entitled ``GNU Free Documentation
21 License'' in the Emacs manual.
22
23 This document is part of a collection distributed under the GNU Free
24 Documentation License. If you want to distribute this document
25 separately from the collection, you can do so by adding a copy of the
26 license to the document, as described in section 6 of the license.
27
28 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
29 this GNU Manual, like GNU software. Copies published by the Free
30 Software Foundation raise funds for GNU development.''
31 @end quotation
32 @end copying
33
34 @dircategory Emacs
35 @direntry
36 * PCL-CVS: (pcl-cvs). Emacs front-end to CVS.
37 @end direntry
38
39 @c The titlepage section does not appear in the Info file.
40 @titlepage
41 @sp 4
42 @c The title is printed in a large font.
43 @center @titlefont{User's Guide}
44 @sp
45 @center @titlefont{to}
46 @sp
47 @center @titlefont{PCL-CVS --- The Emacs Front-End to CVS}
48 @ignore
49 @sp 2
50 @center release 2.9
51 @c -release-
52 @end ignore
53 @sp 3
54 @center Per Cederqvist
55 @center Stefan Monnier
56 @c -date-
57
58 @c The following two commands start the copyright page
59 @c for the printed manual. This will not appear in the Info file.
60 @page
61 @vskip 0pt plus 1filll
62 @insertcopying
63 @end titlepage
64
65 @c ================================================================
66 @c The real text starts here
67 @c ================================================================
68
69 @node Top, About PCL-CVS, (dir), (dir)
70 @ifnottex
71 @top PCL-CVS
72
73 This manual describes PCL-CVS, the GNU Emacs front-end to CVS. It
74 is nowhere near complete, so you are advised to use @kbd{M-x
75 customize-group RET pcl-cvs @key{RET}} and to look at the documentation strings
76 of the various commands and major modes for further information.
77 @c This manual is updated to release 2.5 of PCL-CVS.
78 @end ifnottex
79
80 @menu
81 * About PCL-CVS:: Installation, credits, history, @dots{}
82
83 * Getting started:: An introduction with a walk-through example.
84 * Buffer contents:: An explanation of the buffer contents.
85 * Selected files:: To which files are commands applied.
86 * Commands:: All commands, grouped by type.
87
88 * Log Edit Mode:: Major mode to edit log messages.
89 * Log View Mode:: Major mode to browse log changes.
90 @c * CVS Status Mode:: Major mode to view CVS' status output.
91 * Customization:: How you can tailor PCL-CVS to suit your needs.
92 * Bugs:: Bugs (known and unknown).
93
94 * Function and Variable Index:: List of functions and variables.
95 * Concept Index:: List of concepts.
96 * Key Index:: List of keystrokes.
97
98 @detailmenu
99 --- The Detailed Node Listing ---
100
101 About PCL-CVS
102
103 * Contributors:: Contributors to PCL-CVS.
104 * Installation::
105
106 Commands
107
108 * Entering PCL-CVS:: Commands to invoke PCL-CVS
109 * Setting flags:: Setting flags for CVS commands
110 * Updating the buffer::
111 * Movement commands:: How to move up and down in the buffer
112 * Marking files:: How to mark files that other commands
113 will later operate on.
114 * Committing changes:: Checking in your modifications to the
115 CVS repository.
116 * Editing files:: Loading files into Emacs.
117 * Getting info about files:: Display the log and status of files.
118 * Adding and removing files:: Adding and removing files
119 * Undoing changes:: Undoing changes
120 * Removing handled entries:: Uninteresting lines can easily be removed.
121 * Ignoring files:: Telling CVS to ignore generated files.
122 * Viewing differences:: Commands to @samp{diff} different versions.
123 * Invoking Ediff:: Running @samp{ediff} from @samp{*cvs*} buffer.
124 * Updating files:: Updating files that Need-update.
125 * Tagging files:: Tagging files.
126 * Miscellaneous commands:: Miscellaneous commands.
127
128 Customization
129
130 * Customizing Faces::
131
132 @end detailmenu
133 @end menu
134
135 @node About PCL-CVS, Getting started, Top, Top
136 @chapter About PCL-CVS
137 @cindex About PCL-CVS
138
139 PCL-CVS is a front-end to CVS versions 1.9 and later.
140 It concisely shows the present status of a checked out module in an
141 Emacs buffer and provides single-key access to the most frequently used CVS
142 commands.
143 For Emacs users accustomed to VC, PCL-CVS can be thought of as a replacement
144 for VC-dired (@pxref{VC Dired Mode, , Dired under VC, emacs, The GNU
145 Emacs Manual}) specifically designed for CVS.
146
147 PCL-CVS was originally written many years ago by Per Cederqvist who
148 proudly maintained it until January 1996, at which point he released the
149 beta version 2.0b2 and passed on the maintainership to Greg A Woods.
150 Development stayed mostly dormant for a few years during which
151 version 2.0 never seemed to be able to leave the ``beta'' stage while a
152 separate XEmacs version was slowly splitting away. In late 1998,
153 Stefan Monnier picked up development again, adding some major new
154 functionality and taking over the maintenance.
155
156 As of Emacs 21, PCL-CVS is part of the standard Emacs distribution.
157
158 @menu
159 * Contributors:: Contributors to PCL-CVS.
160 * Installation::
161 @end menu
162
163 @node Contributors, Installation, About PCL-CVS, About PCL-CVS
164 @section Contributors to PCL-CVS
165 @cindex Contributors
166 @cindex Authors
167
168 Contributions to the package are welcome. I have limited time to work
169 on this project, but I will gladly add any code that you contribute to
170 me to this package (@pxref{Bugs}).
171
172 The following persons have made contributions to PCL-CVS.
173
174 @itemize @bullet
175 @item
176 Brian Berliner wrote CVS, together with some other contributors.
177 Without his work on CVS this package would be useless@dots{}
178
179 @item
180 Per Cederqvist wrote most of the otherwise unattributed functions in
181 PCL-CVS as well as all the documentation.
182
183 @item
184 @email{inge@@lysator.liu.se, Inge Wallin} wrote the skeleton of
185 @file{pcl-cvs.texi}, and gave useful comments on it. He also wrote
186 the files @file{elib-node.el} and @file{compile-all.el}. The file
187 @file{cookie.el} was inspired by Inge.@refill
188
189 @item
190 @email{linus@@lysator.liu.se, Linus Tolke} contributed useful comments
191 on both the functionality and the documentation.@refill
192
193 @item
194 @email{jwz@@jwz.com, Jamie Zawinski} contributed
195 @file{pcl-cvs-lucid.el}, which was later renamed to
196 @file{pcl-cvs-xemacs.el}.@refill
197
198 @item
199 Leif Lonnblad contributed RCVS support (since superseded by the new
200 remote CVS support).
201
202 @item
203 @email{jimb@@cyclic.com, Jim Blandy} contributed hooks to automatically
204 guess CVS log entries from @file{ChangeLog} contents, and initial support of
205 the new Cygnus / Cyclic remote CVS, as well as various sundry bug fixes
206 and cleanups.
207
208 @item
209 @email{kingdon@@cyclic.com, Jim Kingdon} contributed lots of fixes to
210 the build and installation procedure.
211
212 @item
213 @email{woods@@weird.com, Greg A.@: Woods} contributed code to implement
214 the use of per-file diff buffers, and vendor join diffs with emerge and
215 ediff, as well as various and sundry bug fixes and cleanups.
216
217 @item
218 @email{greg.klanderman@@alum.mit.edu, Greg Klanderman} implemented
219 toggling of marked files, setting of CVS command flags via prefix
220 arguments, updated the XEmacs support, updated the manual, and fixed
221 numerous bugs.
222
223 @item
224 @email{monnier@@cs.yale.edu, Stefan Monnier} added a slew of other
225 features and introduced even more new bugs. If there's any bug left,
226 you can be sure it's his.
227
228 @item
229 @c wordy to avoid an underfull hbox
230 @email{masata-y@@is.aist-nara.ac.jp, Masatake YAMATO} made a gracious
231 contribution of his cvstree code to display a tree of tags which was later
232 superseded by the new @code{cvs-status-mode}.
233 @end itemize
234
235 Apart from these, a lot of people have sent us suggestions, ideas,
236 requests, bug reports and encouragement. Thanks a lot! Without you
237 there would be no new releases of PCL-CVS.
238
239
240 @node Installation, , Contributors, About PCL-CVS
241 @section Installation
242 @cindex Installation
243
244 As mentioned above, PCL-CVS comes bundled with Emacs version 21.1 and
245 later. If you're using Emacs 20, you can download an older version of
246 PCL-CVS from @uref{ftp://flint.cs.yale.edu/pub/monnier/pcl-cvs}. That
247 version also works on XEmacs.
248
249 If you are running XEmacs 21.0 or later, PCL-CVS is available in
250 pre-compiled package form. Please refer to the XEmacs manual for
251 instructions regarding package selection and installation. Currently,
252 that PCL-CVS package also requires you to have installed the
253 @file{xemacs-base}, @file{elib}, and @file{dired} packages.
254
255 If you have @TeX{} installed at your site, you can make a typeset manual
256 from @file{pcl-cvs.texi}.
257
258 @enumerate
259 @item
260 If PCL-CVS came with the Emacs distribution, type @kbd{make pcl-cvs.dvi}
261 in the @file{man} subdirectory of the Emacs source tree.
262 @item
263 Alternatively, run @TeX{} by typing @kbd{texi2dvi pcl-cvs.texi}.
264 @item
265 Convert the resulting device independent file @file{pcl-cvs.dvi} to a
266 form which your printer can output and print it. If you have a
267 PostScript printer, there is a program, @code{dvi2ps}, which does. There
268 is also a program which comes together with @TeX{}, @code{dvips}, which
269 you can use.
270 @end enumerate
271
272
273 @node Getting started, Buffer contents, About PCL-CVS, Top
274 @chapter Getting started
275 @cindex Introduction
276 @cindex Example run
277 @cindex Sample session
278
279 This document assumes that you know what CVS is, and that you at least
280 know the fundamental concepts of CVS. If that is not the case, you
281 should read the CVS documentation. Type @kbd{info -f cvs} or @kbd{man
282 cvs}.
283
284 PCL-CVS is only useful once you have checked out a module. So before
285 you invoke it, you must have a copy of a module somewhere in the file
286 system.
287
288 You can invoke PCL-CVS by typing @kbd{M-x cvs-examine @key{RET}}.
289 You can also invoke it via the menu bar, under @samp{Tools}.
290 Or, if you prefer, you can also invoke PCL-CVS by simply visiting the
291 CVS administrative subdirectory of your module, with a prefix argument.
292 For example, to invoke PCL-CVS in a separate frame, type @kbd{C-u C-x 5
293 f ~/my/project/CVS @key{RET}}.
294
295 The function @code{cvs-examine} will ask for a directory. The command
296 @samp{cvs -n update} will be run in that directory. (It should contain
297 files that have been checked out from a CVS archive.) The output from
298 @code{cvs} will be parsed and presented in a table in a buffer called
299 @samp{*cvs*}. It might look something like this:
300
301 @example
302 Repository : /usr/CVSroot
303 Module : test
304 Working dir: /users/ceder/FOO/test
305
306
307 In directory .:
308 Need-Update bar
309 Need-Update file.txt
310 Modified namechange
311 Need-Update newer
312 In directory sub:
313 Modified ChangeLog
314
315 --------------------- End ---------------------
316 -- last cmd: cvs -f -z6 -n update -d -P --
317 @end example
318
319 In this example, your repository is in @file{/usr/CVSroot} and CVS has
320 been run in the directory @file{/users/ceder/FOO/test}. The three files
321 (@file{bar}, @file{file.txt} and
322 @file{newer}) that are marked with @samp{Need-Update} have been changed
323 by someone else in the CVS repository. Two files (@file{namechange}
324 and @file{sub/ChangeLog}) have been modified locally, and need to be
325 checked in.
326
327 You can move the cursor up and down in the buffer with @kbd{C-n} and
328 @kbd{C-p} or @kbd{n} and @kbd{p}. If you press @kbd{c} on one of the
329 @samp{Modified} files, that file will be checked in to the CVS
330 repository. @xref{Committing changes}. You can also press @kbd{O} to
331 update any of the files that are marked @samp{Need-Update}. You can
332 also run @kbd{M-x cvs-update @key{RET}} (bound to @kbd{M-u} in the
333 @samp{*cvs*} buffer) to update all the files.@refill
334
335 You can then press @kbd{=} to easily get a @samp{diff} between your
336 modified file and the base version that you started from, or you can
337 press @kbd{l} to get the output from @samp{cvs log}. Many more such
338 commands are available simply by pressing a key (@pxref{Getting info
339 about files}).
340
341 @node Buffer contents, Selected files, Getting started, Top
342 @chapter Buffer contents
343 @cindex Buffer contents
344 @cindex @code{*cvs*} buffer contents
345
346 The display contains several columns, some of which are optional.
347 These columns are, from left to right:
348
349 @itemize @bullet
350
351 @item
352 Optionally, the head revision of the file. This is the latest version
353 found in the repository. It might also contain (instead of the head
354 revision) a sub status which typically gives further information about
355 how we got to the current state, for example @samp{patched},
356 @samp{merged}, @dots{}
357
358 @item
359 An asterisk when the file is @dfn{marked} (@pxref{Selected
360 files}).@refill
361
362 @item
363 The actual status of the file wrt the repository. See below.
364
365 @item
366 Optionally, the base revision of the file. This is the version
367 which the copy in your working directory is based upon.
368
369 @item
370 The file name.
371
372 @end itemize
373
374 The @samp{file status} field can have the following values:
375
376 @table @samp
377 @item Modified
378 The file is modified in your working directory, and there was no
379 modification to the same file in the repository. This status can have
380 the following substatus:
381
382 @table @samp
383 @item merged
384 The file was modified in your working directory, and there were
385 modifications in the repository as well, but they were merged
386 successfully, without conflict, in your working directory.@refill
387 @end table
388
389 @item Conflict
390 A conflict was detected while trying to merge your changes to @var{file}
391 with changes from the repository. @var{file} (the copy in your
392 working directory) is now the output of the @code{rcsmerge} command on
393 the two versions; an unmodified copy of your file is also in your
394 working directory, with the name @file{.#@var{file}.@var{version}},
395 where @var{version} is the RCS revision that your modified file started
396 from. @xref{Viewing differences}, for more details.@refill
397
398 A conflict can also come from a disagreement on the existence of the file
399 rather than on its content. This case is indicated by the following
400 possible substatus:
401
402 @table @samp
403 @item removed
404 The file is locally removed but a new revision has been committed to
405 the repository by someone else.
406
407 @item added
408 The file is locally added and has also been added to the repository
409 by someone else.
410
411 @item modified
412 The file is locally modified but someone else has removed it from the
413 repository.
414 @end table
415
416 @item Added
417 The file has been added by you, but it still needs to be checked in to
418 the repository.@refill
419
420 @item Removed
421 The file has been removed by you, but it still needs to be checked in to
422 the repository. You can resurrect it by typing @kbd{a} (@pxref{Adding
423 and removing files}).@refill
424
425 @item Unknown
426 A file that was detected in your directory, but that neither appears in
427 the repository, nor is present on the list of files that CVS should
428 ignore.@refill
429
430 @item Up-to-date
431 The file is up to date with respect to the version in the repository.
432 This status can have a substatus of:
433
434 @table @samp
435 @item added
436 You have just added the file to the repository.@refill
437
438 @item updated
439 The file was brought up to date with respect to the repository. This is
440 done for any file that exists in the repository but not in your source,
441 and for files that you haven't changed but are not the most recent
442 versions available in the repository.@refill
443
444 @item patched
445 The file was brought up to date with respect to the remote repository by
446 way of fetching and applying a patch to the file in your source. This
447 is equivalent to @samp{updated} except that CVS decided to use a hopefully
448 more efficient method.@refill
449
450 @item committed
451 You just committed the file.@refill
452 @end table
453
454 @item Need-Update
455 Either a newer version than the one in your source is available in the
456 repository and you have not modified your checked out version, or the
457 file exists in the repository but not in your source. Use
458 @samp{cvs-mode-update} bound to @kbd{O} to update the file.@refill
459
460 @item Need-Merge
461 You have modified the checked out version of the file, and a newer
462 version is available in the repository. A merge will take place when
463 you run a @samp{cvs-update}.
464
465 @item Missing
466 The file has been unexpectedly removed from your working directory
467 although it has not been @samp{cvs remove}d.
468 @end table
469
470 @node Selected files, Commands, Buffer contents, Top
471 @chapter Selected files
472 @cindex Selected files
473 @cindex Marked files
474 @cindex File selection
475 @cindex Active files
476 @cindex Applicable
477
478 Many of the commands work on the current set of @dfn{selected} files
479 which can be either the set of marked files (if any file is marked and
480 marks are no ignored) or whichever file or directory the cursor is on.
481
482 If a directory is selected but the command cannot be applied to a
483 directory, then it will be applied to the set of files under this
484 directory which are in the @samp{*cvs*} buffer.
485
486 @findex cvs-mode-force-command
487 @findex cvs-allow-dir-commit
488 Furthermore, each command only operates on a subset of the selected
489 files, depending on whether or not the command is @dfn{applicable} to
490 each file (based on the file's status). For example,
491 @code{cvs-mode-commit} is not applicable to a file whose status is
492 @samp{Need-Update}. If it should happen that PCL-CVS guesses the
493 applicability wrong, you can override it with the special prefix
494 @code{cvs-mode-force-command} normally bound to @kbd{M-f} (and file a
495 bug report). The applicability rule can be slightly changed with
496 @code{cvs-allow-dir-commit} and @code{cvs-force-dir-tag}.
497
498 By default, marks are always in effect (you may change this, however, by
499 setting the variable @code{cvs-default-ignore-marks}) except for the
500 commands that @samp{tag} or @samp{diff} a file (which can be changed
501 with the variable @code{cvs-invert-ignore-marks}).
502
503 In addition, you may use the special prefix @code{cvs-mode-toggle-marks}
504 normally bound to @key{T} to toggle the use of marks for the following
505 command.
506
507 This scheme might seem a little complicated, but once one gets used to
508 it, it is quite powerful.
509
510 For commands to mark and unmark files, see @ref{Marking files}.
511
512 @node Commands, Log Edit Mode, Selected files, Top
513 @chapter Commands
514
515 @iftex
516 This chapter describes all the commands that you can use in PCL-CVS.
517 @end iftex
518 @ifnottex
519 The nodes in this menu contains explanations about all the commands that
520 you can use in PCL-CVS. They are grouped together by type.
521 @end ifnottex
522
523 @menu
524 * Entering PCL-CVS:: Commands to invoke PCL-CVS
525 * Setting flags:: Setting flags for CVS commands
526 * Updating the buffer::
527 * Movement commands:: How to move up and down in the buffer
528 * Marking files:: How to mark files that other commands
529 will later operate on.
530 * Committing changes:: Checking in your modifications to the
531 CVS repository.
532 * Editing files:: Loading files into Emacs.
533 * Getting info about files:: Display the log and status of files.
534 * Adding and removing files:: Adding and removing files
535 * Undoing changes:: Undoing changes
536 * Removing handled entries:: Uninteresting lines can easily be removed.
537 * Ignoring files:: Telling CVS to ignore generated files.
538 * Viewing differences:: Commands to @samp{diff} different versions.
539 * Invoking Ediff:: Running @samp{ediff} from @samp{*cvs*} buffer.
540 * Updating files:: Updating files that Need-update.
541 * Tagging files:: Tagging files.
542 * Miscellaneous commands:: Miscellaneous commands.
543 @end menu
544
545
546 @node Entering PCL-CVS, Setting flags, Commands, Commands
547 @section Entering PCL-CVS
548 @findex cvs-update
549 @findex cvs-examine
550 @findex cvs-status
551 @findex cvs-checkout
552 @findex cvs-quickdir
553 @cindex Creating the *cvs* buffer
554
555 Most commands in PCL-CVS require that you have a @samp{*cvs*}
556 buffer. The commands that you use to get one are listed below.
557 For each, a @samp{cvs} process will be run, the output will be parsed by
558 PCL-CVS, and the result will be printed in the @samp{*cvs*} buffer (see
559 @ref{Buffer contents}, for a description of the buffer's contents).
560
561 @table @kbd
562 @item M-x cvs-update
563 Run a @samp{cvs update} command. You will be asked for the directory
564 in which the @samp{cvs update} will be run.
565
566 @item M-x cvs-examine
567 Run a @samp{cvs -n update} command. This is identical to the previous
568 command, except that it will only check what needs to be done but will
569 not change anything. You will be asked for the directory in
570 which the @samp{cvs -n update} will be run.
571
572 @item M-x cvs-status
573 Run a @samp{cvs status} command. You will be asked for the directory
574 in which the @samp{cvs status} will be run.
575
576 @item M-x cvs-checkout
577 Run a @samp{cvs checkout} command. You will be asked for the directory
578 in which the @samp{cvs update} will be run and the module to be checked
579 out.
580
581 @item M-x cvs-quickdir
582 Populate the @samp{*cvs*} buffer by just looking at the @file{CVS/Entries}
583 files. This is very much like @code{cvs-examine} except that it does
584 not access the CVS repository, which is a major advantage when the
585 repository is far away. But of course, it will not be able to detect
586 when a file needs to be updated or merged.
587 @end table
588
589 @findex cvs-dired-action
590 @findex cvs-dired-use-hook
591 The first four of
592 those commands are also reachable from the menu bar
593 under @samp{Tools->PCL-CVS}. Finally, an alternative way is to visit
594 the CVS administrative subdirectory in your work area with a simple
595 prefix argument. For example @kbd{C-u C-x C-f ~/my/work/CVS @key{RET}}. This
596 by default runs @code{cvs-quickdir} but the specific behavior can be
597 changed with @code{cvs-dired-action} and @code{cvs-dired-use-hook}.
598
599 By default, the commands above will descend recursively into
600 subdirectories. You can avoid that behavior by including @samp{-l} in
601 the flags for the command. These flags can be set by giving a prefix
602 argument to the command (e.g., by typing
603 @kbd{C-u M-x cvs-update @key{RET} -l @key{RET}}).
604
605
606 @node Setting flags, Updating the buffer, Entering PCL-CVS, Commands
607 @section Setting flags for CVS commands
608 @cindex Optional switches to CVS
609 @cindex Command-line options to CVS
610
611 This section describes the convention used by nearly all PCL-CVS
612 commands for setting optional flags sent to CVS. A single @kbd{C-u}
613 prefix argument is used to cause the command to prompt for flags to be
614 used for the current invocation of the command only. Two @kbd{C-u} prefix
615 arguments are used to prompt for flags which will be set permanently, for the
616 current invocation and all that follow, until the flags are changed, or
617 unless temporary flags are set which override them.
618
619 Perhaps an example or two is in order. Say you are about to add a
620 binary file to the repository, and want to specify the flags @samp{-kb}
621 to @samp{cvs add}. You can type @kbd{C-u a -kb @key{RET}},
622 and the file will be added. Subsequent @samp{cvs add}
623 commands will use the previously prevailing flags.
624
625 As a second example, say you are about to perform a diff and want to see
626 the result in unified diff format, i.e. you'd like to pass the flag
627 @samp{-u} to both @samp{cvs diff} and @samp{diff}. You'd also like all
628 subsequent diffs to use this flag. You can type @kbd{C-u C-u = -u @key{RET}}
629 and the diff will be performed, and the default flags will be set to
630 @code{("-u")}. You can of course override this flag for a single diff
631 by using a single @kbd{C-u} prefix argument.
632
633 @cindex Special prefix
634 In addition to this, some commands can take @dfn{special prefix} arguments.
635 These work as follows: When called with a @kbd{C-u} prefix, the user is
636 prompted for a new value of the special prefix and the special prefix is
637 activated for the next command. When called without the @kbd{C-u}
638 prefix, the special prefix is re-activated (with the same value as last
639 time) for the next command. Calling the prefix command again when it's
640 already activated deactivates it. Calling it with the @kbd{C-u C-u}
641 prefix activates it for all subsequent commands until you deactivate it
642 explicitly. The special prefixes are:
643
644 @table @kbd
645 @item T
646 Toggles whether or not marks will be active in the next command.@refill
647
648 @item b
649 Provide the next command with a branch (can be any version
650 specifier) to work on.@refill
651
652 @item B
653 Secondary branch argument. Only meaningful if @kbd{b} is also used.
654 It can be used to provide a second branch argument to
655 @code{cvs-mode-diff} or to @code{cvs-mode-update}.
656
657 @item M-f
658 Forces the next command to apply to every selected file rather than only
659 to the ones PCL-CVS thinks are relevant.
660 @end table
661
662 @node Updating the buffer, Movement commands, Setting flags, Commands
663 @section Updating the @samp{*cvs*} buffer
664 @findex cvs-update
665 @findex cvs-examine
666 @findex cvs-status
667 @findex cvs-mode-update
668 @findex cvs-mode-examine
669 @findex cvs-mode-status
670
671 The following commands can be used from within the @samp{*cvs*} buffer
672 to update the display:
673
674 @table @kbd
675 @item M-u
676 Runs the command @samp{cvs-update}.@refill
677
678 @item M-e
679 Runs the command @samp{cvs-examine}.@refill
680
681 @item M-s
682 Runs the command @samp{cvs-status}.@refill
683 @end table
684
685 In addition to the above commands which operate on the whole module,
686 you can run the equivalent CVS command on just a subset of the
687 files/directories with these keys:
688
689 @table @kbd
690 @item O
691 Runs @code{cvs-mode-update} on the selected files. When run on the
692 top-level directory, this is equivalent to @kbd{M-u}.@refill
693
694 @item e
695 Runs @code{cvs-mode-examine} on the selected files. When run on the
696 top-level directory, this is equivalent to @kbd{M-e}.@refill
697
698 @findex cvs-status-mode
699 @item s
700 Runs @code{cvs-mode-status} on the selected files. When run on the
701 top-level directory, this is equivalent to @kbd{M-s}, except that
702 CVS output will be shown in a @samp{*cvs-info*} buffer that will be
703 put in @samp{cvs-status-mode}.@refill
704 @end table
705
706
707 @node Movement commands, Marking files, Updating the buffer, Commands
708 @section Movement Commands
709 @cindex Movement Commands
710 @findex cvs-mode-next-line
711 @findex cvs-mode-previous-line
712 @kindex SPC@r{--Move down one file}
713 @kindex n@r{--Move down one file}
714 @kindex p@r{--Move up one file}
715
716 You can use most normal Emacs commands to move forward and backward in
717 the buffer. Some keys are rebound to functions that take advantage of
718 the fact that the buffer is a PCL-CVS buffer:
719
720
721 @table @kbd
722 @item @key{SPC}
723 @itemx n
724 These keys move the cursor one file forward, towards the end of the
725 buffer (@code{cvs-mode-next-line}).@refill
726
727 @itemx p
728 This key moves one file backward, towards the beginning of the buffer
729 (@code{cvs-mode-previous-line}).
730 @end table
731
732
733 @node Marking files, Committing changes, Movement commands, Commands
734 @section Marking files
735 @cindex Selecting files (commands to mark files)
736 @cindex Marking files
737 @kindex m@r{--marking a file}
738 @kindex M@r{--marking all files}
739 @kindex u@r{--unmark a file}
740 @kindex ESC DEL@r{--unmark all files}
741 @kindex DEL@r{--unmark previous file}
742 @kindex %@r{--mark files matching regexp}
743 @kindex S@r{--mark files in a particular state}
744 @kindex T@r{--toggle marks}
745 @findex cvs-mode-mark
746 @findex cvs-mode-unmark
747 @findex cvs-mode-mark-all-files
748 @findex cvs-mode-unmark-all-files
749 @findex cvs-mode-unmark-up
750 @findex cvs-mode-mark-matching-files
751 @findex cvs-mode-mark-on-state
752 @findex cvs-mode-toggle-marks
753
754 PCL-CVS works on a set of @dfn{selected files} (@pxref{Selected files}).
755 You can mark and unmark files with these commands:
756
757 @table @kbd
758 @item m
759 This marks the file that the cursor is positioned on. If the cursor is
760 positioned on a directory all files in that directory are marked.
761 (@code{cvs-mode-mark}).@refill
762
763 @item u
764 Unmark the file that the cursor is positioned on. If the cursor is on a
765 directory, all files in that directory are unmarked.
766 (@code{cvs-mode-unmark}).@refill
767
768 @item M
769 Mark @emph{all} files in the buffer (@code{cvs-mode-mark-all-files}).
770
771 @item M-@key{DEL}
772 Unmark @emph{all} files (@code{cvs-mode-unmark-all-files}).
773
774 @item @key{DEL}
775 Unmark the file on the previous line, and move point to that line
776 (@code{cvs-mode-unmark-up}).
777
778 @item %
779 Mark all files matching a regular expression
780 (@code{cvs-mode-mark-matching-files}).
781
782 @item S
783 Mark all files in a particular state, such as ``Modified'' or
784 ``Removed''. (@code{cvs-mode-mark-on-state}).
785
786 @item T
787 Toggle use of marks for the next command (@code{cvs-mode-toggle-marks}).
788 @end table
789
790
791 @node Committing changes, Editing files, Marking files, Commands
792 @section Committing changes
793 @cindex Committing changes
794 @findex cvs-mode-commit
795 @findex cvs-mode-commit-setup
796 @kindex c@r{--commit files}
797 @kindex C@r{--commit files with @file{ChangeLog} message}
798 @vindex cvs-auto-revert@r{ (variable)}
799 @cindex Commit buffer
800 @cindex Edit buffer
801 @cindex Erasing commit message
802 @cindex Reverting buffers after commit
803
804 Committing changes basically works as follows:
805
806 @enumerate
807 @item
808 After having selected the files you want to commit, you type either
809 @kbd{c} or @kbd{C} which brings up a special buffer
810 @samp{*cvs-commit*}.@refill
811
812 @item
813 You type in the log message describing the changes you're about to
814 commit (@pxref{Log Edit Mode}).
815
816 @item
817 When you're happy with it, you type @kbd{C-c C-c} to do the actual
818 commit.@refill
819 @end enumerate
820
821 There's no hidden state, so you can abort the process or pick it up
822 again at any time.
823
824 @vindex log-edit-confirm@r{ (variable)}
825 The set of files actually committed is really decided only during the
826 very last step, which is a mixed blessing. It allows you to go back and
827 change your mind about which files to commit, but it also means that you
828 might inadvertently change the set of selected files. To reduce the
829 risk of error, @kbd{C-c C-c} will ask for confirmation if the set of
830 selected files has changed between the first step and the last. You can
831 change this last detail with @code{log-edit-confirm}.
832
833 As for the difference between @kbd{c} (i.e. @code{cvs-mode-commit}) and
834 @kbd{C} (i.e. @code{cvs-mode-commit-setup}) is that the first gets you
835 straight to @samp{*cvs-commit*} without erasing it or changing anything
836 to its content, while the second first erases @samp{*cvs-commit*}
837 and tries to initialize it with a sane default (it does that by either
838 using a template provided by the CVS administrator or by extracting a
839 relevant log message from a @file{ChangeLog} file).
840
841 If you are editing the files in your Emacs, an automatic
842 @samp{revert-buffer} will be performed. (If the file contains
843 @samp{$@asis{Id}$} keywords, @samp{cvs commit} will write a new file with
844 the new values substituted. The auto-revert makes sure that you get
845 them into your buffer). The revert will not occur if you have modified
846 your buffer, or if @samp{cvs-auto-revert} is set to
847 @samp{nil}.
848
849
850 @node Editing files, Getting info about files, Committing changes, Commands
851 @section Editing files
852 @cindex Editing files
853 @cindex Finding files
854 @cindex Loading files
855 @cindex Dired
856 @cindex Invoking dired
857 @findex cvs-mode-find-file
858 @findex cvs-mode-find-file-other-window
859 @findex cvs-mode-add-change-log-entry-other-window
860 @kindex f@r{--find file or directory}
861 @kindex o@r{--find file in other window}
862 @kindex A@r{--add @file{ChangeLog} entry}
863
864 There are currently three commands that can be used to find a file (that
865 is, load it into a buffer and start editing it there). These commands
866 work on the line that the cursor is situated at. They always ignore any marked
867 files.
868
869 @table @kbd
870 @item f
871 Find the file that the cursor points to (@code{cvs-mode-find-file}). If
872 the cursor points to a directory, run @code{dired} on that directory;
873 @inforef{Dired, , emacs}.
874
875 @item o
876 Like @kbd{f}, but use another window
877 (@code{cvs-mode-find-file-other-window}).@refill
878
879 @item A
880 Invoke @samp{add-change-log-entry-other-window} to edit a
881 @file{ChangeLog} file. The @file{ChangeLog} file will be found in the
882 directory of the file the cursor points to, or in a parent of that
883 directory. (@code{cvs-mode-add-change-log-entry-other-window}).@refill
884 @end table
885
886
887 @node Getting info about files, Adding and removing files, Editing files, Commands
888 @section Getting info about files
889 @cindex Status (cvs command)
890 @cindex Log (RCS/cvs command)
891 @cindex Getting status
892 @kindex l@r{--run @samp{cvs log}}
893 @kindex s@r{--run @samp{cvs status}}
894 @findex cvs-mode-log
895 @findex cvs-mode-status
896
897 @table @kbd
898 @item l
899 Call the command @code{cvs-mode-log} which runs @samp{cvs log} on all
900 selected files, and show the result in a temporary buffer
901 @samp{*cvs-info*} (@pxref{Log View Mode}).
902
903 @item s
904 Call the command @code{cvs-mode-status} which runs @samp{cvs status} on
905 all selected files, and show the result in a temporary buffer
906 @samp{*cvs-info*}.
907 @c Fixme: reinstate when node is written:
908 @c (@pxref{CVS Status Mode}).
909 @end table
910
911
912 @node Adding and removing files, Undoing changes, Getting info about files, Commands
913 @section Adding and removing files
914 @cindex Adding files
915 @cindex Removing files
916 @cindex Resurrecting files
917 @cindex Deleting files
918 @cindex Putting files under CVS control
919 @kindex a@r{--add a file}
920 @kindex r@r{--remove a file}
921 @findex cvs-mode-add
922 @findex cvs-mode-remove-file
923
924 The following commands are available to make it easy to add files to
925 and remove them from the CVS repository.
926
927 @table @kbd
928 @item a
929 Add all selected files. This command can be used on @samp{Unknown}
930 files (@pxref{Buffer contents}). The status of the file will change to
931 @samp{Added}, and you will have to use @kbd{c} (@samp{cvs-mode-commit}
932 @pxref{Committing changes}), to really add the file to the
933 repository.@refill
934
935 This command can also be used on @samp{Removed} files (before you commit
936 them) to resurrect them.
937
938 The command that is run is @code{cvs-mode-add}.
939
940 @item r
941 This command removes the selected files (after prompting for
942 confirmation). The files are deleted from your directory and
943 (unless the status was @samp{Unknown}; @pxref{Buffer contents}) they will
944 also be @samp{cvs remove}d. If the files' status was @samp{Unknown}
945 they will disappear from the buffer. Otherwise their status will change to
946 @samp{Removed}, and you must use @kbd{c} (@samp{cvs-mode-commit},
947 @pxref{Committing changes}) to commit the removal.@refill
948
949 The command that is run is @code{cvs-mode-remove-file}.
950 @end table
951
952
953 @node Undoing changes, Removing handled entries, Adding and removing files, Commands
954 @section Undoing changes
955 @cindex Undo changes
956 @cindex Flush changes
957 @kindex U@r{--undo changes}
958 @findex cvs-mode-undo-local-changes
959
960 @table @kbd
961 @item U
962 If you have modified a file, and for some reason decide that you don't
963 want to keep the changes, you can undo them with this command. It works
964 by removing your working copy of the file and then getting the latest
965 version from the repository (@code{cvs-mode-undo-local-changes}.
966 @end table
967
968
969 @node Removing handled entries, Ignoring files, Undoing changes, Commands
970 @section Removing handled entries
971 @cindex Expunging uninteresting entries
972 @cindex Uninteresting entries, getting rid of them
973 @cindex Getting rid of uninteresting lines
974 @cindex Removing uninteresting (processed) lines
975 @cindex Handled lines, removing them
976 @kindex x@r{--remove processed entries}
977 @kindex C-k@r{--remove selected entries}
978 @findex cvs-mode-remove-handled
979 @findex cvs-mode-acknowledge
980 @findex cvs-mode-ignore
981
982 @table @kbd
983 @item x
984 This command allows you to remove all entries that you have processed.
985 More specifically, the lines for @samp{Up-to-date} files (@pxref{Buffer
986 contents}) are removed from the buffer. If a directory becomes empty
987 the heading for that directory is also removed. This makes it easier to
988 get an overview of what needs to be done.
989
990 @vindex cvs-mode-remove-handled@r{ (variable)}
991 @kbd{x} invokes @code{cvs-mode-remove-handled}. If
992 @samp{cvs-auto-remove-handled} is set to non-@code{nil}, this will
993 automatically be performed after every commit.@refill
994
995 @item C-k
996 This command can be used for lines that @samp{cvs-mode-remove-handled} would
997 not delete, but that you want to delete (@code{cvs-mode-acknowledge}).
998 @end table
999
1000
1001 @node Ignoring files, Viewing differences, Removing handled entries, Commands
1002 @section Ignoring files
1003 @cindex Ignoring files
1004 @kindex i@r{--ignoring files}
1005 @findex cvs-mode-ignore
1006
1007 @table @kbd
1008 @item i
1009 Arrange so that CVS will ignore the selected files. The file names are
1010 added to the @file{.cvsignore} file in the corresponding directory. If
1011 the @file{.cvsignore} file doesn't exist, it will be created.
1012
1013 The @file{.cvsignore} file should normally be added to the repository,
1014 but you could ignore it as well, if you like it better that way.
1015
1016 This runs @code{cvs-mode-ignore}.
1017 @end table
1018
1019 @node Viewing differences, Invoking Ediff, Ignoring files, Commands
1020 @section Viewing differences
1021 @cindex Diff
1022 @cindex Invoking @code{diff}
1023 @cindex Conflicts, how to resolve them
1024 @cindex Viewing differences
1025 @kindex d=@r{--run @samp{cvs diff}}
1026 @kindex =@r{--run @samp{cvs diff}}
1027 @kindex db@r{--diff against base version}
1028 @kindex dh@r{--diff against head of repository}
1029 @kindex dv@r{--diff against vendor branch}
1030 @findex cvs-mode-diff
1031 @findex cvs-mode-diff-backup
1032 @findex cvs-mode-diff-head
1033 @findex cvs-mode-diff-vendor
1034 @vindex cvs-invert-ignore-marks@r{ (variable)}
1035
1036 @table @kbd
1037 @item =
1038 @itemx d =
1039 Display a @samp{cvs diff} between the selected files and the version
1040 that they are based on. (@code{cvs-mode-diff}).@refill
1041
1042 @item d b
1043 If CVS finds a conflict while merging two versions of a file (during a
1044 @samp{cvs update}, @pxref{Updating the buffer}) it will save the
1045 original file in a file called @file{.#@var{file}.@var{version}} where
1046 @var{file} is the name of the file, and @var{version} is the revision
1047 number that @var{file} was based on.@refill
1048
1049 With the @kbd{d b} command you can run a @samp{diff} on the files
1050 @file{.#@var{file}.@var{version}} and @file{@var{file}}.@refill
1051
1052 @item d h
1053 Display a @samp{cvs diff} between the selected files and the head
1054 revision in the repository (the most recent version on the current
1055 branch) (@code{cvs-mode-diff-head}).@refill
1056
1057 @item d v
1058 Display a @samp{cvs diff} between the selected files and the head
1059 revision of the vendor branch in the repository.
1060 (@code{cvs-mode-diff-vendor}).@refill
1061 @end table
1062
1063 By default, @samp{diff} commands ignore the marks. This can be changed
1064 with @code{cvs-invert-ignore-marks}.
1065
1066 @node Invoking Ediff, Updating files, Viewing differences, Commands
1067 @section Running ediff
1068 @cindex Ediff
1069 @cindex Invoking ediff
1070 @cindex Viewing differences
1071 @cindex Conflicts, how to resolve them
1072 @cindex Resolving conflicts
1073 @kindex e@r{--invoke @samp{ediff}}
1074 @findex cvs-mode-idiff
1075 @findex cvs-mode-imerge
1076
1077 @table @kbd
1078 @vindex cvs-idiff-imerge-handlers@r{ (variable)}
1079 @item d e
1080 This uses @code{ediff} (or @code{emerge}, depending on
1081 @samp{cvs-idiff-imerge-handlers}) to allow you to view diffs.
1082 If a prefix argument is given, PCL-CVS will prompt for a revision against
1083 which the diff should be made, else the default will be to use the BASE
1084 revision.
1085
1086 @cindex Merging with @code{ediff} and @code{emerge}
1087 @item d E
1088 This command use @code{ediff} (or @code{emerge}, see above) to allow you
1089 to do an interactive 3-way merge.
1090
1091 @strong{Note:} When the file status is @samp{Conflict},
1092 CVS has already performed a merge. The resulting file is not used in
1093 any way if you use this command. If you use the @kbd{q} command inside
1094 @samp{ediff} (to successfully terminate a merge) the file that CVS
1095 created will be overwritten.@refill
1096 @end table
1097
1098 @node Updating files, Tagging files, Invoking Ediff, Commands
1099 @section Updating files
1100 @findex cvs-mode-update
1101 @cindex Updating files
1102 @kindex O@r{--update files}
1103
1104 @table @kbd
1105 @item O
1106 Update all selected files with status @samp{Need-update} by running
1107 @samp{cvs update} on them. (@code{cvs-mode-update}).
1108 @end table
1109
1110
1111 @node Tagging files, Miscellaneous commands, Updating files, Commands
1112 @section Tagging files
1113 @findex cvs-mode-tag
1114 @findex cvs-mode-untag
1115 @findex cvs-rtag
1116 @cindex Tagging files
1117 @kindex M-t@r{--repository tag files}
1118 @kindex t@r{--tag files}
1119 @vindex cvs-invert-ignore-marks@r{ (variable)}
1120 @vindex cvs-force-dir-tag@r{ (variable)}
1121
1122 @table @kbd
1123 @item t
1124 Tag all selected files by running @samp{cvs tag} on
1125 them (@code{cvs-mode-tag}). It's usually preferable to tag a directory
1126 at a time. Rather than selecting all files (which too often doesn't
1127 select all files but only the few that are displayed), clear the
1128 selection with @kbd{M-DEL} (@code{cvs-mode-unmark-all-files}), position
1129 the cursor on the directory you want to tag and hit @kbd{t}.
1130 @end table
1131
1132 By default, @samp{tag} commands ignore the marks. This can be changed
1133 with @code{cvs-invert-ignore-marks}. Also, by default @samp{tag} can
1134 only be applied to directories, see @code{cvs-force-dir-tag} if you want
1135 to change this behavior.
1136
1137
1138 @node Miscellaneous commands, , Tagging files, Commands
1139 @section Miscellaneous commands
1140 @findex cvs-mode-byte-compile-files
1141 @cindex Recompiling elisp files
1142 @cindex Byte compilation
1143 @findex cvs-mode-delete-lock
1144 @cindex Getting rid of lock files
1145 @cindex Lock files
1146 @kindex q@r{--quit PCL-CVS}
1147 @findex cvs-mode-quit
1148 @cindex Quitting
1149 @kindex h@r{--help}
1150 @kindex ?@r{--help}
1151 @findex cvs-help
1152 @cindex Help
1153
1154 @table @kbd
1155 @item M-x cvs-mode-byte-compile-files
1156 Byte compile all selected files that end in @file{.el}.
1157
1158 @item M-x cvs-mode-delete-lock
1159 This command deletes the lock files that
1160 the @samp{*cvs*} buffer informs you about. You should normally never have to
1161 use this command, since CVS tries very carefully to always remove the
1162 lock files itself.
1163
1164 You can only use this command when a message in the @samp{*cvs*} buffer tells
1165 you so. You should wait a while before using this command in case
1166 someone else is running a @code{cvs} command.
1167
1168 Also note that this only works if the repository is local.
1169
1170 @item ?
1171 @itemx h
1172 Show a summary of common command key bindings in the echo
1173 area (@code{cvs-help}).
1174
1175 @item q
1176 Quit PCL-CVS, killing the @samp{*cvs*} buffer (@code{cvs-mode-quit}).
1177 @end table
1178
1179 @node Log Edit Mode, Log View Mode, Commands, Top
1180 @chapter Editing a Log Message
1181
1182 @cindex Log Edit mode
1183 @cindex mode, Log Edit
1184 Buffers for entering/editing log messages for changes which are about
1185 to be committed are put into Log Edit mode.
1186
1187 Sometimes the log buffer contains default text when you enter it,
1188 typically the last log message entered. If it does, mark and point
1189 are set around the entire contents of the buffer so that it is easy to
1190 kill the contents of the buffer with @kbd{C-w}.
1191
1192 @findex log-edit-insert-changelog
1193 If you work by writing entries in the @file{ChangeLog}
1194 (@pxref{(emacs)Change Log}) and then commit the change under revision
1195 control, you can generate the Log Edit text from the ChangeLog using
1196 @kbd{C-a C-a} (@kbd{log-edit-insert-changelog}). This looks for
1197 entries for the file(s) concerned in the top entry in the ChangeLog
1198 and uses those paragraphs as the log text. This text is only inserted
1199 if the top entry was made under your user name on the current date.
1200 @xref{(emacs)Change Logs and VC}, for the opposite way of
1201 working---generating ChangeLog entries from the revision control log.
1202
1203 In the Log Edit buffer, @kbd{C-c C-f} (@kbd{M-x log-edit-show-files})
1204 shows the list of files to be committed in case you need to check
1205 that.
1206
1207 When you have finished editing the log message, type @kbd{C-c C-c} to
1208 exit the buffer and commit the change.
1209
1210 @c Fixme: customization variables
1211
1212 @node Log View Mode, Customization, Log Edit Mode, Top
1213 @chapter Browsing a Log of Changes
1214
1215 @cindex Log View mode
1216 @cindex mode, Log View
1217 @cindex output, logs
1218
1219 @findex cvs-mode-log
1220 @findex vc-print-log
1221 Log View mode provides a few useful commands for navigating revision
1222 control log output. It is used for the output buffers of both
1223 @code{cvs-mode-log} and @code{vc-print-log}.
1224
1225 In this mode, @kbd{n} goes to the next message and @kbd{p} goes to the
1226 previous message and @kbd{N} and @kbd{P} go to the next and previous
1227 files, respectively, in multi-file output. With a numeric prefix
1228 argument, these commands move that many messages of files.
1229
1230 @c @node CVS Status Mode
1231 @c @chapter Viewing CVS' Status output
1232
1233 @node Customization, Bugs, Log View Mode, Top
1234 @chapter Customization
1235 @vindex log-edit-changelog-full-paragraphs@r{ (variable)}
1236 @vindex cvs-auto-remove-handled@r{ (variable)}
1237 @vindex cvs-auto-remove-directories@r{ (variable)}
1238 @vindex cvs-update-prog-output-skip-regexp@r{ (variable)}
1239 @vindex cvs-cvsroot@r{ (variable)}
1240 @vindex cvs-auto-revert@r{ (variable)}
1241 @vindex log-edit-require-final-newline@r{ (variable)}
1242 @vindex cvs-sort-ignore-file@r{ (variable)}
1243 @cindex Customization
1244 @cindex Variables, list of all
1245 @cindex Erasing input buffer
1246 @cindex Context diff, how to get
1247 @cindex Unidiff, how to get
1248 @cindex Automatically remove handled files
1249 @cindex @samp{-u} option in modules file
1250 @cindex Modules file (@samp{-u} option)
1251 @cindex Update program (@samp{-u} option in modules file)
1252 @cindex Reverting buffers after commit
1253 @cindex Require final newline
1254 @cindex Automatically inserting newline
1255 @cindex Commit message, inserting newline
1256 @cindex Sorting @file{.cvsignore} file
1257 @cindex @file{.cvsignore} file, sorting
1258 @cindex Automatically sorting @file{.cvsignore}
1259 @cindex @samp{CVSROOT}, overriding
1260
1261 If you have an idea about any customization that would be handy but
1262 isn't present in this list, please tell me!
1263 For info on how to reach me, see @ref{Bugs}.@refill
1264
1265 @table @samp
1266 @item cvs-auto-remove-handled
1267 If this variable is set to any non-@code{nil} value,
1268 @samp{cvs-mode-remove-handled} will be called every time you check in
1269 files, after the check-in is ready. @xref{Removing handled
1270 entries}.@refill
1271
1272 @item cvs-auto-remove-directories
1273 If this variable is set to any non-@code{nil} value, directories that do
1274 not contain any files to be checked in will not be listed in the
1275 @samp{*cvs*} buffer.@refill
1276
1277 @item cvs-auto-revert
1278 If this variable is set to any non-@samp{nil} value any buffers you have
1279 that visit a file that is committed will be automatically reverted.
1280 This variable defaults to @samp{t}. @xref{Committing changes}.@refill
1281
1282 @item cvs-update-prog-output-skip-regexp
1283 The @samp{-u} flag in the @file{modules} file can be used to run a command
1284 whenever a @samp{cvs update} is performed (see @code{cvs(5)}). This regexp
1285 is used to search for the last line in that output. It is normally set
1286 to @samp{$}. That setting is only correct if the command outputs
1287 nothing. Note that PCL-CVS will get very confused if the command
1288 outputs @emph{anything} to @code{stderr}.
1289
1290 @item cvs-cvsroot
1291 This variable can be set to override @samp{CVSROOT}. It should be a
1292 string. If it is set, then every time a @code{cvs} command is run, it
1293 will be called as @samp{cvs -d @var{cvs-cvsroot}@dots{}}. This can be
1294 useful if your site has several repositories.
1295
1296 @item log-edit-require-final-newline
1297 @c wordy to avoid unhderfull hbox
1298 When you enter a log message by typing into the
1299 @samp{*cvs-commit-message*} buffer, PCL-CVS normally automatically
1300 inserts a trailing newline, unless there already is one. This behavior
1301 can be controlled via @samp{cvs-commit-buffer-require-final-newline}.
1302 If it is @samp{t} (the default behavior), a newline will always be
1303 appended. If it is @samp{nil}, newlines will never be appended. Any
1304 other value causes PCL-CVS to ask the user whenever there is no trailing
1305 newline in the commit message buffer.
1306
1307 @findex cvs-mode-changelog-commit
1308 @item log-edit-changelog-full-paragraphs
1309 If this variable is non-@code{nil}, include full @file{ChangeLog}
1310 paragraphs in the CVS log created by @samp{cvs-mode-changelog-commit}.
1311 This may be set in the local variables section of a @file{ChangeLog}
1312 file, to indicate the policy for that @file{ChangeLog}.
1313
1314 @cindex @file{ChangeLog} paragraphs
1315 A @dfn{@file{ChangeLog} paragraph} is a bunch of log text containing no
1316 blank lines; a paragraph usually describes a set of changes with a
1317 single purpose, but perhaps spanning several functions in several files.
1318 Changes in different paragraphs are unrelated.
1319
1320 You could argue that the CVS log entry for a file should contain the
1321 full @file{ChangeLog} paragraph mentioning the change to the file, even though
1322 it may mention other files, because that gives you the full context you
1323 need to understand the change. This is the behavior you get when this
1324 variable is set to @code{t}, the default.
1325
1326 On the other hand, you could argue that the CVS log entry for a change
1327 should contain only the text for the changes which occurred in that
1328 file, because the CVS log is per-file. This is the behavior you get
1329 when this variable is set to @code{nil}.
1330
1331 @findex cvs-mode-ignore@r{, and @file{.cvsignore} sorting}
1332 @item cvs-sort-ignore-file
1333 If this variable is set to any non-@samp{nil} value, the
1334 @file{.cvsignore} file will always be sorted whenever you use
1335 @samp{cvs-mode-ignore} to add a file to it. This option is on by
1336 default.
1337 @end table
1338
1339
1340 @menu
1341 * Customizing Faces::
1342 @end menu
1343
1344 @node Customizing Faces, , Customization, Customization
1345 @section Customizing Faces
1346 @vindex cvs-header-face (face)
1347 @vindex cvs-filename-face (face)
1348 @vindex cvs-unknown-face (face)
1349 @vindex cvs-handled-face (face)
1350 @vindex cvs-need-action-face (face)
1351 @vindex cvs-marked-face (face)
1352
1353 PCL-CVS adds a few extra features, including menus, mouse bindings, and
1354 fontification the @samp{*cvs*} buffer. The faces defined for
1355 fontification are listed below:
1356
1357 @table @samp
1358 @item cvs-header-face
1359 used to highlight directory changes.
1360
1361 @item cvs-filename-face
1362 used to highlight file names.
1363
1364 @item cvs-unknown-face
1365 used to highlight the status of files which are @samp{Unknown}.
1366
1367 @item cvs-handled-face
1368 used to highlight the status of files which are handled and
1369 need no further action.
1370
1371 @item cvs-need-action-face
1372 used to highlight the status of files which still need action.
1373
1374 @item cvs-marked-face
1375 used to highlight the marked file indicator (@samp{*}).
1376 @end table
1377
1378
1379 @node Bugs, Function and Variable Index, Customization, Top
1380 @chapter Bugs (known and unknown)
1381 @cindex Reporting bugs and ideas
1382 @cindex Bugs, how to report them
1383 @cindex Author, how to reach
1384 @cindex Email to the author
1385 @cindex Known bugs
1386 @cindex Bugs, known
1387 @cindex FAQ
1388 @cindex Problems, list of common
1389
1390 If you find a bug or misfeature, don't hesitate to tell us! Send email
1391 to @email{bug-gnu-emacs@@gnu.org} which is gatewayed to the newsgroup
1392 @samp{gnu.emacs.bugs}. Feature requests should also be sent there. We
1393 prefer discussing one thing at a time. If you find several unrelated
1394 bugs, please report them separately. If you are running PCL-CVS under
1395 XEmacs, you should also send a copy of bug reports to
1396 @email{xemacs-beta@@xemacs.org}.
1397
1398 If you have problems using PCL-CVS or other questions, send them to
1399 @email{help-gnu-emacs@@gnu.org}, which is gatewayed to the
1400 @samp{gnu.emacs.help} newsgroup. This is a good place to get help, as
1401 is @email{cvs-info@@gnu.org}, gatewayed to @samp{gnu.cvs.help}.
1402
1403 If you have ideas for improvements, or if you have written some
1404 extensions to this package, we would like to hear from you. We hope that
1405 you find this package useful!
1406
1407 Below is a partial list of currently known problems with PCL-CVS.
1408
1409 @table @asis
1410 @item Unexpected output from CVS
1411 Unexpected output from CVS may confuse PCL-CVS. It will create
1412 warning messages in the @samp{*cvs*} buffer alerting you to any parse errors.
1413 If you get these messages, please send a bug report to the email
1414 addresses listed above. Include the contents of the @samp{*cvs*} buffer, the
1415 output of the CVS process (which should be found in the @samp{ *cvs-tmp*}
1416 buffer), and the versions of Emacs, PCL-CVS and CVS you are using.
1417 @end table
1418
1419 @node Function and Variable Index, Concept Index, Bugs, Top
1420 @unnumbered Function and Variable Index
1421
1422 This is an index of all the functions and variables documented in this
1423 manual.
1424
1425 @printindex fn
1426
1427 @node Concept Index, Key Index, Function and Variable Index, Top
1428 @unnumbered Concept Index
1429
1430 This is an index of concepts discussed in this manual.
1431
1432 @printindex cp
1433
1434 @node Key Index, , Concept Index, Top
1435 @unnumbered Key Index
1436
1437 This index includes an entry for each PCL-CVS key sequence documented in
1438 this manual.
1439
1440 @printindex ky
1441
1442 @setchapternewpage odd
1443 @summarycontents
1444 @contents
1445 @bye