summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 1b55593)
raw | patch | inline | side by side (parent: 1b55593)
author | Sam Vilain <sam@vilain.net> | |
Thu, 25 Jan 2007 23:41:23 +0000 (12:41 +1300) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Fri, 26 Jan 2007 03:27:03 +0000 (19:27 -0800) |
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: Junio C Hamano <junkio@cox.net>
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: Junio C Hamano <junkio@cox.net>
contrib/emacs/vc-git.el | patch | blob | history |
index 3eb4bd19e921f293f1ed1ab1fd1bcd9f78763c4c..65c455006978932cee3f6f3a4d7d014ff18a6489 100644 (file)
--- a/contrib/emacs/vc-git.el
+++ b/contrib/emacs/vc-git.el
(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
(vc-git--run-command file "commit" "-m" comment "--only" "--")))
(defun vc-git-checkout (file &optional editable rev destfile)
- (vc-git--run-command file "checkout" (or rev "HEAD")))
+ (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)))
+ (vc-git--run-command file "checkout" (or rev "HEAD"))))
(defun vc-git-annotate-command (file buf &optional rev)
; FIXME: rev is ignored