From 9b7b3814df636c281213bae6f757ca3c49598b6c Mon Sep 17 00:00:00 2001 From: Dan Nicolaescu Date: Fri, 29 Feb 2008 19:13:54 +0000 Subject: [PATCH] * 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. --- lisp/ChangeLog | 10 ++++++++++ lisp/vc-hg.el | 6 ++++-- lisp/vc-hooks.el | 2 ++ lisp/vc-svn.el | 1 + lisp/vc.el | 25 +++++++++++++++++++++++++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a8bc7f49de5..d3ccff1a4c3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2008-02-29 Dan Nicolaescu + + * 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 * allout.el (allout-topic-encryption-bullet) diff --git a/lisp/vc-hg.el b/lisp/vc-hg.el index db29127e4d2..c424dbaa3b6 100644 --- a/lisp/vc-hg.el +++ b/lisp/vc-hg.el @@ -482,7 +482,7 @@ REV is the revision to check out into WORKFILE." (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 @@ REV is the revision to check out into WORKFILE." (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) diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el index b177061d50a..e167492c089 100644 --- a/lisp/vc-hooks.el +++ b/lisp/vc-hooks.el @@ -605,6 +605,8 @@ If FILE is not registered, this function always returns nil." ;; 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") diff --git a/lisp/vc-svn.el b/lisp/vc-svn.el index 37a5dfb1d3e..c10aa65f930 100644 --- a/lisp/vc-svn.el +++ b/lisp/vc-svn.el @@ -175,6 +175,7 @@ If you want to force an empty list of arguments, use t." (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) diff --git a/lisp/vc.el b/lisp/vc.el index 981791ca1b3..ceed375639d 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -2824,12 +2824,16 @@ With prefix arg READ-SWITCHES, specify a value to override (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 @@ With prefix arg READ-SWITCHES, specify a value to override (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 -- 2.39.5