pcvs-defs.el 19 KB

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