From cb5d44b66d1d8d5ab3de862896a25bae88e76da2 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Fri, 9 May 2008 20:17:50 +0000 Subject: [PATCH] Dupport an use an observer flag in (vc-dispatcher-selection-set). --- lisp/ChangeLog | 7 ++++++- lisp/vc-dispatcher.el | 19 ++++--------------- lisp/vc.el | 18 ++++++++++++++---- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 20e02ce4c7..cbb2eb4dc4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,9 +2,14 @@ * vc.el (vc-dir), vc-hooks.el: Tweak the VC directory bindings. These are now documented in the manual. - * vc-dispatcher.el (vc-dir-update, vc-dir-parent-marked-p, + * vc-dispatcher.el (vc-dir-update, vc-dir-parent-marked-p, vc-dir-children-marked-p): Remove the vc-dir-insert-directories global. + * vc-dispatcher.el (vc-dispatcher-selection-set): Allow callers to + pass in an observer flag that says no buffer sync is required. + * vc.el (vc-deduce-fileset, vc-print-log, vc-version-diff): Use + the observer flag. + 2008-05-09 Michael Albinus * simple.el (start-file-process): Clarify docstring. diff --git a/lisp/vc-dispatcher.el b/lisp/vc-dispatcher.el index de034116da..16c8a0fc5a 100644 --- a/lisp/vc-dispatcher.el +++ b/lisp/vc-dispatcher.el @@ -1270,16 +1270,6 @@ U - if the cursor is on a file: unmark all the files with the same VC state (put 'vc-dir-mode 'mode-class 'special) -(defun vc-buffer-sync (&optional not-urgent) - "Make sure the current buffer and its working file are in sync. -NOT-URGENT means it is ok to continue if the user says not to save." - (when (buffer-modified-p) - (if (or vc-suppress-confirm - (y-or-n-p (format "Buffer %s modified; save it? " (buffer-name)))) - (save-buffer) - (unless not-urgent - (error "Aborted"))))) - (defun vc-dispatcher-browsing () "Are we in a directory browser buffer?" (derived-mode-p 'vc-dir-mode)) @@ -1295,7 +1285,7 @@ NOT-URGENT means it is ok to continue if the user says not to save." (setq member t)))) member)) -(defun vc-dispatcher-selection-set () +(defun vc-dispatcher-selection-set (&optional observer) "Deduce a set of files to which to apply an operation. Return the fileset. If we're in a directory display, the fileset is the list of marked files (if there is one) else the file on the curreent line. If not in a directory @@ -1320,10 +1310,9 @@ containing that file. Otherwise, throw an error." ;; We assume, in order to avoid unpleasant surprises to the user, ;; that a fileset is not in good shape to be handed to the user if the ;; buffers visiting the fileset don't match the on-disk contents. - ;; This is actually untrue for operations like `print-log' (or `diff' - ;; between two revisions), so maybe this should be moved elsewhere. - (save-some-buffers - nil (lambda () (vc-dispatcher-in-fileset-p files))) + (if (not observer) + (save-some-buffers + nil (lambda () (vc-dispatcher-in-fileset-p files)))) files)) ;; arch-tag: 7d08b17f-5470-4799-914b-bfb9fcf6a246 diff --git a/lisp/vc.el b/lisp/vc.el index 2a46d13873..55fc1cc9fa 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -1002,10 +1002,10 @@ Only files already under version control are noticed." node (lambda (f) (when (vc-backend f) (push f flattened))))) (nreverse flattened))) -(defun vc-deduce-fileset () +(defun vc-deduce-fileset (&optional observer) "Deduce a set of files and a backend to which to apply an operation and the common state of the fileset. Return (BACKEND . FILESET)." - (let* ((fileset (vc-dispatcher-selection-set)) + (let* ((fileset (vc-dispatcher-selection-set observer)) ;; FIXME: Store the backend in a buffer-local variable. (backend (if (derived-mode-p 'vc-dir-mode) (vc-responsible-backend default-directory) @@ -1031,6 +1031,16 @@ the common state of the fileset. Return (BACKEND . FILESET)." (unless (vc-backend buffer-file-name) (error "File %s is not under version control" buffer-file-name)))))) +(defun vc-buffer-sync (&optional not-urgent) + "Make sure the current buffer and its working file are in sync. +NOT-URGENT means it is ok to continue if the user says not to save." + (when (buffer-modified-p) + (if (or vc-suppress-confirm + (y-or-n-p (format "Buffer %s modified; save it? " (buffer-name)))) + (save-buffer) + (unless not-urgent + (error "Aborted"))))) + ;;; Support for the C-x v v command. ;; This is where all the single-file-oriented code from before the fileset ;; rewrite lives. @@ -1561,7 +1571,7 @@ returns t if the buffer had changes, nil otherwise." (defun vc-version-diff (files rev1 rev2) "Report diffs between revisions of the fileset in the repository history." (interactive - (let* ((vc-fileset (vc-deduce-fileset)) + (let* ((vc-fileset (vc-deduce-fileset t)) (files (cdr vc-fileset)) (backend (car vc-fileset)) (first (car files)) @@ -2123,7 +2133,7 @@ allowed and simply skipped)." "List the change log of the current fileset in a window. If WORKING-REVISION is non-nil, leave the point at that revision." (interactive) - (let* ((vc-fileset (vc-deduce-fileset)) + (let* ((vc-fileset (vc-deduce-fileset t)) (backend (car vc-fileset)) (files (cdr vc-fileset)) (working-revision (or working-revision (vc-working-revision (car files))))) -- 2.20.1