]> git.eshelyaron.com Git - emacs.git/commitdiff
(vc-dispatcher-browsing): Use derived-mode-p.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 9 May 2008 15:30:47 +0000 (15:30 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 9 May 2008 15:30:47 +0000 (15:30 +0000)
(vc-dir-prepare-status-buffer): Use vc-dispatcher-browsing.
(vc-dispatcher-in-fileset-p): New fun.
(vc-dispatcher-selection-set): Use it to properly handle directories.

lisp/ChangeLog
lisp/vc-dispatcher.el

index 65b7bc0e3e35c529dfbb61cef75ecb489357fb5d..c7e546b6978ee905ff8d03b9e97938a35a7c4033 100644 (file)
@@ -1,3 +1,10 @@
+2008-05-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * vc-dispatcher.el (vc-dispatcher-browsing): Use derived-mode-p.
+       (vc-dir-prepare-status-buffer): Use vc-dispatcher-browsing.
+       (vc-dispatcher-in-fileset-p): New fun.
+       (vc-dispatcher-selection-set): Use it to properly handle directories.
+
 2008-05-09  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * vc.el (vc-version-diff, vc-print-log, vc-revert, vc-rollback)
index 002ac5438e6a4a65f66631fffedc2651d745a4a3..2970854c019ebec0393df6c124267ef80bdd35ae 100644 (file)
@@ -671,7 +671,7 @@ See `run-hooks'."
                (unless create-new
                  (dolist (buffer (buffer-list))
                    (set-buffer buffer)
-                   (when (and (eq major-mode 'vc-dir-mode)
+                   (when (and (vc-dispatcher-browsing)
                               (string= (expand-file-name default-directory) dir))
                      (return buffer)))))))
     (or buf
@@ -1326,7 +1326,17 @@ NOT-URGENT means it is ok to continue if the user says not to save."
 
 (defun vc-dispatcher-browsing ()
   "Are we in a directory browser buffer?"
-  (eq major-mode 'vc-dir-mode))
+  (derived-mode-p 'vc-dir-mode))
+
+(defun vc-dispatcher-in-fileset-p (fileset)
+  (let ((member nil))
+    (while (and (not member) fileset)
+      (let ((elem (pop fileset)))
+        (if (if (file-directory-p elem)
+                (eq t (compare-strings buffer-file-name nil (length elem)
+                                       elem nil nil))
+              (eq (current-buffer) (get-file-buffer elem)))
+            (setq member t))))))
 
 (defun vc-dispatcher-selection-set ()
   "Deduce a set of files to which to apply an operation. Return the fileset.
@@ -1350,31 +1360,13 @@ containing that file. Otherwise, throw an error."
                            (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  
+    ;; 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.
-    (dolist (file files)
-      (let ((visited (get-file-buffer file)))
-       (when visited
-         (if (vc-dispatcher-browsing)
-             (switch-to-buffer-other-window visited)
-           (set-buffer visited))
-         ;; Check relation of buffer and file, and make sure
-         ;; user knows what he's doing.  First, finding the file
-         ;; will check whether the file on disk is newer.
-         ;; Ignore buffer-read-only during this test, and
-         ;; preserve find-file-literally.
-         (let ((buffer-read-only (not (file-writable-p file))))
-           (find-file-noselect file nil find-file-literally))
-         (if (not (verify-visited-file-modtime (current-buffer)))
-             (if (yes-or-no-p (format "Replace %s on disk with buffer contents? " file))
-                 (write-file buffer-file-name)
-               (error "Aborted"))
-           ;; Now, check if we have unsaved changes.
-           (vc-buffer-sync t)
-           (when (buffer-modified-p)
-             (or (y-or-n-p (message "Use %s on disk, keeping modified buffer? " file))
-                 (error "Aborted")))))))
+    ;; 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 fileset)))
     files))
 
 ;; arch-tag: 7d08b17f-5470-4799-914b-bfb9fcf6a246