From: Dan Nicolaescu Date: Wed, 2 Jun 2010 04:54:55 +0000 (-0700) Subject: * lisp/vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539). X-Git-Tag: emacs-pretest-23.2.90~139^2~153 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=dbe82b27a21babf8872ce67a7a9b50ac81e11d6b;p=emacs.git * lisp/vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539). Backport from trunk. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e7ee293f4ba..c41d1d6283a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2010-06-02 Dan Nicolaescu + + * vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539). + 2010-06-01 Stefan Monnier * vc-bzr.el (vc-bzr-revision-completion-table): Apply diff --git a/lisp/vc-dir.el b/lisp/vc-dir.el index 2f661e8becf..6428e8b9ddb 100644 --- a/lisp/vc-dir.el +++ b/lisp/vc-dir.el @@ -357,6 +357,7 @@ If NOINSERT, ignore elements on ENTRIES which are not in the ewoc." ;; Insert directory entries in the right places. (let ((entry (car entries)) (node (ewoc-nth vc-ewoc 0)) + (to-remove nil) (dotname (file-relative-name default-directory))) ;; Insert . if it is not present. (unless node @@ -383,10 +384,16 @@ If NOINSERT, ignore elements on ENTRIES which are not in the ewoc." ((string-lessp nodefile entryfile) (setq node (ewoc-next vc-ewoc node))) ((string-equal nodefile entryfile) - (setf (vc-dir-fileinfo->state (ewoc-data node)) (nth 1 entry)) - (setf (vc-dir-fileinfo->extra (ewoc-data node)) (nth 2 entry)) - (setf (vc-dir-fileinfo->needs-update (ewoc-data node)) nil) - (ewoc-invalidate vc-ewoc node) + (if (nth 1 entry) + (progn + (setf (vc-dir-fileinfo->state (ewoc-data node)) (nth 1 entry)) + (setf (vc-dir-fileinfo->extra (ewoc-data node)) (nth 2 entry)) + (setf (vc-dir-fileinfo->needs-update (ewoc-data node)) nil) + (ewoc-invalidate vc-ewoc node)) + ;; If the state is nil, the file does not exist + ;; anymore, so remember the entry so we can remove + ;; it after we are done inserting all ENTRIES. + (push node to-remove)) (setq entries (cdr entries)) (setq entry (car entries)) (setq node (ewoc-next vc-ewoc node))) @@ -422,7 +429,10 @@ If NOINSERT, ignore elements on ENTRIES which are not in the ewoc." vc-ewoc (vc-dir-create-fileinfo rd nil nil nil entrydir)))) ;; Now insert the node itself. (ewoc-enter-last vc-ewoc - (apply 'vc-dir-create-fileinfo entry))))))))) + (apply 'vc-dir-create-fileinfo entry)))))) + (when to-remove + (let ((inhibit-read-only t)) + (apply 'ewoc-delete vc-ewoc (nreverse to-remove))))))) (defun vc-dir-busy () (and (buffer-live-p vc-dir-process-buffer)