emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r108811: * vc/vc-git.el (vc-git-regis


From: Michael Albinus
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r108811: * vc/vc-git.el (vc-git-registered): Use cache property
Date: Sat, 30 Jun 2012 15:18:16 +0200
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 108811
committer: Michael Albinus <address@hidden>
branch nick: trunk
timestamp: Sat 2012-06-30 15:18:16 +0200
message:
  * vc/vc-git.el (vc-git-registered): Use cache property
  `git-registered'.
  (vc-git-mode-line-string): Call `vc-working-revision' instead of
  `vc-git-working-revision' in order to benefit from the cache.
  (vc-git-root): Use cache property `git-root'.
modified:
  lisp/ChangeLog
  lisp/vc/vc-git.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-06-30 13:14:00 +0000
+++ b/lisp/ChangeLog    2012-06-30 13:18:16 +0000
@@ -1,3 +1,11 @@
+2012-06-30  Michael Albinus  <address@hidden>
+
+       * vc/vc-git.el (vc-git-registered): Use cache property
+       `git-registered'.
+       (vc-git-mode-line-string): Call `vc-working-revision' instead of
+       `vc-git-working-revision' in order to benefit from the cache.
+       (vc-git-root): Use cache property `git-root'.
+
 2012-06-30  Dmitry Gutov  <address@hidden>
 
        * vc/vc-hooks.el (vc-before-save): Clear cache if file has been

=== modified file 'lisp/vc/vc-git.el'
--- a/lisp/vc/vc-git.el 2012-06-02 10:56:09 +0000
+++ b/lisp/vc/vc-git.el 2012-06-30 13:18:16 +0000
@@ -173,28 +173,31 @@
 
 (defun vc-git-registered (file)
   "Check whether FILE is registered with git."
-  (let ((dir (vc-git-root file)))
-    (when dir
-      (with-temp-buffer
-       (let* (process-file-side-effects
-              ;; Do not use the `file-name-directory' here: git-ls-files
-              ;; sometimes fails to return the correct status for relative
-              ;; path specs.
-              ;; See also: http://marc.info/?l=git&m=125787684318129&w=2
-              (name (file-relative-name file dir))
-              (str (ignore-errors
-                    (cd dir)
-                    (vc-git--out-ok "ls-files" "-c" "-z" "--" name)
-                    ;; If result is empty, use ls-tree to check for deleted
-                     ;; file.
-                    (when (eq (point-min) (point-max))
-                      (vc-git--out-ok "ls-tree" "--name-only" "-z" "HEAD"
-                                       "--" name))
-                    (buffer-string))))
-         (and str
-              (> (length str) (length name))
-              (string= (substring str 0 (1+ (length name)))
-                       (concat name "\0"))))))))
+  (or (vc-file-getprop file 'git-registered)
+      (vc-file-setprop
+       file 'git-registered
+       (let ((dir (vc-git-root file)))
+        (when dir
+          (with-temp-buffer
+            (let* (process-file-side-effects
+                   ;; Do not use the `file-name-directory' here: git-ls-files
+                   ;; sometimes fails to return the correct status for relative
+                   ;; path specs.
+                   ;; See also: http://marc.info/?l=git&m=125787684318129&w=2
+                   (name (file-relative-name file dir))
+                   (str (ignore-errors
+                          (cd dir)
+                          (vc-git--out-ok "ls-files" "-c" "-z" "--" name)
+                          ;; If result is empty, use ls-tree to check for 
deleted
+                          ;; file.
+                          (when (eq (point-min) (point-max))
+                            (vc-git--out-ok "ls-tree" "--name-only" "-z" "HEAD"
+                                            "--" name))
+                          (buffer-string))))
+              (and str
+                   (> (length str) (length name))
+                   (string= (substring str 0 (1+ (length name)))
+                            (concat name "\0"))))))))))
 
 (defun vc-git--state-code (code)
   "Convert from a string to a added/deleted/modified state."
@@ -248,7 +251,7 @@
 
 (defun vc-git-mode-line-string (file)
   "Return a string for `vc-mode-line' to put in the mode line for FILE."
-  (let* ((branch (vc-git-working-revision file))
+  (let* ((branch (vc-working-revision file))
          (def-ml (vc-default-mode-line-string 'Git file))
          (help-echo (get-text-property 0 'help-echo def-ml)))
     (if (zerop (length branch))
@@ -959,7 +962,8 @@
 (defun vc-git-extra-status-menu () vc-git-extra-menu-map)
 
 (defun vc-git-root (file)
-  (vc-find-root file ".git"))
+  (or (vc-file-getprop file 'git-root)
+      (vc-file-setprop file 'git-root (vc-find-root file ".git"))))
 
 ;; Derived from `lgrep'.
 (defun vc-git-grep (regexp &optional files dir)


reply via email to

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