]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/cvs/tools/pcl-cvs/pcl-cvs.texinfo
Generate version.c on the fly rather than using a generated file.
[FreeBSD/FreeBSD.git] / contrib / cvs / tools / pcl-cvs / pcl-cvs.texinfo
1 \input texinfo  @c -*-texinfo-*-
2
3 @comment OrigId: pcl-cvs.texinfo,v 1.45 1993/05/31 22:38:15 ceder Exp 
4 @comment @@(#)cvs/contrib/pcl-cvs:$Name:  $:$Id: pcl-cvs.texinfo,v 1.1 1996/04/14 15:18:04 kfogel Exp $
5
6 @comment Documentation for the GNU Emacs CVS mode.
7 @comment Copyright (C) 1992 Per Cederqvist
8
9 @comment This file is part of the pcl-cvs distribution.
10
11 @comment Pcl-cvs is free software; you can redistribute it and/or modify
12 @comment it under the terms of the GNU General Public License as published by
13 @comment the Free Software Foundation; either version 1, or (at your option)
14 @comment any later version.
15
16 @comment Pcl-cvs is distributed in the hope that it will be useful,
17 @comment but WITHOUT ANY WARRANTY; without even the implied warranty of
18 @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 @comment GNU General Public License for more details.
20
21 @comment You should have received a copy of the GNU General Public License
22 @comment along with pcl-cvs; see the file COPYING.  If not, write to
23 @comment the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24
25 @setfilename pcl-cvs.info
26 @settitle Pcl-cvs - The Emacs Front-End to CVS
27 @setchapternewpage on
28      
29 @ifinfo
30 Copyright @copyright{} 1992 Per Cederqvist
31
32 Permission is granted to make and distribute verbatim copies of
33 this manual provided the copyright notice and this permission notice
34 are preserved on all copies.
35
36 @ignore
37 Permission is granted to process this file through Tex and print the
38 results, provided the printed document carries copying permission
39 notice identical to this one except for the removal of this paragraph
40 (this paragraph not being relevant to the printed manual).
41
42 @end ignore
43 Permission is granted to copy and distribute modified versions of this
44 manual under the conditions for verbatim copying, provided also that the
45 section entitled ``GNU General Public License'' is included exactly as
46 in the original, and provided that the entire resulting derived work is
47 distributed under the terms of a permission notice identical to this one.
48
49 Permission is granted to copy and distribute translations of this manual
50 into another language, under the above conditions for modified versions,
51 except that the section entitled ``GNU General Public License'' and
52 this permission notice may be included in translations approved by the
53 Free Software Foundation instead of in the original English.
54 @end ifinfo
55
56 @synindex vr fn     
57 @comment The titlepage section does not appear in the Info file.
58 @titlepage
59 @sp 4
60 @comment The title is printed in a large font.
61 @center @titlefont{User's Guide}
62 @sp
63 @center @titlefont{to}
64 @sp
65 @center @titlefont{pcl-cvs - the Emacs Front-End to CVS}
66 @sp 2
67 @center release 1.05-CVS-$Name:  $
68 @comment -release-
69 @sp 3
70 @center Per Cederqvist
71 @sp 3
72 @center last updated 20 Nov 1995
73 @comment -date-
74
75 @comment  The following two commands start the copyright page
76 @comment  for the printed manual.  This will not appear in the Info file.
77 @page
78 @vskip 0pt plus 1filll
79 Copyright @copyright{} 1992 Per Cederqvist
80
81 Permission is granted to make and distribute verbatim copies of
82 this manual provided the copyright notice and this permission notice
83 are preserved on all copies.
84
85 Permission is granted to copy and distribute modified versions of this
86 manual under the conditions for verbatim copying, provided also that the
87 section entitled ``GNU General Public License'' is included exactly as
88 in the original, and provided that the entire resulting derived work is
89 distributed under the terms of a permission notice identical to this one.
90
91 Permission is granted to copy and distribute translations of this manual
92 into another language, under the above conditions for modified versions,
93 except that the section entitled ``GNU General Public License'' and
94 this permission notice may be included in translations approved by the
95 Free Software Foundation instead of in the original English.
96 @end titlepage
97
98 @comment ================================================================
99 @comment                   The real text starts here
100 @comment ================================================================
101
102 @node    Top, Installation, (dir), (dir)
103 @comment node-name, next, previous, up
104
105
106 @ifinfo
107 This info manual describes pcl-cvs which is a GNU Emacs front-end to
108 CVS.  It works with CVS versions 1.5 through 1.7 and newer, and possibly
109 CVS-1.3 and CVS-1.4A2.  This manual is updated to release
110 1.05-CVS-$Name:  $ of pcl-cvs.
111 @end ifinfo
112 @comment -release-
113
114 @menu
115 * Installation::                How to install pcl-cvs on your system.
116 * About pcl-cvs::               Authors and ftp sites.
117
118 * Getting started::             An introduction with a walk-through example.
119 * Buffer contents::             An explanation of the buffer contents.
120 * Commands::                    All commands, grouped by type.
121
122 * Customization::               How you can tailor pcl-cvs to suit your needs.
123 * Future enhancements::         Future enhancements of pcl-cvs.
124 * Bugs::                        Bugs (known and unknown).
125 * COPYING::                     GNU General Public License
126 * Function and Variable Index::  List of functions and variables.
127 * Concept Index::               List of concepts.
128 * Key Index::                   List of keystrokes.
129
130  --- The Detailed Node Listing ---
131
132 Installation
133
134 * Pcl-cvs installation::        How to install pcl-cvs on your system.
135 * On-line manual installation::  How to install the on-line manual.
136 * Typeset manual installation::  How to create typeset documentation 
137                                  about pcl-cvs.
138
139 About pcl-cvs
140
141 * Contributors::                Contributors to pcl-cvs.
142 * Archives::                    Where can I get a copy of Pcl-Cvs?
143
144 Buffer contents
145
146 * File status::                 The meaning of the second field.
147 * Selected files::              How selection works.
148
149 Commands
150
151 * Updating the directory::      Commands to update the local directory
152 * Movement commands::           How to move up and down in the buffer
153 * Marking files::               How to mark files that other commands
154                                 will later operate on.
155 * Committing changes::          Checking in your modifications to the
156                                 CVS repository.
157 * Editing files::               Loading files into Emacs.
158 * Getting info about files::    Display the log and status of files.
159 * Adding and removing files::   Adding and removing files
160 * Undoing changes::             Undoing changes
161 * Removing handled entries::    Uninteresting lines can easily be removed.
162 * Ignoring files::              Telling CVS to ignore generated files.
163 * Viewing differences::         Commands to @samp{diff} different versions.
164 * Invoking Ediff::              Running @samp{ediff} from @samp{*cvs*} buffer.
165 * Invoking Emerge::             Running @samp{emerge} from @samp{*cvs*} buffer.
166 * Reverting your buffers::      Reverting your buffers
167 * Miscellaneous commands::      Miscellaneous commands
168 @end menu
169
170
171 @node   Installation, About pcl-cvs, Top, Top
172 @comment  node-name, next, previous, up
173
174 @chapter Installation
175 @cindex Installation
176
177 This section describes the installation of pcl-cvs, the GNU Emacs CVS
178 front-end.  You should install not only the elisp files themselves, but
179 also the on-line documentation so that your users will know how to use
180 it.  You can create typeset documentation from the file
181 @file{pcl-cvs.texinfo} as well as an on-line info file.  The following
182 steps are also described in the file @file{INSTALL} in the source
183 directory.
184
185 @menu
186 * Pcl-cvs installation::        How to install pcl-cvs on your system.
187 * On-line manual installation::  How to install the on-line manual.
188 * Typeset manual installation::  How to create typeset documentation 
189                                  about pcl-cvs.
190 @end menu
191
192
193 @node     Pcl-cvs installation, On-line manual installation, Installation, Installation
194 @comment  node-name,  next,  previous,  up
195 @section Installation of the pcl-cvs program
196 @cindex Installation of elisp files
197
198 @enumerate
199 @item
200 Possibly edit the file @file{Makefile} to reflect the situation at your
201 site.  We say "possibly" because the version of pcl-cvs included with
202 CVS uses a configuration mechanism integrated with the overall
203 mechanisms used by the CVS build and install procedures.  Thus the file
204 @code{Makefile} will be generated automatically from the file
205 @code{Makefile.in}, and it should not be necessary to edit it further.
206
207 If you do have to edit the @file{Makefile}, the only things you have to
208 change is the definition of @code{lispdir} and @code{infodir}.  The
209 elisp files will be copied to @code{lispdir}, and the info file(s) to
210 @code{infodir}.
211
212 @item
213 Configure pcl-cvs.el
214
215 There are a couple of pathnames that you have to check to make sure that
216 they match your system.  They appear early in the file
217 @samp{pcl-cvs.el}.
218
219 @strong{NOTE:}  If your system is running emacs 18.57 or earlier you MUST
220 uncomment the line that says:
221 @example
222 (setq delete-exited-processes nil)
223 @end example
224
225 Setting @code{delete-exited-processes} to @code{nil} works around a bug
226 in emacs that causes it to dump core.  The bug was fixed in emacs
227 18.58.@refill
228
229 @item
230 Release 1.05 and later of pcl-cvs requires parts of the Elib library,
231 version 1.0 or later.  Elib is available via anonymous ftp from
232 prep.ai.mit.edu in @file{pub/gnu/elib-1.0.tar.gz}, and from a lot of
233 other sites that mirror prep.  Get Elib, and install it, before
234 proceeding.
235
236 @strong{NOTE:} The version of pcl-cvs included with CVS includes a copy
237 of Elib in the sub-directory @file{elib} under the
238 @file{contrib/pcl-cvs} directory.
239
240 @item
241 Type @samp{make install} in the source directory.  This will
242 byte-compile all @file{.el} files and copy the @file{*.elc} files into
243 the directory you specified in step 1.
244
245 If you want to install the @file{*.el} files too, you can type
246 @samp{make install-el} to do so.
247
248 If you only want to create the compiled elisp files, but don't want to
249 install them, you can type @samp{make} without parameters.
250
251 @item
252 Edit the file @file{default.el} in your emacs lisp directory (usually
253 @file{/usr/gnu/lib/emacs/site-lisp} or something similar) and enter the
254 contents of the file @file{pcl-cvs-startup.el} into it.  It contains a
255 couple of @code{auto-load}s that facilitates the use of pcl-cvs.
256
257 @end enumerate
258
259
260 @node On-line manual installation, Typeset manual installation, Pcl-cvs installation, Installation
261 @comment  node-name,  next,  previous,  up
262
263 @section Installation of the on-line manual.
264 @cindex Manual installation (on-line)
265 @cindex Installation of on-line manual
266 @cindex Generating the on-line manual
267 @cindex On-line manual (how to generate)
268 @cindex Info-file (how to generate)
269
270 @enumerate
271 @item
272 Create the info file(s) @file{pcl-cvs.info*} from @file{pcl-cvs.texinfo}
273 by typing @samp{make info}.  If you don't have the program
274 @samp{makeinfo} you can get it by anonymous ftp from
275 e.g. @samp{prep.ai.mit.edu} as @file{pub/gnu/texinfo-3.7.tar.gz} (there
276 might be a newer version there when you read this).@refill
277
278 @item
279 Install the info file(s) @file{pcl-cvs.info*} into your standard
280 @file{info} directory.  You should be able to do this by typing
281 @samp{make install-info}.@refill
282
283 @item
284 Edit the file @file{dir} in the @file{info} directory and enter one line
285 to contain a pointer to the info file(s) @file{pcl-cvs.info*}.  The line
286 can, for instance, look like this:@refill
287
288 @example
289 * Pcl-cvs: (pcl-cvs).           An Emacs front-end to CVS.
290 @end example
291 @end enumerate
292
293
294 @node Typeset manual installation,  , On-line manual installation, Installation
295 @comment  node-name,  next,  previous,  up
296
297 @section How to make typeset documentation from pcl-cvs.texinfo
298 @cindex Manual installation (typeset)
299 @cindex Installation of typeset manual
300 @cindex Printing a manual
301 @cindex TeX - generating a typeset manual
302 @cindex Generating a typeset manual
303
304 If you have @TeX{} installed at your site, you can make a typeset manual
305 from @file{pcl-cvs.texinfo}.
306
307 @enumerate
308 @item
309 Run @TeX{} by typing `@samp{make pcl-cvs.dvi}'.  You will not get the
310 indices unless you have the @code{texindex} program.
311
312 @item
313 Convert the resulting device independent file @file{pcl-cvs.dvi} to a
314 form which your printer can output and print it.  If you have a
315 postscript printer there is a program, @code{dvi2ps}, which does.  There
316 is also a program which comes together with @TeX{}, @code{dvips}, which
317 you can use.
318
319 @end enumerate
320
321
322 @node     About pcl-cvs, Getting started, Installation, Top
323 @comment  node-name,     next, previous, up
324
325 @chapter About pcl-cvs
326 @cindex About pcl-cvs
327
328 Pcl-cvs is a front-end to CVS versions 1.5 through 1.7 and newer; and
329 possibly verison 1.3 and 1.4A2.  It integrates the most frequently used
330 CVS commands into an emacs interface.
331
332 @menu
333 * Contributors::                Contributors to pcl-cvs.
334 * Archives::                    Where can I get a copy of Pcl-Cvs?
335 @end menu
336
337
338 @node     Contributors, Archives, About pcl-cvs, About pcl-cvs
339 @comment  node-name,  next,  previous,  up
340
341 @section Contributors to pcl-cvs
342 @cindex Contributors
343 @cindex Authors
344
345 Contributions to the package are welcome.  I have limited time to work
346 on this project, but I will gladly add any code that you contribute to
347 me to this package (@pxref{Bugs}).
348
349 The following persons have made contributions to pcl-cvs.
350
351 @itemize @bullet
352 @item
353 Brian Berliner wrote CVS, together with some other contributors.
354 Without his work on CVS this package would be useless@dots{}
355
356 @item
357 Per Cederqvist wrote most of the otherwise unattributed functions in
358 pcl-cvs as well as all documentation.
359
360 @item
361 Inge Wallin (@samp{inge@@lysator.liu.se}) wrote the skeleton to
362 @file{pcl-cvs.texinfo}, and gave useful comments on it.  He also wrote
363 the files @file{elib-node.el} and @file{compile-all.el}.  The file
364 @file{cookie.el} was inspired by Inge.@refill
365
366 @item
367 Linus Tolke (@samp{linus@@lysator.liu.se}) contributed useful comments
368 on both the functionality and the documentation.@refill
369
370 @item
371 Jamie Zawinski (@samp{jwz@@lucid.com}) contributed
372 @file{pcl-cvs-lucid.el}.
373
374 @item
375 Leif Lonnblad contributed RCVS support.  (Since superceded by the new
376 remote CVS support.)
377
378 @item
379 Jim Blandy (@samp{jimb@@cyclic.com}) contributed hooks to automatically
380 guess CVS log entries from ChangeLog contents; and initial support of
381 the new Cygnus / Cyclic remote CVS; as well as various sundry bug fixes
382 and cleanups.
383
384 @item
385 Jim Kingdon (@samp{kingdon@@cyclic.com}) contributed lots of fixes to
386 the build and install procedure.
387
388 @item
389 Greg A. Woods (@samp{woods@@planix.com}) contributed code to implement
390 the use of per-file diff buffers; and vendor join diffs with emerge and
391 ediff; as well as various an sundry bug fixes and cleanups.
392 @end itemize
393
394 Apart from these, a lot of people have send me suggestions, ideas,
395 requests, bug reports and encouragement.  Thanks a lot!  Without your
396 there would be no new releases of pcl-cvs.
397
398
399 @node     Archives,  , Contributors, About pcl-cvs
400 @comment  node-name,  next,  previous,  up
401
402 @section Where can I get pcl-cvs?
403 @cindex Sites
404 @cindex Archives
405 @cindex Ftp-sites
406 @cindex Getting pcl-cvs
407 @cindex Email archives
408
409 The current release of pcl-cvs is included in CVS-1.7.
410
411 The author's release of pcl-cvs can be fetched via anonymous ftp from
412 @code{ftp.lysator.liu.se}, (IP no. 130.236.254.1) in the directory
413 @code{pub/emacs}.  If you don't live in Scandinavia you should probably
414 check with archie to see if there is a site closer to you that archives
415 pcl-cvs.
416
417 New releases will be announced to appropriate newsgroups.  If you send
418 your email address to me I will add you to my list of people to mail
419 when I make a new release.
420
421
422 @node Getting started, Buffer contents, About pcl-cvs, Top
423 @comment  node-name,  next,  previous,  up
424
425 @chapter Getting started
426 @cindex Introduction
427 @cindex Example run
428
429 This document assumes that you know what CVS is, and that you at least
430 knows the fundamental concepts of CVS.  If that is not the case you
431 should read the man page for CVS.
432
433 Pcl-cvs is only useful once you have checked out a module.  So before
434 you invoke it you must have a copy of a module somewhere in the file
435 system.
436
437 You invoke pcl-cvs by typing @kbd{M-x cvs-update RET}.  If your emacs
438 responds with @samp{[No match]} your system administrator has not
439 installed pcl-cvs properly.  Try @kbd{M-x load-library RET pcl-cvs RET}.
440 If that also fails - talk to your root.  If it succeeds you might put
441 this line in your @file{.emacs} file so that you don't have to type the
442 @samp{load-library} command every time you wish to use pcl-cvs:
443
444 @example
445 (autoload 'cvs-update "pcl-cvs" nil t)
446 @end example
447
448 The function @code{cvs-update} will ask for a directory.  The command
449 @samp{cvs update} will be run in that directory.  (It should contain
450 files that have been checked out from a CVS archive.)  The output from
451 @code{cvs} will be parsed and presented in a table in a buffer called
452 @samp{*cvs*}.  It might look something like this:
453
454 @example
455 PCL-CVS release 1.05-CVS-$Name:  $.
456 @comment -release-
457
458 In directory /users/ceder/FOO/test:
459   Updated     bar
460   Updated     file.txt
461   Modified ci namechange
462   Updated     newer
463
464 In directory /users/ceder/FOO/test/sub:
465   Modified ci ChangeLog
466 ---------- End -----
467 @end example
468
469 In this example the two files (@file{bar}, @file{file.txt}, and
470 @file{newer}) that are marked with @samp{Updated} have been copied from
471 the CVS repository to @file{/users/ceder/FOO/test/} since someone else
472 have checked in newer versions of them.  Two files (@file{namechange}
473 and @file{sub/ChangeLog}) have been modified locally, and needs to be
474 checked in.
475
476 You can move the cursor up and down in the buffer with @kbd{C-n} and
477 @kbd{C-p} or @kbd{n} and @kbd{p}.  If you press @kbd{c} on one of the
478 @samp{Modified} files that file will be checked in to the CVS
479 repository.  @xref{Committing changes}.  You can press @kbd{x} to get rid
480 of the "uninteresting" files that have only been @samp{Updated} (and
481 don't require any further action from you).@refill
482
483 You can also easily get a @samp{diff} between your modified file and the
484 base version that you started from, and you can get the output from
485 @samp{cvs log} and @samp{cvs status} on the listed files simply by
486 pressing a key (@pxref{Getting info about files}).
487
488
489 @node Buffer contents, Commands, Getting started, Top
490 @comment  node-name,  next,  previous,  up
491
492 @chapter Buffer contents
493 @cindex Buffer contents
494
495 The display contains four columns.  They contain, from left to right:
496
497 @itemize @bullet
498 @item
499 An asterisk when the file is @dfn{marked} (@pxref{Selected
500 files}).@refill
501 @item
502 The status of the file.  See @xref{File status}, for more
503 information.@refill
504 @item
505 A "need to be checked in"-marker (@samp{ci}).
506 @item
507 The file name.
508 @end itemize
509
510 @menu
511 * File status::                 The meaning of the second field.
512 * Selected files::              How selection works.
513 @end menu
514
515
516 @node File status, Selected files, Buffer contents, Buffer contents
517 @comment  node-name,  next,  previous,  up
518
519 @section File status
520 @cindex File status
521 @cindex Updated (file status)
522 @cindex Patched (file status)
523 @cindex Modified (file status)
524 @cindex Merged (file status)
525 @cindex Conflict (file status)
526 @cindex Added (file status)
527 @cindex Removed (file status)
528 @cindex Unknown (file status)
529 @cindex Removed from repository (file status)
530 @cindex Removed from repository, changed by you (file status)
531 @cindex Removed by you, changed in repository (file status)
532 @cindex Move away @var{file} - it is in the way (file status)
533 @cindex This repository is missing!@dots{} (file status)
534
535 The @samp{file status} field can have the following values:
536
537 @table @samp
538
539 @item Updated
540 The file was brought up to date with respect to the repository.  This is
541 done for any file that exists in the repository but not in your source,
542 and for files that you haven't changed but are not the most recent
543 versions available in the repository.@refill
544
545 @item Patched
546 The file was brought up to date with respect to a remote repository by
547 way of fetching and applying a patch to the file in your source.  This
548 is done for any file that exists in a remote repository and in your
549 source; of which you haven't changed locally but is not the most recent
550 version available in the remote repository.@refill
551
552 @item Modified
553 The file is modified in  your  working  directory, and there was no
554 modification to the same file in the repository.@refill
555
556 @item Merged
557 The file is modified in your working directory, and there were
558 modifications in the repository as well as in your copy, but they were
559 merged successfully, without conflict, in your working directory.@refill
560
561 @item Conflict
562 A conflict was detected while trying to merge your changes to @var{file}
563 with changes from the source repository.  @var{file} (the copy in your
564 working directory) is now the output of the @samp{rcsmerge} command on
565 the two versions; an unmodified copy of your file is also in your
566 working directory, with the name @file{.#@var{file}.@var{version}},
567 where @var{version} is the RCS revision that your modified file started
568 from.  @xref{Viewing differences}, for more details.@refill
569
570 @item Added
571 The file has been added by you, but it still needs to be checked in to
572 the repository.@refill
573
574 @item Removed
575 The file has been removed by you, but it needs to be checked in to the
576 repository.  You can resurrect it by typing @kbd{a} (@pxref{Adding and
577 removing files}).@refill
578
579 @item Unknown
580 A file that was detected in your directory, but that neither appears in
581 the repository, nor is present on the list of files that CVS should
582 ignore.@refill
583
584 @end table
585
586 There are also a few special cases, that rarely occur, which have longer
587 strings in the fields:
588
589 @table @samp
590 @item Removed from repository
591 The file has been removed from your directory since someone has removed
592 it from the repository.  (It is still present in the Attic directory, so
593 no permanent loss has occurred).  This, unlike the other entries in this
594 table, is not an error condition.@refill
595
596 @item Removed from repository, changed by you
597 You have modified a file that someone have removed from the repository.
598 You can correct this situation by removing the file manually (see
599 @pxref{Adding and removing files}).@refill
600
601 @item Removed by you, changed in repository
602 You have removed a file, and before you committed the removal someone
603 committed a change to that file.  You could use @kbd{a} to resurrect the
604 file (see @pxref{Adding and removing files}).@refill
605
606 @item Move away @var{file} - it is in the way
607 For some reason CVS does not like the file @var{file}.  Rename or remove
608 it.@refill
609
610 @item This repository is missing!  Remove this dir manually.
611 It is impossible to remove a directory in the CVS repository in a clean
612 way.  Someone have tried to remove one, and CVS gets confused.  Remove
613 your copy of the directory.@refill
614 @end table
615
616
617 @node Selected files,  , File status, Buffer contents
618 @comment  node-name,  next,  previous,  up
619
620 @section Selected files
621 @cindex Selected files
622 @cindex Marked files
623 @cindex File selection
624 @cindex Active files
625
626 Many of the commands works on the current set of @dfn{selected} files.
627
628 @itemize @bullet
629 @item
630 If there are any files that are marked they constitute the set of
631 selected files.@refill
632 @item
633 Otherwise, if the cursor points to a file, that file is the selected
634 file.@refill
635 @item
636 Otherwise, if the cursor points to a directory, all the files in that
637 directory that appears in the buffer are the selected files.
638 @end itemize
639
640 This scheme might seem a little complicated, but once one get used to
641 it, it is quite powerful.
642
643 @xref{Marking files} tells how you mark and unmark files.
644
645
646 @node Commands, Customization, Buffer contents, Top
647 @comment  node-name,  next,  previous,  up
648
649 @chapter Commands
650
651 @iftex
652 This chapter describes all the commands that you can use in pcl-cvs.
653 @end iftex
654 @ifinfo
655 The nodes in this menu contains explanations about all the commands that
656 you can use in pcl-cvs.  They are grouped together by type.
657 @end ifinfo
658
659 @menu
660 * Updating the directory::      Commands to update the local directory
661 * Movement commands::           How to move up and down in the buffer
662 * Marking files::               How to mark files that other commands
663                                 will later operate on.
664 * Committing changes::          Checking in your modifications to the
665                                 CVS repository.
666 * Editing files::               Loading files into Emacs.
667 * Getting info about files::    Display the log and status of files.
668 * Adding and removing files::   Adding and removing files
669 * Undoing changes::             Undoing changes
670 * Removing handled entries::    Uninteresting lines can easily be removed.
671 * Ignoring files::              Telling CVS to ignore generated files.
672 * Viewing differences::         Commands to @samp{diff} different versions.
673 * Invoking Ediff::              Running @samp{ediff} from @samp{*cvs*} buffer.
674 * Invoking Emerge::             Running @samp{emerge} from @samp{*cvs*} buffer.
675 * Reverting your buffers::      Reverting your buffers
676 * Miscellaneous commands::      Miscellaneous commands
677 @end menu
678
679
680 @node Updating the directory, Movement commands, Commands, Commands
681 @comment  node-name,  next,  previous,  up
682
683 @section Updating the directory
684 @findex cvs-update
685 @findex cvs-mode-update-no-prompt
686 @findex cvs-delete-lock
687 @cindex Getting the *cvs* buffer
688 @kindex g - Rerun @samp{cvs update}
689
690
691 @table @kbd
692
693 @item M-x cvs-update
694 Run a @samp{cvs update} command.  You will be asked for the directory in
695 which the @samp{cvs update} will be run.  The output will be parsed by
696 pcl-cvs, and the result printed in the @samp{*cvs*} buffer (see
697 @pxref{Buffer contents} for a description of the contents).@refill
698
699 By default, @samp{cvs-update} will descend recursively into
700 subdirectories.  You can avoid that behavior by giving a prefix
701 argument to it (e.g., by typing @kbd{C-u M-x cvs-update RET}).@refill
702
703 All other commands in pcl-cvs requires that you have a @samp{*cvs*}
704 buffer.  This is the command that you use to get one.@refill
705
706 CVS uses lock files in the repository to ensure the integrity of the
707 data files in the repository.  They might be left behind i.e. if a
708 workstation crashes in the middle of a CVS operation.  CVS outputs a
709 message when it is waiting for a lock file to go away.  Pcl-cvs will
710 show the same message in the *cvs* buffer, together with instructions
711 for deleting the lock files.  You should normally not have to delete
712 them manually --- just wait a little while and the problem should fix
713 itself.  But if the lock files doesn't disappear you can delete them
714 with @kbd{M-x cvs-delete-lock RET}.@refill
715
716 @item g
717 This will run @samp{cvs update} again.  It will always use the same
718 buffer that was used with the previous @samp{cvs update}.  Give a prefix
719 argument to avoid descending into subdirectories.  This runs the command
720 @samp{cvs-mode-update-no-prompt}.@refill
721
722 @item G
723 This will run @samp{cvs update} and prompt for a new directory to
724 update.  This runs the command @samp{cvs-update}.@refill
725
726 @end table
727
728
729 @node Movement commands, Marking files, Updating the directory, Commands
730 @comment  node-name,  next,  previous,  up
731
732 @section Movement Commands
733 @cindex Movement Commands
734 @findex cookie-next-cookie
735 @findex cookie-previous-cookie
736 @kindex SPC - Move down one file
737 @kindex C-n - Move down one file
738 @kindex n - Move down one file
739 @kindex C-p - Move up one file
740 @kindex p - Move up on file
741
742 You can use most normal Emacs commands to move forward and backward in
743 the buffer.  Some keys are rebound to functions that take advantage of
744 the fact that the buffer is a pcl-cvs buffer:
745
746
747 @table @kbd
748 @item SPC
749 @itemx C-n
750 @itemx n
751 These keys move the cursor one file forward, towards the end of the
752 buffer (@code{cookie-next-cookie}).
753
754 @item C-p
755 @itemx p
756 These keys move one file backward, towards the beginning of the buffer
757 (@code{cookie-previous-cookie}).
758 @end table
759
760
761 @node Marking files, Committing changes, Movement commands, Commands
762 @comment  node-name,  next,  previous,  up
763
764 @section Marking files
765 @cindex Selecting files (commands to mark files)
766 @cindex Marking files
767 @kindex m - marking a file
768 @kindex M - marking all files
769 @kindex u - unmark a file
770 @kindex ESC DEL - unmark all files
771 @kindex DEL - unmark previous file
772 @findex cvs-mode-mark
773 @findex cvs-mode-unmark
774 @findex cvs-mode-mark-all-files
775 @findex cvs-mode-unmark-all-files
776 @findex cvs-mode-unmark-up
777
778 Pcl-cvs works on a set of @dfn{selected files} (@pxref{Selected files}).
779 You can mark and unmark files with these commands:
780
781 @table @kbd
782 @item m
783 This marks the file that the cursor is positioned on.  If the cursor is
784 positioned on a directory all files in that directory will be marked.
785 (@code{cvs-mode-mark}).
786
787 @item u
788 Unmark the file that the cursor is positioned on.  If the cursor is on a
789 directory, all files in that directory will be unmarked.
790 (@code{cvs-mode-unmark}).@refill
791
792 @item M
793 Mark @emph{all} files in the buffer (@code{cvs-mode-mark-all-files}).
794
795 @item @key{ESC} @key{DEL}
796 Unmark @emph{all} files (@code{cvs-mode-unmark-all-files}).
797
798 @item @key{DEL}
799 Unmark the file on the previous line, and move point to that line
800 (@code{cvs-mode-unmark-up}).
801 @end table
802
803
804 @node Committing changes, Editing files, Marking files, Commands
805 @comment  node-name,  next,  previous,  up
806
807 @section Committing changes
808 @cindex Committing changes
809 @cindex Ci
810 @findex cvs-mode-commit
811 @findex cvs-mode-changelog-commit
812 @kindex c - commit files
813 @kindex C - commit files with ChangeLog message
814 @vindex cvs-erase-input-buffer (variable)
815 @vindex cvs-auto-revert-after-commit (variable)
816 @cindex Commit buffer
817 @cindex Edit buffer
818 @cindex Erasing commit message
819 @cindex Reverting buffers after commit
820
821 @table @kbd
822
823 @item c
824 All files that have a "need to be checked in"-marker (@pxref{Buffer
825 contents}) can be checked in with the @kbd{c} command.  It checks in all
826 selected files (@pxref{Selected files}) (except those who lack the
827 "ci"-marker - they are ignored).  Pressing @kbd{c} causes
828 @code{cvs-mode-commit} to be run.@refill
829
830 When you press @kbd{c} you will get a buffer called
831 @samp{*cvs-commit-message*}.  Enter the log message for the file(s) in
832 it.  When you are ready you should press @kbd{C-c C-c} to actually
833 commit the files (using @code{cvs-edit-done}).
834
835 Normally the @samp{*cvs-commit-message*} buffer will retain the log
836 message from the previous commit, but if the variable
837 @code{cvs-erase-input-buffer} is set to a non-@code{nil} value the
838 buffer will be erased.  Point and mark will always be located around the
839 entire buffer so that you can easily erase it with @kbd{C-w}
840 (@samp{kill-region}).@refill
841
842 If you are editing the files in your emacs an automatic
843 @samp{revert-buffer} will be performed.  (If the file contains
844 @samp{$@asis{Id}$} keywords @samp{cvs commit} will write a new file with
845 the new values substituted.  The auto-revert makes sure that you get
846 them into your buffer).  The revert will not occur if you have modified
847 your buffer, or if @samp{cvs-auto-revert-after-commit} is set to
848 @samp{nil}.@refill
849
850 @item C
851 This is just like @samp{cvs-mode-commit}, except that it tries to
852 provide appropriate default log messages by looking at the
853 @samp{ChangeLog}s in the current directory.  The idea is to write your
854 ChangeLog entries first, and then use this command to commit your
855 changes.  Pressing @kbd{C} causes @code{cvs-mode-changelog-commit} to be
856 run.@refill
857
858 To select default log text, pcl-cvs:
859 @itemize @minus
860 @item
861 finds the ChangeLogs for the files to be checked in;
862 @item
863 verifies that the top entry in the ChangeLog is on the current date and
864 by the current user; if not, no default text is provided;
865 @item
866 search the ChangeLog entry for paragraphs containing the names of the
867 files we're checking in; and finally
868 @item
869 uses those paragraphs as the default log text in the
870 @samp{*cvs-commit-message*} buffer.
871 @end itemize
872
873 You can then commit the @samp{ChangeLog} file once per day without any
874 log message.@refill
875
876 @end table
877
878
879 @node Editing files, Getting info about files, Committing changes, Commands
880 @comment  node-name,  next,  previous,  up
881
882 @section Editing files
883 @cindex Editing files
884 @cindex Finding files
885 @cindex Loading files
886 @cindex Dired
887 @cindex Invoking dired
888 @findex cvs-mode-find-file
889 @findex cvs-mode-find-file-other-window
890 @findex cvs-mode-add-change-log-entry-other-window
891 @kindex f - find file or directory
892 @kindex o - find file in other window
893 @kindex A - add ChangeLog entry
894
895 There are currently three commands that can be used to find a file (that
896 is, load it into a buffer and start editing it there).  These commands
897 work on the line that the cursor is situated at.  They ignore any marked
898 files.
899
900 @table @kbd
901 @item f
902 Find the file that the cursor points to.  Run @samp{dired}
903 @ifinfo
904 (@pxref{Dired,,,Emacs})
905 @end ifinfo
906 if the cursor points to a directory (@code{cvs-mode-find-file}).@refill
907
908 @item o
909 Like @kbd{f}, but use another window
910 (@code{cvs-mode-find-file-other-window}).@refill
911
912 @item A
913 Invoke @samp{add-change-log-entry-other-window} to edit a
914 @samp{ChangeLog} file.  The @samp{ChangeLog} will be found in the
915 directory of the file the cursor points to.
916 (@code{cvs-mode-add-change-log-entry-other-window}).@refill
917 @end table
918
919
920 @node Getting info about files, Adding and removing files, Editing files, Commands
921 @comment  node-name,  next,  previous,  up
922
923 @section Getting info about files
924 @cindex Status (cvs command)
925 @cindex Log (RCS/cvs command)
926 @cindex Getting status
927 @kindex l - run @samp{cvs log}
928 @kindex s - run @samp{cvs status}
929 @findex cvs-mode-log
930 @findex cvs-mode-status
931
932 Both of the following commands can be customized.
933 @xref{Customization}.@refill
934
935 @table @kbd
936 @item l
937 Run @samp{cvs log} on all selected files, and show the result in a
938 temporary buffer (@code{cvs-mode-log}).
939
940 @item s
941 Run @samp{cvs status} on all selected files, and show the result in a
942 temporary buffer (@code{cvs-mode-status}).
943 @end table
944
945
946 @node Adding and removing files, Undoing changes, Getting info about files, Commands
947 @comment  node-name,  next,  previous,  up
948
949 @section Adding and removing files
950 @cindex Adding files
951 @cindex Removing files
952 @cindex Resurrecting files
953 @cindex Deleting files
954 @cindex Putting files under CVS control
955 @kindex a - add a file
956 @kindex r - remove a file
957 @findex cvs-mode-add
958 @findex cvs-mode-remove-file
959
960 The following commands are available to make it easy to add and remove
961 files from the CVS repository.
962
963 @table @kbd
964 @item a
965 Add all selected files.  This command can be used on @samp{Unknown}
966 files (see @pxref{File status}).  The status of the file will change to
967 @samp{Added}, and you will have to use @kbd{c} (@samp{cvs-mode-commit}, see
968 @pxref{Committing changes}) to really add the file to the
969 repository.@refill
970
971 This command can also be used on @samp{Removed} files (before you commit
972 them) to resurrect them.
973
974 Selected files that are neither @samp{Unknown} nor @samp{Removed} will
975 be ignored by this command.
976
977 The command that is run is @code{cvs-mode-add}.
978
979 @item r
980 This command removes the selected files (after prompting for
981 confirmation).  The files are @samp{rm}ed from your directory and
982 (unless the status was @samp{Unknown}; @pxref{File status}) they will
983 also be @samp{cvs remove}d.  If the files were @samp{Unknown} they will
984 disappear from the buffer.  Otherwise their status will change to
985 @samp{Removed}, and you must use @kbd{c} (@samp{cvs-mode-commit},
986 @pxref{Committing changes}) to commit the removal.@refill
987
988 The command that is run is @code{cvs-mode-remove-file}.
989 @end table
990
991
992 @node Undoing changes, Removing handled entries, Adding and removing files, Commands
993 @comment  node-name,  next,  previous,  up
994
995 @section Undoing changes
996 @cindex Undo changes
997 @cindex Flush changes
998 @kindex U - undo changes
999 @findex cvs-mode-undo-local-changes
1000
1001 @table @kbd
1002 @item U
1003 If you have modified a file, and for some reason decide that you don't
1004 want to keep the changes, you can undo them with this command.  It works
1005 by removing your working copy of the file and then getting the latest
1006 version from the repository (@code{cvs-mode-undo-local-changes}.
1007 @end table
1008
1009
1010 @node Removing handled entries, Ignoring files, Undoing changes, Commands
1011 @comment  node-name,  next,  previous,  up
1012
1013 @section Removing handled entries
1014 @cindex Expunging uninteresting entries
1015 @cindex Uninteresting entries, getting rid of them
1016 @cindex Getting rid of uninteresting lines
1017 @cindex Removing uninteresting (processed) lines
1018 @cindex Handled lines, removing them
1019 @kindex x - remove processed entries
1020 @kindex C-k - remove selected entries
1021 @findex cvs-mode-remove-handled
1022 @findex cvs-mode-acknowledge
1023
1024 @table @kbd
1025 @item x
1026 This command allows you to remove all entries that you have processed.
1027 More specifically, the lines for @samp{Updated} files (@pxref{File
1028 status} and files that have been checked in (@pxref{Committing changes})
1029 are removed from the buffer.  If a directory becomes empty the heading
1030 for that directory is also removed.  This makes it easier to get an
1031 overview of what needs to be done.
1032
1033 The command is called @code{cvs-mode-remove-handled}.  If
1034 @samp{cvs-auto-remove-handled} is set to non-@code{nil} this will
1035 automatically be performed after every commit.@refill
1036
1037 @item C-k
1038 This command can be used for lines that @samp{cvs-mode-remove-handled} would
1039 not delete, but that you want to delete (@code{cvs-mode-acknowledge}).
1040 @end table
1041
1042
1043 @node Ignoring files, Viewing differences, Removing handled entries, Commands
1044 @comment  node-name,  next,  previous,  up
1045
1046 @section Ignoring files
1047 @kindex i - ignoring files
1048 @findex cvs-mode-ignore
1049
1050 @table @kbd
1051 @item i
1052 Arrange so that CVS will ignore the selected files.  The file names are
1053 added to the @file{.cvsignore} file in the corresponding directory.  If
1054 the @file{.cvsignore} doesn't exist it will be created.
1055
1056 The @file{.cvsignore} file should normally be added to the repository,
1057 but you could ignore it also if you like it better that way.
1058
1059 This runs @code{cvs-mode-ignore}.
1060 @end table
1061
1062
1063 @node Viewing differences, Invoking Ediff, Ignoring files, Commands
1064 @comment  node-name,  next,  previous,  up
1065
1066 @section Viewing differences
1067 @cindex Diff
1068 @cindex Ediff
1069 @cindex Invoking ediff
1070 @cindex Conflicts, how to resolve them
1071 @cindex Viewing differences
1072 @kindex d - run @samp{cvs diff}
1073 @kindex b - diff backup file
1074 @findex cvs-mode-diff-cvs
1075 @findex cvs-mode-diff-backup
1076 @vindex cvs-diff-ignore-marks (variable)
1077
1078 @table @kbd
1079 @item d
1080 Display a @samp{cvs diff} between the selected files and the RCS version
1081 that they are based on.  @xref{Customization} describes how you can send
1082 flags to @samp{cvs diff}.  If @var{cvs-diff-ignore-marks} is set to a
1083 non-@code{nil} value or if a prefix argument is given (but not both) any
1084 marked files will not be considered to be selected.
1085 (@code{cvs-mode-diff-cvs}).@refill
1086
1087 @item b
1088 If CVS finds a conflict while merging two versions of a file (during a
1089 @samp{cvs update}, @pxref{Updating the directory}) it will save the
1090 original file in a file called @file{.#@var{FILE}.@var{VERSION}} where
1091 @var{FILE} is the name of the file, and @var{VERSION} is the RCS version
1092 number that your file was based on.@refill
1093
1094 With the @kbd{b} command you can run a @samp{diff} on the files
1095 @file{.#@var{FILE}.@var{VERSION}} and @file{@var{FILE}}.  You can get a
1096 context- or Unidiff by setting @samp{cvs-diff-flags} -
1097 @pxref{Customization}.  This command only works on files that have
1098 status @samp{Conflict} or @samp{Merged}.@refill
1099
1100 If @var{cvs-diff-ignore-marks} is set to a non-@code{nil} value or if a
1101 prefix argument is given (but not both) any marked files will not be
1102 considered to be selected.  (@code{cvs-mode-diff-backup}).@refill
1103 @end table
1104
1105
1106 @node Invoking Ediff, Invoking Emerge, Viewing differences, Commands
1107 @comment  node-name,  next,  previous,  up
1108
1109 @section Running ediff
1110 @cindex Ediff
1111 @cindex Invoking ediff
1112 @cindex Viewing differences
1113 @cindex Conflicts, resolving
1114 @cindex Resolving conflicts
1115 @kindex e - invoke @samp{ediff}
1116 @findex cvs-mode-ediff
1117 @findex run-ediff-from-cvs-buffer
1118 @findex cvs-old-ediff-interface
1119
1120 @table @kbd
1121 @item e
1122 This command works
1123 slightly different depending on the version of @samp{ediff} and the file
1124 status.@refill
1125
1126 With modern versions of @samp{ediff}, this command invokes
1127 @samp{run-ediff-from-cvs-buffer} on one file.@refill
1128
1129 @strong{Note:}  When the file status is @samp{Merged} or @samp{Conflict},
1130 CVS has already performed a merge.  The resulting file is not used in
1131 any way if you use this command.  If you use the @kbd{q} command inside
1132 @samp{ediff} (to successfully terminate a merge) the file that CVS
1133 created will be overwritten.@refill
1134
1135 Older versions of @samp{ediff} use an interface similar to
1136 @samp{emerge}.  The function @samp{cvs-old-ediff-interface} is invoked
1137 if the version of @samp{ediff} you have doesn't support
1138 @samp{run-ediff-from-cvs-buffer}.  These older versions do not support
1139 merging of revisions.@refill
1140
1141 @table @asis
1142 @item @samp{Modified}
1143 Run @samp{ediff-files} with your working file as file A, and the latest
1144 revision in the repository as file B.
1145
1146 @item @samp{Merged}
1147 @itemx @samp{Conflict}
1148 Run @samp{ediff-files3} with your working file (as it was prior to your
1149 invocation of @samp{cvs-update}) as file A, the latest revision in the
1150 repository as file B, and the revision that you based your local
1151 modifications on as ancestor.
1152
1153 @item @samp{Updated}
1154 @itemx @samp{Patched}
1155 Run @samp{ediff-files} with your working file as file A, and a given
1156 revision in the repository as file B.  You are prompted for the revision
1157 to ediff against, and you may specify either a tag name or a numerical
1158 revision number (@pxref{Getting info about files}).
1159 @end table
1160
1161 @end table
1162
1163 @node Invoking Emerge, Reverting your buffers, Invoking Ediff, Commands
1164 @comment  node-name,  next,  previous,  up
1165
1166 @section Running emerge
1167 @cindex Emerge
1168 @cindex Ediff
1169 @cindex Viewing differences
1170 @cindex Invoking emerge
1171 @cindex Conflicts, resolving
1172 @cindex Resolving conflicts
1173 @kindex E - invoke @samp{emerge}
1174 @findex cvs-mode-emerge
1175
1176 @table @kbd
1177 @item E
1178 Invoke @samp{emerge} on one file.  This command works slightly different
1179 depending on the file status.
1180
1181 @table @asis
1182 @item @samp{Modified}
1183 Run @samp{emerge-files} with your working file as file A, and the latest
1184 revision in the repository as file B.
1185
1186 @item @samp{Merged}
1187 @itemx @samp{Conflict}
1188 Run @samp{emerge-files-with-ancestor} with your working file (as it was
1189 prior to your invocation of @samp{cvs-update}) as file A, the latest
1190 revision in the repository as file B, and the revision that you based
1191 your local modifications on as ancestor.
1192 @end table
1193
1194 @strong{Note:}  When the file status is @samp{Merged} or @samp{Conflict},
1195 CVS has already performed a merge.  The resulting file is not used in
1196 any way if you use this command.  If you use the @kbd{q} command inside
1197 @samp{emerge} (to successfully terminate the merge) the file that CVS
1198 created will be overwritten.
1199
1200 @end table
1201
1202
1203 @node Reverting your buffers, Miscellaneous commands, Invoking Emerge, Commands
1204 @comment  node-name,  next,  previous,  up
1205
1206 @section Reverting your buffers
1207 @findex cvs-mode-revert-updated-buffers
1208 @kindex R - revert buffers
1209 @cindex Syncing buffers
1210 @cindex Reverting buffers
1211
1212 @table @kbd
1213 @item R
1214 If you are editing (or just viewing) a file in a buffer, and that file
1215 is changed by CVS during a @samp{cvs-update}, all you have to do is type
1216 @kbd{R} in the *cvs* buffer to read in the new versions of the
1217 files.@refill
1218
1219 All files that are @samp{Updated}, @samp{Merged} or in @samp{Conflict}
1220 are reverted from the disk.  Any other files are ignored.  Only files
1221 that you were already editing are read.@refill
1222
1223 An error is signalled if you have modified the buffer since it was last
1224 changed.  (@code{cvs-mode-revert-updated-buffers}).@refill
1225 @end table
1226
1227
1228 @node Miscellaneous commands,  , Reverting your buffers, Commands
1229 @comment  node-name,  next,  previous,  up
1230
1231 @section Miscellaneous commands
1232 @findex cvs-byte-compile-files
1233 @cindex Recompiling elisp files
1234 @cindex Byte compilation
1235 @cindex Getting rid of lock files
1236 @cindex Lock files
1237 @kindex q - bury the *cvs* buffer
1238 @findex bury-buffer
1239
1240 @table @kbd
1241 @item M-x cvs-byte-compile-files
1242 Byte compile all selected files that end in .el.
1243
1244 @item M-x cvs-delete-lock
1245 This command can be used in any buffer, and deletes the lock files that
1246 the *cvs* buffer informs you about.  You should normally never have to
1247 use this command since CVS tries very carefully to always remove the
1248 lock files itself.
1249
1250 You can only use this command when a message in the *cvs* buffer tells
1251 you so.  You should wait a while before using this command in case
1252 someone else is running a cvs command.
1253
1254 @item q
1255 Bury the *cvs* buffer.  (@code{bury-buffer}).
1256
1257 @end table
1258
1259
1260 @node Customization, Future enhancements, Commands, Top
1261 @comment  node-name,  next,  previous,  up
1262
1263 @chapter Customization
1264 @vindex cvs-erase-input-buffer (variable)
1265 @vindex cvs-inhibit-copyright-message (variable)
1266 @vindex cvs-diff-flags (variable)
1267 @vindex cvs-diff-ignore-marks (variable)
1268 @vindex cvs-log-flags (variable)
1269 @vindex cvs-status-flags (variable)
1270 @vindex cvs-auto-remove-handled (variable)
1271 @vindex cvs-update-prog-output-skip-regexp (variable)
1272 @vindex cvs-cvsroot (variable)
1273 @vindex TMPDIR (environment variable)
1274 @vindex cvs-auto-revert-after-commit (variable)
1275 @vindex cvs-commit-buffer-require-final-newline (variable)
1276 @vindex cvs-sort-ignore-file (variable)
1277 @cindex Inhibiting the Copyright message.
1278 @cindex Copyright message, getting rid of it
1279 @cindex Getting rid of the Copyright message.
1280 @cindex Customization
1281 @cindex Variables, list of all
1282 @cindex Erasing the input buffer
1283 @cindex Context diff, how to get
1284 @cindex Unidiff, how to get
1285 @cindex Automatically remove handled files
1286 @cindex -u option in modules file
1287 @cindex Modules file (-u option)
1288 @cindex Update program (-u option in modules file)
1289 @cindex Reverting buffers after commit
1290 @cindex Require final newline
1291 @cindex Automatically inserting newline
1292 @cindex Commit message, inserting newline
1293 @cindex Sorting the .cvsignore file
1294 @cindex .cvsignore file, sorting
1295 @cindex Automatically sorting .cvsignore
1296
1297 If you have an idea about any customization that would be handy but
1298 isn't present in this list, please tell me!  @xref{Bugs} for info on how
1299 to reach me.@refill
1300
1301 @table @samp
1302 @item cvs-erase-input-buffer
1303 If set to anything else than @code{nil} the edit buffer will be erased
1304 before you write the log message (@pxref{Committing changes}).
1305
1306 @item cvs-inhibit-copyright-message
1307 The copyright message that is displayed on startup can be annoying after
1308 a while.  Set this variable to @samp{t} if you want to get rid of it.
1309 (But don't set this to @samp{t} in the system defaults file - new users
1310 should see this message at least once).
1311
1312 @item cvs-diff-flags
1313 A list of strings to pass as arguments to the @samp{cvs diff} and
1314 @samp{diff} programs.  This is used by @samp{cvs-mode-diff-cvs} and
1315 @samp{cvs-mode-diff-backup} (key @kbd{b}, @pxref{Viewing differences}).  If
1316 you prefer the Unidiff format you could add this line to your
1317 @file{.emacs} file:@refill
1318
1319 @example
1320 (setq cvs-diff-flags '("-u"))
1321 @end example
1322
1323 @item cvs-diff-ignore-marks
1324 If this variable is non-@code{nil} or if a prefix argument is given (but
1325 not both) to @samp{cvs-mode-diff-cvs} or @samp{cvs-mode-diff-backup}
1326 marked files are not considered selected.
1327
1328 @item cvs-log-flags
1329 List of strings to send to @samp{cvs log}.  Used by @samp{cvs-mode-log}
1330 (key @kbd{l}, @pxref{Getting info about files}).
1331
1332 @item cvs-status-flags
1333 List of strings to send to @samp{cvs status}.  Used by @samp{cvs-mode-status}
1334 (key @kbd{s}, @pxref{Getting info about files}).
1335
1336 @item cvs-auto-remove-handled
1337 If this variable is set to any non-@code{nil} value
1338 @samp{cvs-mode-remove-handled} will be called every time you check in
1339 files, after the check-in is ready.  @xref{Removing handled
1340 entries}.@refill
1341
1342 @item cvs-auto-revert-after-commit
1343 If this variable is set to any non-@samp{nil} value any buffers you have
1344 that visit a file that is committed will be automatically reverted.
1345 This variable is default @samp{t}.  @xref{Committing changes}.@refill
1346
1347 @item cvs-update-prog-output-skip-regexp
1348 The @samp{-u} flag in the @file{modules} file can be used to run a command
1349 whenever a @samp{cvs update} is performed (see cvs(5)).  This regexp
1350 is used to search for the last line in that output.  It is normally set
1351 to @samp{"$"}.  That setting is only correct if the command outputs
1352 nothing.  Note that pcl-cvs will get very confused if the command
1353 outputs @emph{anything} to @samp{stderr}.
1354
1355 @item cvs-cvsroot
1356 This variable can be set to override @samp{CVSROOT}.  It should be a
1357 string.  If it is set then everytime a cvs command is run it will be
1358 called as @samp{cvs -d @var{cvs-cvsroot}@dots{}}  This can be useful if
1359 your site has several repositories.
1360
1361 @item TMPDIR
1362 Pcl-cvs uses this @emph{environment variable} to decide where to put the
1363 temporary files it needs.  It defaults to @file{/tmp} if it is not set.
1364
1365 @item cvs-commit-buffer-require-final-newline
1366 When you enter a log message in the @samp{*cvs-commit-message*} buffer
1367 pcl-cvs will normally automatically insert a trailing newline, unless
1368 there already is one.  This behavior can be controlled via
1369 @samp{cvs-commit-buffer-require-final-newline}.  If it is @samp{t} (the
1370 default behavior), a newline will always be appended.  If it is
1371 @samp{nil}, newlines will never be appended.  Any other value causes
1372 pcl-cvs to ask the user whenever there is no trailing newline in the
1373 commit message buffer.
1374
1375 @item cvs-sort-ignore-file
1376 If this variable is set to any non-@samp{nil} value the
1377 @file{.cvsignore} will always be sorted whenever you use
1378 @samp{cvs-mode-ignore} to add a file to it.  This option is on by
1379 default.
1380
1381 @end table
1382
1383
1384 @node     Future enhancements, Bugs, Customization, Top
1385 @comment  node-name,  next,  previous,  up
1386
1387 @chapter Future enhancements
1388 @cindex Enhancements
1389
1390 Pcl-cvs is still under development and needs a number of enhancements to
1391 be called complete.  Below is my current wish-list for future releases
1392 of pcl-cvs.  Please, let me know which of these features you want most.
1393 They are listed below in approximately the order that I currently think
1394 I will implement them in.
1395
1396 @itemize @bullet
1397 @item
1398 Rewritten parser code.  There are many situations where pcl-cvs will
1399 fail to recognize the output from CVS.  The situation could be greatly
1400 increased.
1401
1402 @item
1403 @samp{cvs-status}.  This will run @samp{cvs status} in a directory and
1404 produce a buffer that looks pretty much like the current *cvs* buffer.
1405 That buffer will include information for all version-controlled files.
1406 (There will be a simple keystroke to remove all "uninteresting" files,
1407 that is, files that are "Up-to-date").  In this new buffer you will be
1408 able to update a file, commit a file, et c.  The big win with this is
1409 that you will be able to watch the differences between your current
1410 working file and the head revision in the repository before you update
1411 the file, and you can then choose to update it or let it wait for a
1412 while longer.
1413
1414 @item
1415 Log mode.  When this mode is finished you will be able to move around
1416 (using @kbd{n} and @kbd{p}) between the revisions of a file, mark two of
1417 them, and run a diff between them.  You will be able to hide branches
1418 (similar to the way you can hide sub-paragraphs in outline-mode) and do
1419 merges between revisions.  Other ideas about this are welcome.
1420
1421 @item
1422 The current model for marks in the *cvs* buffer seems to be confusing.
1423 I am considering to use the VM model instead, where marks are normally
1424 inactive.  To activate the mark, you issue a command like
1425 @samp{cvs-mode-next-command-uses-marks}.  I might implement a flag so
1426 that you can use either version.  Feedback on this before I start coding
1427 it is very welcome.
1428
1429 @item
1430 It should be possible to run commands such as @samp{cvs log}, @samp{cvs
1431 status} and @samp{cvs commit} directly from a buffer containing a file,
1432 instead of having to @samp{cvs-update}.  If the directory contains many
1433 files the @samp{cvs-update} can take quite some time, especially on a
1434 slow machine.  I planed to put these kind of commands on the prefix
1435 @kbd{C-c C-v}, but that turned out to be used by for instance c++-mode.
1436 If you have any suggestions for a better prefix key, please let me know.
1437
1438 @item
1439 Increased robustness.  For instance, you can not currently press
1440 @kbd{C-g} when you are entering the description of a file that you are
1441 adding without confusing pcl-cvs.
1442
1443 @item
1444 Support for multiple active *cvs* buffers.
1445
1446 @item
1447 Dired support.  I have an experimental @file{dired-cvs.el} that works
1448 together with CVS 1.2.  Unfortunately I wrote it on top of a
1449 non-standard @file{dired.el}, so it must be rewritten.@refill
1450
1451 @item
1452 An ability to send user-supplied options to all the cvs commands.
1453
1454 @item
1455 Pcl-cvs is not at all clever about what it should do when @samp{cvs
1456 update} runs a program (due to the @samp{-u} option in the
1457 @file{modules} file --- see @samp{cvs(5)}).  The current release uses a
1458 regexp to search for the end.  At the very least that regexp should be
1459 configured for different modules.  Tell me if you have any idea about
1460 what is the right thing to do.  In a perfect world the program should
1461 also be allowed to print to @samp{stderr} without causing pcl-cvs to
1462 crash.
1463 @end itemize
1464
1465
1466 If you miss something in this wish-list, let me know!  I don't promise
1467 that I will write it, but I will at least try to coordinate the efforts
1468 of making a good Emacs front end to CVS.  See @xref{Bugs} for
1469 information about how to reach me.@refill
1470
1471 So far, I have written most of pcl-cvs in my all-to-rare spare time.  If
1472 you want pcl-cvs to be developed faster you can write a contract with
1473 Signum Support to do the extension.  You can reach Signum Support by
1474 email to @samp{info@@signum.se} or via mail to Signum Support AB, Box
1475 2044, S-580 02 Linkoping, Sweden.  Phone:  +46 (0) 13 - 21 46 00.  Fax:
1476 +46 (0) 13 - 21 47 00.
1477
1478
1479 @node   Bugs, COPYING, Future enhancements, Top
1480 @comment  node-name,  next,  previous,  up
1481
1482 @chapter Bugs (known and unknown)
1483 @cindex Reporting bugs and ideas
1484 @cindex Bugs, how to report them
1485 @cindex Author, how to reach
1486 @cindex Email to the author
1487 @cindex Known bugs
1488 @cindex Bugs, known
1489 @cindex FAQ
1490 @cindex Problems, list of common
1491
1492 If you find a bug or misfeature, don't hesitate to tell me!  Send email
1493 to @samp{ceder@@lysator.liu.se}.
1494
1495 If you have ideas for improvements, or if you have written some
1496 extensions to this package, I would like to hear from you.  I hope that
1497 you find this package useful!
1498
1499 Below is a partial list of currently known problems with pcl-cvs version
1500 1.05.
1501
1502 @table @asis
1503 @item Commit causes Emacs to hang
1504 Emacs waits for the @samp{cvs commit} command to finish before you can
1505 do anything.  If you start a background job from the loginfo file you
1506 must take care that it closes @samp{stdout} and @samp{stderr} if you do
1507 not want to wait for it.  (You do that with @samp{background-command &>-
1508 2&>- &} if you are starting @samp{background-command} from a
1509 @samp{/bin/sh} shell script).
1510
1511 Your emacs will also hang if there was a lock file in the repository.
1512 In this case you can type @kbd{C-g} to get control over your emacs
1513 again.
1514
1515 @item Name clash in Emacs 19
1516 This is really a bug in Elib or the Emacs 19 distribution.  Both Elib and
1517 Emacs 19.6 through at least 19.10 contains a file named
1518 @file{cookie.el}.  One of the files will have to be renamed, and we are
1519 currently negotiating about which of the files to rename.
1520
1521 @item Commands while cvs-update is running
1522 It is possible to type commands in the *cvs* buffer while the update is
1523 running, but error messages is all that you will get.  The error
1524 messages should be better.
1525
1526 @item Unexpected output from CVS
1527 Unexpected output from CVS confuses pcl-cvs.  It will currently create a
1528 bug report that you can mail to me.  It should do something more
1529 civilized.
1530 @end table
1531
1532
1533 @node COPYING, Function and Variable Index, Bugs, Top
1534 @comment node-name, next, previous,  up
1535
1536 @appendix GNU GENERAL PUBLIC LICENSE
1537 @c @include gpl.texinfo
1538
1539
1540 @node Function and Variable Index, Concept Index, COPYING, Top
1541 @comment    node-name,          next,       previous,  up
1542
1543 @unnumbered Function and Variable Index
1544
1545 @printindex fn
1546
1547
1548 @node     Concept Index, Key Index, Function and Variable Index, Top
1549 @comment      node-name, next,        previous,  up
1550
1551 @unnumbered Concept Index
1552
1553 @printindex cp
1554
1555
1556 @node     Key Index,  , Concept Index, Top
1557 @comment      node-name, next,        previous,  up
1558
1559 @unnumbered Key Index
1560
1561 @printindex ky
1562
1563 @summarycontents
1564 @contents
1565 @bye