* 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.
This commit is contained in:
Dan Nicolaescu 2008-02-29 19:13:54 +00:00
parent e42fc90537
commit 9b7b3814df
5 changed files with 42 additions and 2 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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")

View file

@ -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)

View file

@ -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