emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs/lisp ChangeLog vc-dir.el vc-hooks.el


From: Stefan Monnier
Subject: [Emacs-diffs] emacs/lisp ChangeLog vc-dir.el vc-hooks.el
Date: Tue, 29 Sep 2009 13:07:54 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Stefan Monnier <monnier>        09/09/29 13:07:54

Modified files:
        lisp           : ChangeLog vc-dir.el vc-hooks.el 

Log message:
        * vc-hooks.el (vc-dir-buffers): New var.
        (vc-state-refresh): New function.
        (vc-state): Use it.
        (vc-after-save): Always ask the backend to recompute the new state.
        Always call vc-dir if necessary, using vc-dir-buffers.
        * vc-dir.el (vc-dir-prepare-status-buffer, vc-dir-resynch-file):
        Use vc-dir-buffers.
        (vc-dir-mode): Use vc-dir-buffers rather than after-save-hook.
        (vc-dir-prepare-status-buffer, vc-dir-update)
        (vc-dir-resync-directory-files, vc-dir-resynch-file, vc-dir-mode):
        Don't call expand-file-name on default-directory.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/ChangeLog?cvsroot=emacs&r1=1.16290&r2=1.16291
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/vc-dir.el?cvsroot=emacs&r1=1.43&r2=1.44
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/vc-hooks.el?cvsroot=emacs&r1=1.283&r2=1.284

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/emacs/emacs/lisp/ChangeLog,v
retrieving revision 1.16290
retrieving revision 1.16291
diff -u -b -r1.16290 -r1.16291
--- ChangeLog   29 Sep 2009 07:31:22 -0000      1.16290
+++ ChangeLog   29 Sep 2009 13:07:50 -0000      1.16291
@@ -1,3 +1,17 @@
+2009-09-29  Stefan Monnier  <address@hidden>
+
+       * vc-hooks.el (vc-dir-buffers): New var.
+       (vc-state-refresh): New function.
+       (vc-state): Use it.
+       (vc-after-save): Always ask the backend to recompute the new state.
+       Always call vc-dir if necessary, using vc-dir-buffers.
+       * vc-dir.el (vc-dir-prepare-status-buffer, vc-dir-resynch-file):
+       Use vc-dir-buffers.
+       (vc-dir-mode): Use vc-dir-buffers rather than after-save-hook.
+       (vc-dir-prepare-status-buffer, vc-dir-update)
+       (vc-dir-resync-directory-files, vc-dir-resynch-file, vc-dir-mode):
+       Don't call expand-file-name on default-directory.
+
 2009-09-29  Juanma Barranquero  <address@hidden>
 
        * speedbar.el (speedbar-item-delete):

Index: vc-dir.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/vc-dir.el,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -b -r1.43 -r1.44
--- vc-dir.el   25 Sep 2009 04:35:18 -0000      1.43
+++ vc-dir.el   29 Sep 2009 13:07:54 -0000      1.44
@@ -89,16 +89,16 @@
 (defun vc-dir-prepare-status-buffer (bname dir backend &optional create-new)
   "Find a buffer named BNAME showing DIR, or create a new one."
   (setq dir (file-name-as-directory (expand-file-name dir)))
-  (let*
-        ;; Look for another buffer name BNAME visiting the same directory.
+  (let* ;; Look for another buffer name BNAME visiting the same directory.
         ((buf (save-excursion
                (unless create-new
-                 (dolist (buffer (buffer-list))
+                (dolist (buffer vc-dir-buffers)
+                  (when (buffer-live-p buffer)
                    (set-buffer buffer)
                    (when (and (derived-mode-p 'vc-dir-mode)
                               (eq vc-dir-backend backend)
-                              (string= (expand-file-name default-directory) 
dir))
-                     (return buffer)))))))
+                               (string= default-directory dir))
+                      (return buffer))))))))
     (or buf
         ;; Create a new buffer named BNAME.
         (with-current-buffer (create-file-buffer bname)
@@ -360,7 +360,7 @@
       (unless node
        (ewoc-enter-last
         vc-ewoc (vc-dir-create-fileinfo
-                 dotname nil nil nil (expand-file-name default-directory)))
+                 dotname nil nil nil default-directory))
        (setq node (ewoc-nth vc-ewoc 0)))
 
       (while (and entry node)
@@ -849,7 +849,7 @@
   ;; Update the entries for all the child files of DIRNAME shown in
   ;; the current *vc-dir* buffer.
   (let ((files (vc-dir-find-child-files dirname))
-       (ddir (expand-file-name default-directory))
+       (ddir default-directory)
        fileentries)
     (when files
       (dolist (crt files)
@@ -860,25 +860,25 @@
 (defun vc-dir-resynch-file (&optional fname)
   "Update the entries for FNAME in any directory buffers that list it."
   (let ((file (or fname (expand-file-name buffer-file-name)))
-       (found-vc-dir-buf nil))
-    (save-excursion
-      (dolist (status-buf (buffer-list))
-       (set-buffer status-buf)
+        (drop '()))
+    (save-current-buffer
        ;; look for a vc-dir buffer that might show this file.
-       (when (derived-mode-p 'vc-dir-mode)
-         (setq found-vc-dir-buf t)
-         (let ((ddir (expand-file-name default-directory)))
+      (dolist (status-buf vc-dir-buffers)
+        (if (not (buffer-live-p status-buf))
+            (push status-buf drop)
+          (set-buffer status-buf)
+          (if (not (derived-mode-p 'vc-dir-mode))
+              (push status-buf drop)
+            (let ((ddir default-directory))
            (when (vc-string-prefix-p ddir file)
              (if (file-directory-p file)
                  (vc-dir-resync-directory-files file)
                (let ((state (vc-dir-recompute-file-state file ddir)))
                  (vc-dir-update
                   (list state)
-                  status-buf (eq (cadr state) 'up-to-date)))))))))
-    ;; We didn't find any vc-dir buffers, remove the hook, it is
-    ;; not needed.
-    (unless found-vc-dir-buf
-      (remove-hook 'after-save-hook 'vc-dir-resynch-file))))
+                     status-buf (eq (cadr state) 'up-to-date))))))))))
+    ;; Remove out-of-date entries from vc-dir-buffers.
+    (dolist (b drop) (setq vc-dir-buffers (delq b vc-dir-buffers)))))
 
 (defvar use-vc-backend)  ;; dynamically bound
 
@@ -928,8 +928,8 @@
     (set (make-local-variable 'vc-ewoc) (ewoc-create #'vc-dir-printer))
     (set (make-local-variable 'revert-buffer-function)
         'vc-dir-revert-buffer-function)
-    (setq list-buffers-directory (expand-file-name default-directory))
-    (add-hook 'after-save-hook 'vc-dir-resynch-file)
+    (setq list-buffers-directory default-directory)
+    (add-to-list 'vc-dir-buffers (current-buffer))
     ;; Make sure that if the directory buffer is killed, the update
     ;; process running in the background is also killed.
     (add-hook 'kill-buffer-query-functions 'vc-dir-kill-query nil t)

Index: vc-hooks.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/vc-hooks.el,v
retrieving revision 1.283
retrieving revision 1.284
diff -u -b -r1.283 -r1.284
--- vc-hooks.el 24 Sep 2009 01:37:18 -0000      1.283
+++ vc-hooks.el 29 Sep 2009 13:07:54 -0000      1.284
@@ -517,12 +517,16 @@
   ;; FIXME: New (sub)states needed (?):
   ;; - `copied' and `moved' (might be handled by `removed' and `added')
   (or (vc-file-getprop file 'vc-state)
-      (when (> (length file) 0)
+      (when (> (length file) 0)         ;Why??  --Stef
        (setq backend (or backend (vc-backend file)))
        (when backend
+          (vc-state-refresh file backend)))))
+
+(defun vc-state-refresh (file backend)
+  "Quickly recompute the `state' of FILE."
          (vc-file-setprop
           file 'vc-state
-          (vc-call-backend backend 'state-heuristic file))))))
+   (vc-call-backend backend 'state-heuristic file)))
 
 (defsubst vc-up-to-date-p (file)
   "Convenience function that checks whether `vc-state' of FILE is 
`up-to-date'."
@@ -728,6 +732,8 @@
 
 (declare-function vc-dir-resynch-file "vc-dir" (&optional fname))
 
+(defvar vc-dir-buffers nil "List of vc-dir buffers.")
+
 (defun vc-after-save ()
   "Function to be called by `basic-save-buffer' (in files.el)."
   ;; If the file in the current buffer is under version control,
@@ -743,14 +749,13 @@
                  ;; to avoid confusion.
                  (vc-file-setprop file 'vc-checkout-time nil))
             t)
-         (vc-up-to-date-p file)
          (eq (vc-checkout-model backend (list file)) 'implicit)
-         (vc-file-setprop file 'vc-state 'edited)
-        (vc-mode-line file backend)
+         (vc-state-refresh file backend)
+        (vc-mode-line file backend))
         ;; Try to avoid unnecessary work, a *vc-dir* buffer is
-        ;; present if and only if this is true.
-        (when (memq 'vc-dir-resynch-file after-save-hook)
-          (vc-dir-resynch-file file)))))
+    ;; present if this is true.
+    (when vc-dir-buffers
+      (vc-dir-resynch-file file))))
 
 (defvar vc-menu-entry
   '(menu-item "Version Control" vc-menu-map




reply via email to

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