Mercurial > emacs
changeset 94078:816429d20375
(vc-status-update): Undo the previous revert.
author | Alexandre Julliard <julliard@winehq.org> |
---|---|
date | Mon, 14 Apr 2008 15:19:04 +0000 |
parents | 28e2f73174d6 |
children | 6959b3443fea |
files | lisp/vc.el |
diffstat | 1 files changed, 27 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/vc.el Mon Apr 14 15:10:36 2008 +0000 +++ b/lisp/vc.el Mon Apr 14 15:19:04 2008 +0000 @@ -3011,8 +3011,9 @@ (put 'vc-status-mode 'mode-class 'special) -(defun vc-status-update (entries buffer) - "Update BUFFER's ewoc from the list of ENTRIES." +(defun vc-status-update (entries buffer &optional noinsert) + "Update BUFFER's ewoc from the list of ENTRIES. +If NOINSERT, ignore elements on ENTRIES which are not in the ewoc." ;; Add ENTRIES to the vc-status buffer BUFFER. (with-current-buffer buffer ;; Insert the entries sorted by name into the ewoc. @@ -3021,28 +3022,30 @@ (setq entries (sort entries (lambda (entry1 entry2) (string-lessp (car entry1) (car entry2))))) - (let ((entry (pop entries)) - (node (ewoc-nth vc-status 0))) - (while entry - (let ((file (car entry))) - ;; Note: we always keep node pointing to the last inserted entry - ;; in order to catch duplicates in the entries list - (cond ((not node) - (setq node (ewoc-enter-last vc-status - (apply 'vc-status-create-fileinfo entry))) - (setq entry (pop entries))) - ((string-lessp (vc-status-fileinfo->name (ewoc-data node)) file) - (setq node (ewoc-next vc-status node))) - ((string-equal (vc-status-fileinfo->name (ewoc-data node)) file) - (setf (vc-status-fileinfo->state (ewoc-data node)) (nth 1 entry)) - (setf (vc-status-fileinfo->extra (ewoc-data node)) (nth 2 entry)) - (setf (vc-status-fileinfo->needs-update (ewoc-data node)) nil) - (ewoc-invalidate vc-status node) - (setq entry (pop entries))) - (t - (setq node (ewoc-enter-before vc-status node - (apply 'vc-status-create-fileinfo entry))) - (setq entry (pop entries))))))))) + (let ((entry (car entries)) + (node (ewoc-nth vc-status 0))) + (while (and entry node) + (let ((entryfile (car entry)) + (nodefile (vc-status-fileinfo->name (ewoc-data node)))) + (cond + ((string-lessp nodefile entryfile) + (setq node (ewoc-next vc-status node))) + ((string-lessp nodefile entryfile) + (unless noinsert + (ewoc-enter-before vc-status node + (apply 'vc-status-create-fileinfo entry))) + (setq entries (cdr entries) entry (car entries))) + (t + (setf (vc-status-fileinfo->state (ewoc-data node)) (nth 1 entry)) + (setf (vc-status-fileinfo->extra (ewoc-data node)) (nth 2 entry)) + (ewoc-invalidate vc-status node) + (setq entries (cdr entries) entry (car entries)) + (setq node (ewoc-next vc-status node)))))) + (unless (or node noinsert) + ;; We're past the last node, all remaining entries go to the end. + (while entries + (ewoc-enter-last vc-status + (apply 'vc-status-create-fileinfo (pop entries)))))))) (defun vc-status-busy () (and (buffer-live-p vc-status-process-buffer)