From: Dan Nicolaescu Date: Fri, 20 Nov 2009 06:56:16 +0000 (+0000) Subject: (vc-deduce-fileset): Allow non-state changing operations X-Git-Tag: emacs-pretest-23.1.90~306 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8de724f3d10d0a11cf0ef971084659a36bdb02b6;p=emacs.git (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. --- diff --git a/etc/NEWS b/etc/NEWS index ba91558615f..31e8620f6ab 100644 --- 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 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e68d1e6012f..a05579268bf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2009-11-20 Dan Nicolaescu + * 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. diff --git a/lisp/vc.el b/lisp/vc.el index f58ba6ebab9..7c4cfbd28af 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -617,7 +617,8 @@ (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