]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539).
authorDan Nicolaescu <dann@ics.uci.edu>
Wed, 2 Jun 2010 04:54:55 +0000 (21:54 -0700)
committerDan Nicolaescu <dann@ics.uci.edu>
Wed, 2 Jun 2010 04:54:55 +0000 (21:54 -0700)
Backport from trunk.

lisp/ChangeLog
lisp/vc-dir.el

index e7ee293f4bafef5d0d644ebe77ba2854fbea79aa..c41d1d6283aedf68af08af5907b0d476851666de 100644 (file)
@@ -1,3 +1,7 @@
+2010-06-02  Dan Nicolaescu  <dann@ics.uci.edu>
+
+       * vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539).
+
 2010-06-01  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * vc-bzr.el (vc-bzr-revision-completion-table): Apply
index 2f661e8becf27b6aa21717fbf3d20f5d7da0f3e5..6428e8b9ddb6a7307fa74eb77cad34f7a193b63a 100644 (file)
@@ -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)