1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-26 07:11:34 -08:00

(vc-git-registered): Call vc-git-root only once.

This commit is contained in:
Dan Nicolaescu 2009-11-30 21:21:35 +00:00
parent 3e0de07fa8
commit 379241fa2e
2 changed files with 24 additions and 20 deletions

View file

@ -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."