diff lisp/vc-dispatcher.el @ 94778:b9687393def1

Large simplification in (vc-deduce-fileset) logic.
author Eric S. Raymond <esr@snark.thyrsus.com>
date Fri, 09 May 2008 01:57:21 +0000
parents bf91c987049c
children 1f66528f35c3
line wrap: on
line diff
--- a/lisp/vc-dispatcher.el	Thu May 08 18:10:05 2008 +0000
+++ b/lisp/vc-dispatcher.el	Fri May 09 01:57:21 2008 +0000
@@ -1328,64 +1328,31 @@
   "Are we in a directory browser buffer?"
   (eq major-mode 'vc-dir-mode))
 
-(defun vc-dispatcher-selection-set (eligible
-				   &optional 
-				   allow-directory-wildcard 
-				   allow-ineligible
-				   include-files-not-directories)
+(defun vc-dispatcher-selection-set ()
   "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.
-Otherwise, if we're looking at a buffer for which ELIGIBLE returns non-NIL,
-the fileset is a singleton containing this file.
-If neither of these things is true, but ALLOW-DIRECTORY-WILDCARD is on
-and we're in a directory buffer, select the current directory.
-If none of these conditions is met, but ALLOW-INELIGIBLE is on and the
-visited file is not registered, return a singleton fileset containing it.
-If INCLUDE-FILES-NOT-DIRECTORIES then if directories are marked,
-return the list of VC files in those directories instead of
-the directories themselves.
-Otherwise, throw an error."
+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 
+display, but the current buffer visits a file, the fileset is a singleton 
+containing that file. Otherwise, throw an error."
   (let ((files
     (cond
      ;; Browsing with vc-dir
-     ((eq major-mode 'vc-dir-mode)
-      (or
-       (if include-files-not-directories
-	   (vc-dir-marked-only-files)
-	 (vc-dir-marked-files))
-       (list (vc-dir-current-file))))
+     ((vc-dispatcher-browsing)
+      (or (vc-dir-marked-files) (list (vc-dir-current-file))))
      ;; Visiting an eligible file
-     ((funcall eligible buffer-file-name)
+     ((buffer-file-name)
       (list buffer-file-name))
-     ;; No eligible file -- if there's a parent buffer, deuce from there
+     ;; No eligible file -- if there's a parent buffer, deduce from there
      ((and vc-parent-buffer (or (buffer-file-name vc-parent-buffer)
 				(with-current-buffer vc-parent-buffer
 				  (vc-dispatcher-browsing))))
-      (progn
-	(set-buffer vc-parent-buffer)
-	(vc-dispatcher-selection-set eligible)))
-     ;; No parent buffer, we may want to select entire directory
-     ;;
-     ;; This is guarded by an enabling arg so users won't potentially
-     ;; shoot themselves in the foot by modifying a fileset they can't
-     ;; verify by eyeball.  Allow it for nondestructive commands like
-     ;; making diffs, or possibly for destructive ones that have
-     ;; confirmation prompts.
-     ((and allow-directory-wildcard
-		(equal buffer-file-name nil)
-		(equal list-buffers-directory default-directory))
-      (progn
-	(message "All eligible files below %s selected."
-		 default-directory)
-	 (list default-directory)))
-     ;; Last, if we're allowing ineligible files and visiting one, select it.
-     ((and allow-ineligible (not (eligible buffer-file-name)))
-      (list buffer-file-name))
+      (with-current-buffer vc-parent-buffer
+			    (vc-dispatcher-selection-set)))
      ;; No good set here, throw error
      (t (error "No fileset is available here.")))))
     ;; 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 visting the fileset don't match the on-disk contents.
+    ;; buffers visiting the fileset don't match the on-disk contents.
     (dolist (file files)
       (let ((visited (get-file-buffer file)))
 	(when visited