summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7f9acb2)
raw | patch | inline | side by side (parent: 7f9acb2)
author | Alexandre Julliard <julliard@winehq.org> | |
Fri, 26 Jan 2007 10:57:50 +0000 (11:57 +0100) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Fri, 26 Jan 2007 23:38:27 +0000 (15:38 -0800) |
This is necessary for vc-version-other-window. Based on a patch by Sam
Vilain <sam.vilain@catalyst.net.nz>.
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 <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Vilain <sam.vilain@catalyst.net.nz>.
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 <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
contrib/emacs/vc-git.el | patch | blob | history |
index 65c455006978932cee3f6f3a4d7d014ff18a6489..e456ab9712e0574c712e5f79b0dc55cac167d9b1 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
(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)