Re: [PATCH] contrib/emacs/vc-git.el: support vc-version-other-window
- From
- Alexandre Julliard <julliard@winehq.org>
- Date
- Jan 26, 2007, 10:57 UTC
- Message-ID
- <87y7nqukb5.fsf@wine.dyndns.org>
- In-Reply-To
- <20070125234352.340DACB9F4@localhost.localdomain>
Sam Vilain <sam.vilain@catalyst.net.nz> writes:
Show 5 quoted lines
> 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.
This looks good, though the code can be made simpler by using with-temp-file to create the file. Also you need to avoid charset conversions when reading and writing, and you should use ls-files -z to avoid problems with strange file names.
I'd suggest something like this:
>From b37cff5399dd94abe3d4e9778cdbf5cee53d46c0 Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org> Date: Fri, 26 Jan 2007 11:39:55 +0100 Subject: [PATCH] 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 <sam.vilain@catalyst.net.nz>.
Signed-off-by: Alexandre Julliard <julliard@winehq.org> --- contrib/emacs/vc-git.el | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/contrib/emacs/vc-git.el b/contrib/emacs/vc-git.el index 3eb4bd1..e456ab9 100644 --- a/contrib/emacs/vc-git.el +++ b/contrib/emacs/vc-git.el @@ -120,7 +120,16 @@ (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 ((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) ; FIXME: rev is ignored
-- 1.5.0.rc2.gc651 -- Alexandre Julliard julliard@winehq.org