]> git.eshelyaron.com Git - emacs.git/commitdiff
(vc-deduce-fileset): Allow non-state changing operations
authorDan Nicolaescu <dann@ics.uci.edu>
Fri, 20 Nov 2009 06:56:16 +0000 (06:56 +0000)
committerDan Nicolaescu <dann@ics.uci.edu>
Fri, 20 Nov 2009 06:56:16 +0000 (06:56 +0000)
from a dired buffer.
(vc-dired-deduce-fileset): New function.
(vc-root-diff, vc-print-root-log): Use it.

etc/NEWS
lisp/ChangeLog
lisp/vc.el

index ba91558615fb5c37d181bc13ff6ee2349e79db8d..31e8620f6ab0adb8af1408ec2d7047eb9c8ce327 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -230,6 +230,8 @@ advantage of this feature.
 
 *** When a file is not found, VC will not try to check it out of RCS anymore.
 
+*** Diff and log operations can be used from dired buffers.
+
 *** vc-git changes
 
 **** The new variable vc-git-add-signoff can be used to add a
index e68d1e6012f81415abefce6ad23a0b98137d9c55..a05579268bf1da03093dd0dafe5b9729459103ba 100644 (file)
@@ -1,5 +1,10 @@
 2009-11-20  Dan Nicolaescu  <dann@ics.uci.edu>
 
+       * vc.el (vc-deduce-fileset): Allow non-state changing operations
+       from a dired buffer.
+       (vc-dired-deduce-fileset): New function.
+       (vc-root-diff, vc-print-root-log): Use it.
+
        * vc-annotate.el (vc-annotate-show-log-revision-at-line): Pass a
        nil LIMIT argument to vc-print-log-internal.
 
index f58ba6ebab95fc4ee6a4c2e0564ddeb394539699..7c4cfbd28afae3e2d6f0cfee4f079cf5c853d5d8 100644 (file)
 (require 'vc-dispatcher)
 
 (eval-when-compile
-  (require 'cl))
+  (require 'cl)
+  (require 'dired))
 
 (unless (assoc 'vc-parent-buffer minor-mode-alist)
   (setq minor-mode-alist
@@ -902,6 +903,10 @@ current buffer."
     (cond
      ((derived-mode-p 'vc-dir-mode)
       (vc-dir-deduce-fileset state-model-only-files))
+     ((derived-mode-p 'dired-mode)
+      (if observer
+         (vc-dired-deduce-fileset)
+       (error "State changing VC operations not supported in `dired-mode'")))
      ((setq backend (vc-backend buffer-file-name))
       (if state-model-only-files
        (list backend (list buffer-file-name)
@@ -930,6 +935,12 @@ current buffer."
              (list buffer-file-name))))
      (t (error "No fileset is available here")))))
 
+(defun vc-dired-deduce-fileset ()
+  (let ((backend (vc-responsible-backend default-directory)))
+    (unless backend (error "Directory not under VC"))
+    (list backend
+       (dired-map-over-marks (dired-get-filename nil t) nil))))
+
 (defun vc-ensure-vc-buffer ()
   "Make sure that the current buffer visits a version-controlled file."
   (cond
@@ -1601,6 +1612,7 @@ saving the buffer."
     (when buffer-file-name (vc-buffer-sync not-urgent))
     (let ((backend
           (cond ((derived-mode-p 'vc-dir-mode)  vc-dir-backend)
+                ((derived-mode-p 'dired-mode) (vc-responsible-backend default-directory))
                 (vc-mode (vc-backend buffer-file-name))))
          rootdir working-revision)
       (unless backend
@@ -1937,6 +1949,7 @@ If WORKING-REVISION is non-nil, leave the point at that revision."
      (list nil))))
   (let ((backend
         (cond ((derived-mode-p 'vc-dir-mode)  vc-dir-backend)
+              ((derived-mode-p 'dired-mode) (vc-responsible-backend default-directory))
               (vc-mode (vc-backend buffer-file-name))))
        rootdir working-revision)
     (unless backend