Add "Package:" file headers to denote built-in packages.
[bpt/emacs.git] / lisp / vc / pcvs-defs.el
CommitLineData
5b467bf4
SM
1;;; pcvs-defs.el --- variable definitions for PCL-CVS
2
98337d2b 3;; Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
114f9c96 4;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
5caeb2a5 5;; Free Software Foundation, Inc.
5b467bf4 6
cc1eecfd 7;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
5b467bf4 8;; Keywords: pcl-cvs
bd78fa1d 9;; Package: pcvs
5b467bf4
SM
10
11;; This file is part of GNU Emacs.
12
eb3fa2cf 13;; GNU Emacs is free software: you can redistribute it and/or modify
5b467bf4 14;; it under the terms of the GNU General Public License as published by
eb3fa2cf
GM
15;; the Free Software Foundation, either version 3 of the License, or
16;; (at your option) any later version.
5b467bf4
SM
17
18;; GNU Emacs is distributed in the hope that it will be useful,
19;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21;; GNU General Public License for more details.
22
23;; You should have received a copy of the GNU General Public License
eb3fa2cf 24;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
5b467bf4
SM
25
26;;; Commentary:
27
28
29;;; Code:
30
5b467bf4
SM
31(eval-when-compile (require 'cl))
32(require 'pcvs-util)
33
34;;;; -------------------------------------------------------
35;;;; START OF THINGS TO CHECK WHEN INSTALLING
36
37(defvar cvs-program "cvs"
38 "*Name or full path of the cvs executable.")
39
40(defvar cvs-version
c6ea7612
SM
41 ;; With the divergence of the CVSNT codebase and version numbers, this is
42 ;; not really good any more.
5b467bf4
SM
43 (ignore-errors
44 (with-temp-buffer
6cfbaf46 45 (call-process cvs-program nil t nil "-v")
5b467bf4 46 (goto-char (point-min))
c6ea7612
SM
47 (when (re-search-forward "(CVS\\(NT\\)?) \\([0-9]+\\)\\.\\([0-9]+\\)"
48 nil t)
5b467bf4
SM
49 (cons (string-to-number (match-string 1))
50 (string-to-number (match-string 2))))))
51 "*Version of `cvs' installed on your system.
52It must be in the (MAJOR . MINOR) format.")
53
54;; FIXME: this is only used by cvs-mode-diff-backup
55(defvar cvs-diff-program (or (and (boundp 'diff-command) diff-command) "diff")
56 "*Name or full path of the best diff program you've got.
57NOTE: there are some nasty bugs in the context diff variants of some vendor
58versions, such as the one in SunOS-4.")
59
60;;;; END OF THINGS TO CHECK WHEN INSTALLING
61;;;; --------------------------------------------------------
62
63;;;;
64;;;; User configuration variables:
65;;;;
66;;;; NOTE: these should be set in your ~/.emacs (or site-lisp/default.el) file.
67;;;;
68
69(defgroup pcl-cvs nil
70 "Special support for the CVS versioning system."
f4fbc2ff 71 :version "21.1"
5b467bf4
SM
72 :group 'tools
73 :prefix "cvs-")
74
75;;
76;; cvsrc options
77;;
78
44597808 79(defcustom cvs-cvsrc-file (convert-standard-filename "~/.cvsrc")
5b467bf4
SM
80 "Path to your cvsrc file."
81 :group 'pcl-cvs
82 :type '(file))
83
84(defvar cvs-shared-start 4
85 "Index of the first shared flag.
86If set to 4, for instance, a numeric argument smaller than 4 will
87select a non-shared flag, while a numeric argument greater than 3
88will select a shared-flag.")
89
90(defvar cvs-shared-flags (make-list cvs-shared-start nil)
91 "List of flags whose settings is shared among several commands.")
92
93(defvar cvs-cvsroot nil
94 "*Specifies where the (current) cvs master repository is.
95Overrides the environment variable $CVSROOT by sending \" -d dir\" to
96all CVS commands. This switch is useful if you have multiple CVS
97repositories. It can be set interactively with \\[cvs-change-cvsroot.]
98There is no need to set this if $CVSROOT is set to a correct value.")
99
100(defcustom cvs-auto-remove-handled nil
afc05254 101 "If up-to-date files should be acknowledged automatically.
5b467bf4
SM
102If T, they will be removed from the *cvs* buffer after every command.
103If DELAYED, they will be removed from the *cvs* buffer before every command.
104If STATUS, they will only be removed after a `cvs-mode-status' command.
105Else, they will never be automatically removed from the *cvs* buffer."
106 :group 'pcl-cvs
107 :type '(choice (const nil) (const status) (const delayed) (const t)))
108
109(defcustom cvs-auto-remove-directories 'handled
afc05254 110 "If ALL, directory entries will never be shown.
7980ab49 111If HANDLED, only non-handled directories will be shown.
5b467bf4
SM
112If EMPTY, only non-empty directories will be shown."
113 :group 'pcl-cvs
114 :type '(choice (const :tag "No" nil) (const all) (const handled) (const empty)))
115
116(defcustom cvs-auto-revert t
afc05254 117 "Non-nil if changed files should automatically be reverted."
5b467bf4
SM
118 :group 'pcl-cvs
119 :type '(boolean))
120
121(defcustom cvs-sort-ignore-file t
afc05254 122 "Non-nil if `cvs-mode-ignore' should sort the .cvsignore automatically."
5b467bf4
SM
123 :group 'pcl-cvs
124 :type '(boolean))
125
126(defcustom cvs-force-dir-tag t
afc05254 127 "If non-nil, tagging can only be applied to directories.
5b467bf4
SM
128Tagging should generally be applied a directory at a time, but sometimes it is
129useful to be able to tag a single file. The normal way to do that is to use
130`cvs-mode-force-command' so as to temporarily override the restrictions,"
131 :group 'pcl-cvs
132 :type '(boolean))
133
134(defcustom cvs-default-ignore-marks nil
afc05254 135 "Non-nil if cvs mode commands should ignore any marked files.
5b467bf4
SM
136Normally they run on the files that are marked (with `cvs-mode-mark'),
137or the file under the cursor if no files are marked. If this variable
138is set to a non-nil value they will by default run on the file on the
2c0ec709 139current line. See also `cvs-invert-ignore-marks'"
5b467bf4
SM
140 :group 'pcl-cvs
141 :type '(boolean))
142
17874c4e
JB
143(defvar cvs-diff-ignore-marks t)
144(make-obsolete-variable 'cvs-diff-ignore-marks
d9bb547b
JB
145 'cvs-invert-ignore-marks
146 "21.1")
5b467bf4
SM
147
148(defcustom cvs-invert-ignore-marks
149 (let ((l ()))
150 (unless (equal cvs-diff-ignore-marks cvs-default-ignore-marks)
151 (push "diff" l))
152 (when (and cvs-force-dir-tag (not cvs-default-ignore-marks))
153 (push "tag" l))
154 l)
afc05254 155 "List of cvs commands that invert the default ignore-mark behavior.
5b467bf4
SM
156Commands in this set will use the opposite default from the one set
157in `cvs-default-ignore-marks'."
158 :group 'pcl-cvs
159 :type '(set (const "diff")
160 (const "tag")
161 (const "ignore")))
162
163(defcustom cvs-confirm-removals t
afc05254 164 "Ask for confirmation before removing files.
5b467bf4
SM
165Non-nil means that PCL-CVS will ask confirmation before removing files
166except for files whose content can readily be recovered from the repository.
138e1bd0 167A value of `list' means that the list of files to be deleted will be
5b467bf4
SM
168displayed when asking for confirmation."
169 :group 'pcl-cvs
170 :type '(choice (const list)
171 (const t)
172 (const nil)))
173
174(defcustom cvs-add-default-message nil
afc05254 175 "Default message to use when adding files.
0ff9b955 176If set to nil, `cvs-mode-add' will always prompt for a message."
5b467bf4
SM
177 :group 'pcl-cvs
178 :type '(choice (const :tag "Prompt" nil)
179 (string)))
180
17874c4e
JB
181(defvar cvs-diff-buffer-name "*cvs-diff*")
182(make-obsolete-variable 'cvs-diff-buffer-name
d9bb547b
JB
183 'cvs-buffer-name-alist
184 "21.1")
5b467bf4 185
2c0ec709 186(defcustom cvs-find-file-and-jump nil
5b467bf4
SM
187 "Jump to the modified area when finding a file.
188If non-nil, `cvs-mode-file-file' will place the cursor at the beginning of
189the modified area. If the file is not locally modified, this will obviously
190have no effect."
191 :group 'pcl-cvs
192 :type '(boolean))
193
194(defcustom cvs-buffer-name-alist
195 '(("diff" cvs-diff-buffer-name diff-mode)
196 ("status" "*cvs-info*" cvs-status-mode)
619d6bfc 197 ("tree" "*cvs-info*" cvs-status-mode)
5b467bf4
SM
198 ("message" "*cvs-commit*" nil log-edit)
199 ("log" "*cvs-info*" log-view-mode))
afc05254 200 "Buffer name and mode to be used for each command.
5b467bf4
SM
201This is a list of elements of the form
202
203 (CMD BUFNAME MODE &optional POSTPROC)
204
205CMD is the name of the command.
206BUFNAME is an expression that should evaluate to a string used as
207 a buffer name. It can use the variable CMD if it wants to.
208MODE is the command to use to setup the buffer.
209POSTPROC is a function that should be executed when the command terminates
210
211The CMD used for `cvs-mode-commit' is \"message\". For that special
212 case, POSTPROC is called just after MODE with special arguments."
213 :group 'pcl-cvs
214 :type '(repeat
215 (list (choice (const "diff")
216 (const "status")
217 (const "tree")
218 (const "message")
219 (const "log")
220 (string))
221 (choice (const "*vc-diff*")
222 (const "*cvs-info*")
223 (const "*cvs-commit*")
224 (const (expand-file-name "*cvs-commit*"))
225 (const (format "*cvs-%s*" cmd))
226 (const (expand-file-name (format "*cvs-%s*" cmd)))
227 (sexp :value "my-cvs-info-buffer")
228 (const nil))
229 (choice (function-item diff-mode)
230 (function-item cvs-edit-mode)
231 (function-item cvs-status-mode)
232 function
233 (const nil))
234 (set :inline t
235 (choice (function-item cvs-status-cvstrees)
236 (function-item cvs-status-trees)
237 function)))))
238
239(defvar cvs-buffer-name '(expand-file-name "*cvs*" dir) ;; "*cvs*"
240 "Name of the cvs buffer.
241This expression will be evaluated in an environment where DIR is set to
242the directory name of the cvs buffer.")
243
e5a099ec
SM
244(defvar cvs-temp-buffer-name
245 ;; Was '(expand-file-name " *cvs-tmp*" dir), but that causes them to
246 ;; become non-hidden if uniquification is done `forward'.
247 " *cvs-tmp*"
5b467bf4
SM
248 "*Name of the cvs temporary buffer.
249Output from cvs is placed here for asynchronous commands.")
250
251(defcustom cvs-idiff-imerge-handlers
252 (if (fboundp 'ediff)
253 '(cvs-ediff-diff . cvs-ediff-merge)
254 '(cvs-emerge-diff . cvs-emerge-merge))
afc05254 255 "Pair of functions to be used for resp. diff'ing and merg'ing interactively."
5b467bf4
SM
256 :group 'pcl-cvs
257 :type '(choice (const :tag "Ediff" (cvs-ediff-diff . cvs-ediff-merge))
258 (const :tag "Emerge" (cvs-emerge-diff . cvs-emerge-merge))))
259
5b467bf4
SM
260(defvar cvs-mode-hook nil
261 "Run after `cvs-mode' was setup.")
262
263\f
264;;;;
265;;;; Internal variables, used in the process buffer.
266;;;;
267
268(defvar cvs-postprocess nil
269 "(Buffer local) what to do once the process exits.")
270
271;;;;
272;;;; Internal variables for the *cvs* buffer.
273;;;;
274
275(defcustom cvs-reuse-cvs-buffer 'subdir
276 "When to reuse an existing cvs buffer.
277Alternatives are:
278 CURRENT: just reuse the current buffer if it is a cvs buffer
279 SAMEDIR: reuse any cvs buffer displaying the same directory
280 SUBDIR: or reuse any cvs buffer displaying any sub- or super- directory
281 ALWAYS: reuse any cvs buffer."
282 :group 'pcl-cvs
283 :type '(choice (const always) (const subdir) (const samedir) (const current)))
284
285(defvar cvs-temp-buffer nil
286 "(Buffer local) The temporary buffer associated with this *cvs* buffer.")
287
288(defvar cvs-lock-file nil
289 "Full path to a lock file that CVS is waiting for (or was waiting for).
290This variable is buffer local and only used in the *cvs* buffer.")
291
292(defvar cvs-lock-file-regexp "^#cvs\\.\\([trw]fl\\.[-.a-z0-9]+\\|lock\\)\\'"
293 "Regexp matching the possible names of locks in the CVS repository.")
294
295(defconst cvs-cursor-column 22
296 "Column to position cursor in in `cvs-mode'.")
297
298;;;;
299;;;; Global internal variables
300;;;;
301
5b467bf4
SM
302(defconst cvs-vendor-branch "1.1.1"
303 "The default branch used by CVS for vendor code.")
304
5b467bf4 305(easy-mmode-defmap cvs-mode-diff-map
4f5a9d2b
SM
306 '(("E" "imerge" . cvs-mode-imerge)
307 ("=" . cvs-mode-diff)
308 ("e" "idiff" . cvs-mode-idiff)
309 ("2" "other" . cvs-mode-idiff-other)
310 ("d" "diff" . cvs-mode-diff)
311 ("b" "backup" . cvs-mode-diff-backup)
312 ("h" "head" . cvs-mode-diff-head)
a4bdfaf9 313 ("r" "repository" . cvs-mode-diff-repository)
34ffe043 314 ("y" "yesterday" . cvs-mode-diff-yesterday)
4f5a9d2b
SM
315 ("v" "vendor" . cvs-mode-diff-vendor))
316 "Keymap for diff-related operations in `cvs-mode'."
317 :name "Diff")
ef55aa6c 318;; This is necessary to allow correct handling of \\[cvs-mode-diff-map]
2c0ec709
SM
319;; in substitute-command-keys.
320(fset 'cvs-mode-diff-map cvs-mode-diff-map)
5b467bf4
SM
321
322(easy-mmode-defmap cvs-mode-map
323 ;;(define-prefix-command 'cvs-mode-map-diff-prefix)
324 ;;(define-prefix-command 'cvs-mode-map-control-c-prefix)
5caeb2a5 325 '(;; various
fa443ddf 326 ;; (undo . cvs-mode-undo)
5b467bf4
SM
327 ("?" . cvs-help)
328 ("h" . cvs-help)
329 ("q" . cvs-bury-buffer)
ef55aa6c 330 ("z" . kill-this-buffer)
5b467bf4 331 ("F" . cvs-mode-set-flags)
213a58ae 332 ;; ("\M-f" . cvs-mode-force-command)
7980ab49 333 ("!" . cvs-mode-force-command)
5b467bf4
SM
334 ("\C-c\C-c" . cvs-mode-kill-process)
335 ;; marking
336 ("m" . cvs-mode-mark)
337 ("M" . cvs-mode-mark-all-files)
28037ecf 338 ("S" . cvs-mode-mark-on-state)
5b467bf4
SM
339 ("u" . cvs-mode-unmark)
340 ("\C-?". cvs-mode-unmark-up)
341 ("%" . cvs-mode-mark-matching-files)
342 ("T" . cvs-mode-toggle-marks)
343 ("\M-\C-?" . cvs-mode-unmark-all-files)
344 ;; navigation keys
345 (" " . cvs-mode-next-line)
346 ("n" . cvs-mode-next-line)
347 ("p" . cvs-mode-previous-line)
25edda53
DN
348 ("\t" . cvs-mode-next-line)
349 ([backtab] . cvs-mode-previous-line)
5b467bf4
SM
350 ;; M- keys are usually those that operate on modules
351 ;;("\M-C". cvs-mode-rcs2log) ; i.e. "Create a ChangeLog"
352 ;;("\M-t". cvs-rtag)
353 ;;("\M-l". cvs-rlog)
354 ("\M-c". cvs-checkout)
355 ("\M-e". cvs-examine)
356 ("g" . cvs-mode-revert-buffer)
357 ("\M-u". cvs-update)
358 ("\M-s". cvs-status)
359 ;; diff commands
360 ("=" . cvs-mode-diff)
2c0ec709 361 ("d" . cvs-mode-diff-map)
5b467bf4 362 ;; keys that operate on individual files
02f7be41 363 ("\C-k" . cvs-mode-acknowledge)
5b467bf4
SM
364 ("A" . cvs-mode-add-change-log-entry-other-window)
365 ;;("B" . cvs-mode-byte-compile-files)
366 ("C" . cvs-mode-commit-setup)
367 ("O" . cvs-mode-update)
368 ("U" . cvs-mode-undo)
369 ("I" . cvs-mode-insert)
370 ("a" . cvs-mode-add)
371 ("b" . cvs-set-branch-prefix)
372 ("B" . cvs-set-secondary-branch-prefix)
373 ("c" . cvs-mode-commit)
374 ("e" . cvs-mode-examine)
375 ("f" . cvs-mode-find-file)
02f7be41 376 ("\C-m" . cvs-mode-find-file)
5b467bf4
SM
377 ("i" . cvs-mode-ignore)
378 ("l" . cvs-mode-log)
379 ("o" . cvs-mode-find-file-other-window)
380 ("r" . cvs-mode-remove)
381 ("s" . cvs-mode-status)
382 ("t" . cvs-mode-tag)
9d2475ef 383 ("v" . cvs-mode-view-file)
5b467bf4
SM
384 ("x" . cvs-mode-remove-handled)
385 ;; cvstree bindings
386 ("+" . cvs-mode-tree)
387 ;; mouse bindings
2c0ec709 388 ([mouse-2] . cvs-mode-find-file)
d086b1a2 389 ([follow-link] . (lambda (pos)
94d5c876 390 (if (eq (get-char-property pos 'face) 'cvs-filename) t)))
5b467bf4 391 ([(down-mouse-3)] . cvs-menu)
28037ecf
SM
392 ;; dired-like bindings
393 ("\C-o" . cvs-mode-display-file)
5b467bf4
SM
394 ;; Emacs-21 toolbar
395 ;;([tool-bar item1] . (menu-item "Examine" cvs-examine :image (image :file "/usr/share/icons/xpaint.xpm" :type xpm)))
396 ;;([tool-bar item2] . (menu-item "Update" cvs-update :image (image :file "/usr/share/icons/mail1.xpm" :type xpm)))
397 )
398 "Keymap for `cvs-mode'."
5caeb2a5
GM
399 :dense t
400 :suppress t)
5b467bf4
SM
401
402(fset 'cvs-mode-map cvs-mode-map)
403
8e41e2e5
SM
404(easy-menu-define cvs-menu cvs-mode-map "Menu used in `cvs-mode'."
405 '("CVS"
10edbb1a
RS
406 ["Open file" cvs-mode-find-file t]
407 ["Open in other window" cvs-mode-find-file-other-window t]
28037ecf 408 ["Display in other window" cvs-mode-display-file t]
8e41e2e5
SM
409 ["Interactive merge" cvs-mode-imerge t]
410 ("View diff"
411 ["Interactive diff" cvs-mode-idiff t]
412 ["Current diff" cvs-mode-diff t]
413 ["Diff with head" cvs-mode-diff-head t]
414 ["Diff with vendor" cvs-mode-diff-vendor t]
10edbb1a 415 ["Diff against yesterday" cvs-mode-diff-yesterday t]
8e41e2e5
SM
416 ["Diff with backup" cvs-mode-diff-backup t])
417 ["View log" cvs-mode-log t]
418 ["View status" cvs-mode-status t]
419 ["View tag tree" cvs-mode-tree t]
420 "----"
421 ["Insert" cvs-mode-insert]
422 ["Update" cvs-mode-update (cvs-enabledp 'update)]
423 ["Re-examine" cvs-mode-examine t]
424 ["Commit" cvs-mode-commit-setup (cvs-enabledp 'commit)]
5fe50228 425 ["Tag" cvs-mode-tag (cvs-enabledp (when cvs-force-dir-tag 'tag))]
8e41e2e5
SM
426 ["Undo changes" cvs-mode-undo (cvs-enabledp 'undo)]
427 ["Add" cvs-mode-add (cvs-enabledp 'add)]
428 ["Remove" cvs-mode-remove (cvs-enabledp 'remove)]
429 ["Ignore" cvs-mode-ignore (cvs-enabledp 'ignore)]
430 ["Add ChangeLog" cvs-mode-add-change-log-entry-other-window t]
431 "----"
c224c19a 432 ["Mark" cvs-mode-mark t]
8e41e2e5 433 ["Mark all" cvs-mode-mark-all-files t]
28037ecf
SM
434 ["Mark by regexp..." cvs-mode-mark-matching-files t]
435 ["Mark by state..." cvs-mode-mark-on-state t]
c224c19a 436 ["Unmark" cvs-mode-unmark t]
8e41e2e5
SM
437 ["Unmark all" cvs-mode-unmark-all-files t]
438 ["Hide handled" cvs-mode-remove-handled t]
439 "----"
10edbb1a
RS
440 ["PCL-CVS Manual" (lambda () (interactive)
441 (info "(pcl-cvs)Top")) t]
442 "----"
8e41e2e5 443 ["Quit" cvs-mode-quit t]))
5b467bf4 444
ef55aa6c 445;;;;
5b467bf4 446;;;; CVS-Minor mode
ef55aa6c 447;;;;
5b467bf4
SM
448
449(defcustom cvs-minor-mode-prefix "\C-xc"
450 "Prefix key for the `cvs-mode' bindings in `cvs-minor-mode'."
451 :group 'pcl-cvs)
452
453(easy-mmode-defmap cvs-minor-mode-map
213a58ae
SM
454 `((,cvs-minor-mode-prefix . cvs-mode-map)
455 ("e" . (menu-item nil cvs-mode-edit-log
456 :filter (lambda (x) (if (derived-mode-p 'log-view-mode) x)))))
4f5a9d2b 457 "Keymap for `cvs-minor-mode', used in buffers related to PCL-CVS.")
5b467bf4
SM
458
459(defvar cvs-buffer nil
460 "(Buffer local) The *cvs* buffer associated with this buffer.")
461(put 'cvs-buffer 'permanent-local t)
462;;(make-variable-buffer-local 'cvs-buffer)
463
464(defvar cvs-minor-wrap-function nil
465 "Function to call when switching to the *cvs* buffer.
466Takes two arguments:
467- a *cvs* buffer.
468- a zero-arg function which is guaranteed not to switch buffer.
469It is expected to call the function.")
470;;(make-variable-buffer-local 'cvs-minor-wrap-function)
471
472(defvar cvs-minor-current-files)
473;;"Current files in a `cvs-minor-mode' buffer."
474;; This should stay `void' because we want to be able to tell the difference
475;; between an empty list and no list at all.
476
477(defconst cvs-pcl-cvs-dirchange-re "^pcl-cvs: descending directory \\(.*\\)$")
478
ef55aa6c 479;;;;
cb3430a1 480;;;; autoload the global menu
ef55aa6c 481;;;;
5b467bf4 482
cb3430a1
SM
483;;;###autoload
484(defvar cvs-global-menu
485 (let ((m (make-sparse-keymap "PCL-CVS")))
486 (define-key m [status]
8f43cbf3
DN
487 `(menu-item ,(purecopy "Directory Status") cvs-status
488 :help ,(purecopy "A more verbose status of a workarea")))
cb3430a1 489 (define-key m [checkout]
8f43cbf3
DN
490 `(menu-item ,(purecopy "Checkout Module") cvs-checkout
491 :help ,(purecopy "Check out a module from the repository")))
cb3430a1 492 (define-key m [update]
8f43cbf3
DN
493 `(menu-item ,(purecopy "Update Directory") cvs-update
494 :help ,(purecopy "Fetch updates from the repository")))
cb3430a1 495 (define-key m [examine]
8f43cbf3
DN
496 `(menu-item ,(purecopy "Examine Directory") cvs-examine
497 :help ,(purecopy "Examine the current state of a workarea")))
648a3c0c 498 (fset 'cvs-global-menu m)))
5b467bf4
SM
499
500
501;; cvs-1.10 and above can take file arguments in other directories
502;; while others need to be executed once per directory
503(defvar cvs-execute-single-dir
c6ea7612
SM
504 (if (or (null cvs-version)
505 (or (>= (cdr cvs-version) 10) (> (car cvs-version) 1)))
506 ;; Supposedly some recent versions of CVS output some directory info
507 ;; as they recurse downthe tree, but it's not good enough in the case
508 ;; where we run "cvs status foo bar/foo".
5b467bf4
SM
509 '("status")
510 t)
511 "Whether cvs commands should be executed a directory at a time.
512If a list, specifies for which commands the single-dir mode should be used.
513If T, single-dir mode should be used for all operations.
514
515CVS versions before 1.10 did not allow passing them arguments in different
516directories, so pcl-cvs checks what version you're using to determine
517whether to use the new feature or not.
518Sadly, even with a new cvs executable, if you connect to an older cvs server
519\(typically a cvs-1.9 on the server), the old restriction applies. In such
520a case the sanity check made by pcl-cvs fails and you will have to manually
0ff9b955 521set this variable to t (until the cvs server is upgraded).
5b467bf4 522When the above problem occurs, pcl-cvs should (hopefully) catch cvs' error
c6ea7612 523message and replace it with a message telling you to change this variable.")
5b467bf4
SM
524
525;;
526(provide 'pcvs-defs)
527
98337d2b 528;; arch-tag: c7c701d0-d1d4-4aa9-a302-007bb03aca5e
3afbc435 529;;; pcvs-defs.el ends here