X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/54ebae283f2dfdc5995161245dde09f2166e3bfd..dfc9a078920aaa69c75b712a9199f38db6c13de4:/lisp/vc.el diff --git a/lisp/vc.el b/lisp/vc.el index 64de035192..a0b6ffa0ad 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -1,7 +1,7 @@ ;;; vc.el --- drive a version-control system from within Emacs -;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, -;; 2000, 2001, 2003, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, +;; 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: FSF (see below for full credits) ;; Maintainer: Andre Spiegel @@ -23,8 +23,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Credits: @@ -46,7 +46,8 @@ ;; This mode is fully documented in the Emacs user's manual. ;; -;; Supported version-control systems presently include SCCS, RCS, and CVS. +;; Supported version-control systems presently include CVS, RCS, GNU Arch, +;; Subversion, Meta-CVS, and SCCS (or its free replacement, CSSC). ;; ;; Some features will not work with old RCS versions. Where ;; appropriate, VC finds out which version you have, and allows or @@ -68,7 +69,7 @@ ;; ;; The vc code maintains some internal state in order to reduce expensive ;; version-control operations to a minimum. Some names are only computed -;; once. If you perform version control operations with RCS/SCCS/CVS while +;; once. If you perform version control operations with the backend while ;; vc's back is turned, or move/rename master files while vc is running, ;; vc may get seriously confused. Don't do these things! ;; @@ -152,7 +153,7 @@ ;; have such a brief-comparison feature, the default implementation of ;; this function can be used, which delegates to a full ;; vc-BACKEND-diff. (Note that vc-BACKEND-diff must not run -;; asynchronously in this case.) +;; asynchronously in this case, see variable `vc-disable-async-diff'.) ;; ;; - mode-line-string (file) ;; @@ -566,6 +567,15 @@ specific to any particular backend." :group 'vc :version "21.1") +(defcustom vc-allow-async-revert nil + "*Specifies whether the diff during \\[vc-revert-buffer] may be asynchronous. +Enabling this option means that you can confirm a revert operation even +if the local changes in the file have not been found and displayed yet." + :type '(choice (const :tag "No" nil) + (const :tag "Yes" t)) + :group 'vc + :version "22.1") + ;;;###autoload (defcustom vc-checkout-hook nil "*Normal hook (list of functions) run after checking out a file. @@ -607,23 +617,23 @@ version control backend imposes itself." ;; Annotate customization (defcustom vc-annotate-color-map - '(( 20. . "#FF0000") - ( 40. . "#FF3800") - ( 60. . "#FF7000") - ( 80. . "#FFA800") - (100. . "#FFE000") - (120. . "#E7FF00") - (140. . "#AFFF00") - (160. . "#77FF00") - (180. . "#3FFF00") - (200. . "#07FF00") - (220. . "#00FF31") - (240. . "#00FF69") - (260. . "#00FFA1") - (280. . "#00FFD9") - (300. . "#00EEFF") - (320. . "#00B6FF") - (340. . "#007EFF")) + '(( 20. . "#FFCC00") + ( 40. . "#FF6666") + ( 60. . "#FF6600") + ( 80. . "#FF3300") + (100. . "#FF00FF") + (120. . "#FF0000") + (140. . "#CCCC00") + (160. . "#CC00CC") + (180. . "#BC8F8F") + (200. . "#99CC00") + (220. . "#999900") + (240. . "#7AC5CD") + (260. . "#66CC00") + (280. . "#33CC33") + (300. . "#00CCFF") + (320. . "#00CC99") + (340. . "#0099FF")) "*Association list of age versus color, for \\[vc-annotate]. Ages are given in units of fractional days. Default is eighteen steps using a twenty day increment." @@ -714,6 +724,11 @@ The keys are \(BUFFER . BACKEND\). See also `vc-annotate-get-backend'.") (defvar vc-parent-buffer-name nil) (put 'vc-parent-buffer-name 'permanent-local t) +(defvar vc-disable-async-diff nil + "VC sets this to t locally to disable some async diff operations. +Backends that offer asynchronous diffs should respect this variable +in their implementation of vc-BACKEND-diff.") + (defvar vc-log-file) (defvar vc-log-version) @@ -723,6 +738,7 @@ The keys are \(BUFFER . BACKEND\). See also `vc-annotate-get-backend'.") ;; functions that operate on RCS revision numbers. This code should ;; also be moved into the backends. It stays for now, however, since ;; it is used in code below. +;;;###autoload (defun vc-trunk-p (rev) "Return t if REV is a revision on the trunk." (not (eq nil (string-match "\\`[0-9]+\\.[0-9]+\\'" rev)))) @@ -944,9 +960,14 @@ that is inserted into the command line before the filename." (mapconcat 'identity vc-path path-separator)) process-environment)) (w32-quote-process-args t)) + (if (and (eq okstatus 'async) (file-remote-p default-directory)) + ;; start-process does not support remote execution + (setq okstatus nil)) (if (eq okstatus 'async) - (let ((proc (apply 'start-process command (current-buffer) command - squeezed))) + (let ((proc + (let ((process-connection-type nil)) + (apply 'start-process command (current-buffer) command + squeezed)))) (unless (active-minibuffer-window) (message "Running %s in the background..." command)) ;;(set-process-sentinel proc (lambda (p msg) (delete-process p))) @@ -1813,7 +1834,7 @@ actually call the backend, but performs a local diff." ;; Old def for compatibility with Emacs-21.[123]. (defmacro vc-diff-switches-list (backend) `(vc-switches ',backend 'diff)) -(make-obsolete 'vc-diff-switches-list 'vc-switches "21.4") +(make-obsolete 'vc-diff-switches-list 'vc-switches "22.1") (defun vc-default-diff-tree (backend dir rev1 rev2) "List differences for all registered files at and below DIR. @@ -2435,11 +2456,13 @@ changes found in the master file; use \\[universal-argument] \\[vc-next-action] (unless (yes-or-no-p "File seems up-to-date. Revert anyway? ") (error "Revert canceled"))) (unless (vc-workfile-unchanged-p file) + (message "Finding changes...") ;; vc-diff selects the new window, which is not what we want: ;; if the new window is on another frame, that'd require the user ;; moving her mouse to answer the yes-or-no-p question. - (let ((win (save-selected-window - (setq status (vc-diff nil t)) (selected-window)))) + (let* ((vc-disable-async-diff (not vc-allow-async-revert)) + (win (save-selected-window + (setq status (vc-diff nil t)) (selected-window)))) (vc-exec-after `(message nil)) (when status (unwind-protect @@ -3020,12 +3043,12 @@ use; you may override this using the second optional arg MODE." ;;;###autoload (defun vc-annotate (prefix &optional revision display-mode) - "Display the edit history of the current file using colours. + "Display the edit history of the current file using colors. This command creates a buffer that shows, for each line of the current -file, when it was last edited and by whom. Additionally, colours are +file, when it was last edited and by whom. Additionally, colors are used to show the age of each line--blue means oldest, red means -youngest, and intermediate colours indicate intermediate ages. By +youngest, and intermediate colors indicate intermediate ages. By default, the time scale stretches back one year into the past; everything that is older than that is shown in blue.