From: Alexandre Julliard Date: Fri, 26 Jan 2007 10:57:50 +0000 (+0100) Subject: vc-git.el: Take into account the destination name in vc-checkout. X-Git-Tag: v1.5.0-rc3~47 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=40d6dc0f9d4045d237f8334224777922789c6d04;p=git.git vc-git.el: Take into account the destination name in vc-checkout. This is necessary for vc-version-other-window. Based on a patch by Sam Vilain . Currently, the vc-git-checkout function uses `git checkout' to fetch a file from the git repository to the working copy. However, it is completely ignoring the input argument that specifies the destination file. `git-checkout' does not support specifying this, so we have to use `git-cat-file', capture the output in a buffer and then save it. Signed-off-by: Alexandre Julliard Signed-off-by: Junio C Hamano --- diff --git a/contrib/emacs/vc-git.el b/contrib/emacs/vc-git.el index 65c455006..e456ab971 100644 --- a/contrib/emacs/vc-git.el +++ b/contrib/emacs/vc-git.el @@ -53,10 +53,6 @@ (let ((name (file-relative-name file))) (eq 0 (apply #'call-process "git" nil (get-buffer "*Messages") nil (append args (list name)))))) -(defun vc-git--run-command-out (output &rest args) - "Run a git command, output to output." - (eq 0 (apply #'call-process "git" nil output nil (append args)))) - (defun vc-git-registered (file) "Check whether FILE is registered with git." (with-temp-buffer @@ -125,26 +121,14 @@ (defun vc-git-checkout (file &optional editable rev destfile) (if destfile - (let ((mybuff (get-buffer-create "vc-git-checkout-tmp"))) - (let ((rv - (vc-git--run-command-out - mybuff "cat-file" "blob" - (concat (or rev "HEAD") - ":" - (let ((output (vc-git--run-command-string - (file-relative-name file) - "ls-files" "--full-name"))) - (string-match "\\(.*\\)" output) - (match-string 1 output)) - ))) - ) - (if rv - (save-current-buffer - (set-buffer mybuff) - (set-visited-file-name destfile t) - (save-buffer) - ) - rv))) + (let ((fullname (substring + (vc-git--run-command-string file "ls-files" "-z" "--full-name" "--") + 0 -1)) + (coding-system-for-read 'no-conversion) + (coding-system-for-write 'no-conversion)) + (with-temp-file destfile + (eq 0 (call-process "git" nil t nil "cat-file" "blob" + (concat (or rev "HEAD") ":" fullname))))) (vc-git--run-command file "checkout" (or rev "HEAD")))) (defun vc-git-annotate-command (file buf &optional rev)