]> git.eshelyaron.com Git - emacs.git/commitdiff
* vc-dispatcher.el (vc-directory-resynch-file): Rename to ...
authorDan Nicolaescu <dann@ics.uci.edu>
Tue, 27 May 2008 05:36:03 +0000 (05:36 +0000)
committerDan Nicolaescu <dann@ics.uci.edu>
Tue, 27 May 2008 05:36:03 +0000 (05:36 +0000)
(vc-dir-resynch-file): ... this.  Update callers.
Use vc-string-prefix-p.  Ignore directory args.
(vc-string-prefix-p): CSE.
(vc-resynch-buffer): Restore conditional.

* vc-hooks.el (vc-after-save): Improve test.
(vc-mode-line): Fix indentation.

lisp/ChangeLog
lisp/vc-dispatcher.el
lisp/vc-hooks.el

index 10875489a3246004706629dbc32302028c03e4c5..b2c0440415077f6ef61db2b3e78d5174c0257a74 100644 (file)
@@ -1,3 +1,14 @@
+2008-05-27  Dan Nicolaescu  <dann@ics.uci.edu>
+
+       * vc-dispatcher.el (vc-directory-resynch-file): Rename to ...
+       (vc-dir-resynch-file): ... this.  Update callers.  
+       Use vc-string-prefix-p.  Ignore directory args.
+       (vc-string-prefix-p): CSE.
+       (vc-resynch-buffer): Restore conditional.
+
+       * vc-hooks.el (vc-after-save): Improve test.
+       (vc-mode-line): Fix indentation.
+
 2008-05-27  Chong Yidong  <cyd@stupidchicken.com>
 
        * calendar/parse-time.el (parse-time-months)
index 116e9476bf3decf9fecf7d1765448c0e21a235af..f62b3b0744fcb58ca627eee067df24909555b5a0 100644 (file)
@@ -503,7 +503,10 @@ editing!"
       (when buffer
        (with-current-buffer buffer
          (vc-resynch-window file keep noquery)))))
-  (vc-directory-resynch-file file))
+  ;; Try to avoid unnecessary work, a *vc-dir* buffer is only present
+  ;; if this is true.
+  (when (memq 'vc-dir-resynch-file after-save-hook)
+    (vc-dir-resynch-file file)))
 
 (defun vc-buffer-sync (&optional not-urgent)
   "Make sure the current buffer and its working file are in sync.
@@ -580,7 +583,7 @@ the buffer contents as a comment."
   (unless nocomment
     (run-hooks 'vc-logentry-check-hook))
   ;; Sync parent buffer in case the user modified it while editing the comment.
-  ;; But not if it is a vc-directory buffer.
+  ;; But not if it is a vc-dir buffer.
   (with-current-buffer vc-parent-buffer
     (or (vc-dispatcher-browsing) (vc-buffer-sync)))
   (unless vc-log-operation
@@ -1025,8 +1028,9 @@ If a prefix argument is given, move by that many lines."
     (funcall mark-unmark-function)))
 
 (defun vc-string-prefix-p (prefix string)
-  (and (>= (length string) (length prefix))
-       (eq t (compare-strings prefix nil nil string nil (length prefix)))))
+  (let ((lpref (length prefix)))
+    (and (>= (length string) lpref)
+        (eq t (compare-strings prefix nil nil string nil lpref)))))
 
 (defun vc-dir-parent-marked-p (arg)
   ;; Return nil if none of the parent directories of arg is marked.
@@ -1289,34 +1293,38 @@ If it is a file, return the file itself."
       (push (expand-file-name (vc-dir-fileinfo->name crt-data)) result))
     result))
 
-(defun vc-directory-resynch-file (&optional fname)
+(defun vc-dir-resynch-file (&optional fname)
   "Update the entries for FILE in any directory buffers that list it."
   (let ((file (or fname (expand-file-name buffer-file-name))))
-    ;; The vc-dir case
-    (let ((found-vc-dir-buf nil))
-      (save-excursion
-       (dolist (status-buf (buffer-list))
-         (set-buffer status-buf)
-         ;; look for a vc-dir buffer that might show this file.
-         (when (eq major-mode 'vc-dir-mode)
-           (setq found-vc-dir-buf t)
-           (let ((ddir (expand-file-name default-directory)))
-             ;; This test is cvs-string-prefix-p
-             (when (eq t (compare-strings file nil (length ddir) ddir nil nil))
-               (let*
-                   ((file-short (substring file (length ddir)))
-                    (state
-                     (funcall (vc-client-object->file-to-state vc-client-mode)
-                              file))
-                    (extra
-                     (funcall (vc-client-object->file-to-extra vc-client-mode)
-                              file))
-                    (entry
-                     (list file-short state extra)))
-                 (vc-dir-update (list entry) status-buf))))))
-       ;; 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-directory-resynch-file))))))
+    (if (file-directory-p file)
+       ;; FIXME: Maybe this should never happen? 
+        ;; FIXME: But it is useful to update the state of a directory
+       ;; (more precisely the files in the directory) after some VC
+       ;; operations.
+       nil
+      (let ((found-vc-dir-buf nil))
+       (save-excursion
+         (dolist (status-buf (buffer-list))
+           (set-buffer status-buf)
+           ;; 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)))
+               (when (vc-string-prefix-p ddir file)
+                 (let*
+                     ((file-short (substring file (length ddir)))
+                      (state
+                       (funcall (vc-client-object->file-to-state vc-client-mode)
+                                file))
+                      (extra
+                       (funcall (vc-client-object->file-to-extra vc-client-mode)
+                                file))
+                      (entry
+                       (list file-short state extra)))
+                   (vc-dir-update (list entry) status-buf))))))
+         ;; 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)))))))
 
 (defun vc-dir-mode (client-object)
   "Major mode for dispatcher directory buffers.
@@ -1351,7 +1359,7 @@ U - if the cursor is on a file: unmark all the files with the same state
     (set (make-local-variable 'vc-ewoc)
         (ewoc-create (vc-client-object->file-to-info client-object)
                      (vc-client-object->headers client-object)))
-    (add-hook 'after-save-hook 'vc-directory-resynch-file)
+    (add-hook 'after-save-hook 'vc-dir-resynch-file)
     ;; 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 738cf257562a479cbdb3918865607de50d666c02..7ac1e85650ff6d15106b1f7c6c8f1aad80f38aee 100644 (file)
@@ -745,7 +745,7 @@ Before doing that, check if there are any old backups and get rid of them."
            (vc-call-backend backend 'make-version-backups-p file)
            (vc-make-version-backup file)))))
 
-(declare-function vc-directory-resynch-file "vc-dispatcher" (&optional fname))
+(declare-function vc-dir-resynch-file "vc-dispatcher" (&optional fname))
 
 (defun vc-after-save ()
   "Function to be called by `basic-save-buffer' (in files.el)."
@@ -766,10 +766,10 @@ Before doing that, check if there are any old backups and get rid of them."
          (eq (vc-checkout-model backend (list file)) 'implicit)
          (vc-file-setprop file 'vc-state 'edited)
         (vc-mode-line file)
-        (when (featurep 'vc)
-          ;; If VC is not loaded, then there can't be
-          ;; any directory buffer to synchronize.
-          (vc-directory-resynch-file file)))))
+        ;; Try to avoid unnecessary work, a *vc-dir* buffer is only
+        ;; present if this is true.
+        (when (memq 'vc-dir-resynch-file after-save-hook)
+          (vc-dir-resynch-file file)))))
 
 (defvar vc-menu-entry
   '(menu-item "Version Control" vc-menu-map
@@ -819,9 +819,9 @@ visiting FILE."
       ;; If the user is root, and the file is not owner-writable,
       ;; then pretend that we can't write it
       ;; even though we can (because root can write anything).
-    ;; This way, even root cannot modify a file that isn't locked.
-    (and (equal file buffer-file-name)
-        (not buffer-read-only)
+      ;; This way, even root cannot modify a file that isn't locked.
+      (and (equal file buffer-file-name)
+          (not buffer-read-only)
           (zerop (user-real-uid))
           (zerop (logand (file-modes buffer-file-name) 128))
           (setq buffer-read-only t)))