emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r100493: * vc-dir.el (vc-dir-update):


From: Dan Nicolaescu
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r100493: * vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539).
Date: Tue, 01 Jun 2010 00:15:55 -0700
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 100493
committer: Dan Nicolaescu <address@hidden>
branch nick: trunk
timestamp: Tue 2010-06-01 00:15:55 -0700
message:
  * vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539).
modified:
  lisp/ChangeLog
  lisp/vc-dir.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-06-01 02:34:49 +0000
+++ b/lisp/ChangeLog    2010-06-01 07:15:55 +0000
@@ -1,3 +1,7 @@
+2010-06-01  Dan Nicolaescu  <address@hidden>
+
+       * vc-dir.el (vc-dir-update): Remove entries with a nil state (bug#5539).
+
 2010-06-01  Stefan Monnier  <address@hidden>
 
        * vc-bzr.el (vc-bzr-revision-completion-table): Apply

=== modified file 'lisp/vc-dir.el'
--- a/lisp/vc-dir.el    2010-05-19 03:01:24 +0000
+++ b/lisp/vc-dir.el    2010-06-01 07:15:55 +0000
@@ -362,6 +362,7 @@
     ;; 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
@@ -388,10 +389,16 @@
               ((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)))
@@ -427,7 +434,10 @@
                   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)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]