Mercurial > emacs
changeset 106331:1c9648ddfd5e
(vc-git-registered): Call vc-git-root only once.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Mon, 30 Nov 2009 21:21:35 +0000 |
parents | e72085f5ccf5 |
children | a620dcf767e8 |
files | lisp/ChangeLog lisp/vc-git.el |
diffstat | 2 files changed, 24 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Nov 30 21:08:25 2009 +0000 +++ b/lisp/ChangeLog Mon Nov 30 21:21:35 2009 +0000 @@ -1,3 +1,7 @@ +2009-11-30 Dan Nicolaescu <dann@ics.uci.edu> + + * vc-git.el (vc-git-registered): Call vc-git-root only once. + 2009-11-30 Juri Linkov <juri@jurta.org> * misearch.el (multi-isearch-read-buffers): Move canonicalization
--- a/lisp/vc-git.el Mon Nov 30 21:08:25 2009 +0000 +++ b/lisp/vc-git.el Mon Nov 30 21:21:35 2009 +0000 @@ -144,26 +144,26 @@ (defun vc-git-registered (file) "Check whether FILE is registered with git." - (when (vc-git-root file) - (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 - (dir (vc-git-root file)) - (name (file-relative-name file dir)) - (str (ignore-errors - (when dir (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"))))))) + (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."