+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)
(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)
(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)
;; 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")
(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))
(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