changeset 92345:4ffd887822d7

* vc.el (vc-status-crt-marked): New variable. (vc-status-mode): Make it local. (vc-status-refresh): Use it to save the marked files. (vc-update-vc-status-buffer): Use it to restore the marked files. * vc-svn.el (vc-svn-after-dir-status): * vc-hg.el (vc-hg-after-dir-status): Clean up the temporary buffer.
author Dan Nicolaescu <dann@ics.uci.edu>
date Fri, 29 Feb 2008 19:13:54 +0000
parents 1ecac29c5fcc
children 0ad96a7f6183
files lisp/ChangeLog lisp/vc-hg.el lisp/vc-hooks.el lisp/vc-svn.el lisp/vc.el
diffstat 5 files changed, 42 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Feb 29 07:55:05 2008 +0000
+++ b/lisp/ChangeLog	Fri Feb 29 19:13:54 2008 +0000
@@ -1,3 +1,13 @@
+2008-02-29  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* vc.el (vc-status-crt-marked): New variable.
+	(vc-status-mode): Make it local.
+	(vc-status-refresh): Use it to save the marked files.
+	(vc-update-vc-status-buffer): Use it to restore the marked files.
+
+	* vc-svn.el (vc-svn-after-dir-status):
+	* vc-hg.el (vc-hg-after-dir-status): Clean up the temporary buffer.
+
 2008-02-29  Glenn Morris  <rgm@gnu.org>
 
 	* allout.el (allout-topic-encryption-bullet)
--- a/lisp/vc-hg.el	Fri Feb 29 07:55:05 2008 +0000
+++ b/lisp/vc-hg.el	Fri Feb 29 19:13:54 2008 +0000
@@ -482,7 +482,7 @@
 (define-derived-mode vc-hg-incoming-mode vc-hg-log-view-mode "Hg-Incoming")
 
 ;; XXX Experimental function for the vc-dired replacement.
-(defun vc-hg-after-dir-status (update-function buff)
+(defun vc-hg-after-dir-status (update-function status-buffer)
   (let ((status-char nil)
 	(file nil)
 	(translation '((?= . up-to-date)
@@ -505,7 +505,9 @@
 	(when (and translated (not (eq (cdr translated) 'up-to-date)))
 	  (push (cons file (cdr translated)) result))
 	(forward-line))
-      (funcall update-function result buff)))
+      ;; Remove the temporary buffer.
+      (kill-buffer (current-buffer))
+      (funcall update-function result status-buffer)))
 
 ;; XXX Experimental function for the vc-dired replacement.
 (defun vc-hg-dir-status (dir update-function status-buffer)
--- a/lisp/vc-hooks.el	Fri Feb 29 07:55:05 2008 +0000
+++ b/lisp/vc-hooks.el	Fri Feb 29 19:13:54 2008 +0000
@@ -605,6 +605,8 @@
 ;; Backward compatibility.
 (define-obsolete-function-alias
   'vc-workfile-version 'vc-working-revision "23.1")
+(define-obsolete-function-alias
+  'vc-previous-version 'vc-previous-revision "23.1")
 (defun vc-default-working-revision (backend file)
   (message
    "`working-revision' not found: using the old `workfile-version' instead")
--- a/lisp/vc-svn.el	Fri Feb 29 07:55:05 2008 +0000
+++ b/lisp/vc-svn.el	Fri Feb 29 19:13:54 2008 +0000
@@ -175,6 +175,7 @@
            (filename (match-string 2)))
        (when state
          (setq result (cons (cons filename state) result)))))
+    (kill-buffer (current-buffer))
     (funcall callback result buffer)))
 
 (defun vc-svn-dir-status (dir callback buffer)
--- a/lisp/vc.el	Fri Feb 29 07:55:05 2008 +0000
+++ b/lisp/vc.el	Fri Feb 29 19:13:54 2008 +0000
@@ -2824,12 +2824,16 @@
 (defvar vc-status-process-buffer nil
   "The buffer used for the asynchronous call that computes the VC status.")
 
+(defvar vc-status-crt-marked nil
+  "The list of marked files before `vc-status-refresh'.")
+
 (defun vc-status-mode ()
   "Major mode for VC status.
 \\{vc-status-mode-map}"
   (setq mode-name "*VC Status*")
   (setq major-mode 'vc-status-mode)
   (setq buffer-read-only t)
+  (set (make-local-variable 'vc-status-crt-marked) nil)
   (use-local-map vc-status-mode-map)
   (let ((buffer-read-only nil)
 	(backend (vc-responsible-backend default-directory))
@@ -2846,17 +2850,38 @@
 (defun vc-update-vc-status-buffer (entries buffer)
   (with-current-buffer buffer
     (when entries
+      ;; Insert the entries we got into the ewoc.
       (dolist (entry entries)
 	(ewoc-enter-last vc-status
 			 (vc-status-create-fileinfo (cdr entry) (car entry))))
+      ;; If we had marked items before the refresh, try mark them here.
+      ;; XXX: there should be a better way to do this...
+      (when vc-status-crt-marked
+	(ewoc-map
+	 (lambda (arg)
+	   (when (member (vc-status-fileinfo->name arg) vc-status-crt-marked)
+	     (setf (vc-status-fileinfo->marked arg) t)))
+	 vc-status))
       (ewoc-goto-node vc-status (ewoc-nth vc-status 0)))
+    ;; We are done, turn of the in progress message in the mode-line.
     (setq mode-line-process nil)))
 
 (defun vc-status-refresh ()
   "Refresh the contents of the VC status buffer."
   (interactive)
+
   ;; This is not very efficient; ewoc could use a new function here.
+  ;; We clear the ewoc, but remember the marked files so that we can
+  ;; mark them after the refresh is done.
+  (setq vc-status-crt-marked 
+	(mapcar
+	 (lambda (elem)
+	   (vc-status-fileinfo->name elem))
+	 (ewoc-collect
+	  vc-status
+	  (lambda (crt) (vc-status-fileinfo->marked crt)))))
   (ewoc-filter vc-status (lambda (node) nil))
+
   (let ((backend (vc-responsible-backend default-directory)))
     (vc-set-mode-line-busy-indicator)
     ;; Call the dir-status backend function. dir-status is supposed to