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