From: Dan Nicolaescu Date: Mon, 30 Nov 2009 21:21:35 +0000 (+0000) Subject: (vc-git-registered): Call vc-git-root only once. X-Git-Tag: emacs-pretest-23.1.90~159 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=379241fa2ebdf1de9bcedbaf22e49f3d506504c2;p=emacs.git (vc-git-registered): Call vc-git-root only once. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4a1e8099439..aa6ee15c00f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2009-11-30 Dan Nicolaescu + + * vc-git.el (vc-git-registered): Call vc-git-root only once. + 2009-11-30 Juri Linkov * misearch.el (multi-isearch-read-buffers): Move canonicalization diff --git a/lisp/vc-git.el b/lisp/vc-git.el index 4c577953262..a4e01e8d8c5 100644 --- a/lisp/vc-git.el +++ b/lisp/vc-git.el @@ -144,26 +144,26 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." (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."