git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] contrib/emacs/vc-git.el: support vc-version-other-window

From
Sam Vilain <sam@vilain.net>
Date
Jan 25, 2007, 23:41 UTC
Message-ID
<20060126.manual2@vilain.net>
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.
---
 contrib/emacs/vc-git.el |   27 ++++++++++++++++++++++++++-
 1 files changed, 26 insertions(+), 1 deletions(-)

(this is a second re-send, the original patch got dropped, probably because it had an unsubscribed sender)

diff --git a/contrib/emacs/vc-git.el b/contrib/emacs/vc-git.el
index 8b63619..35a0e76 100644
--- a/contrib/emacs/vc-git.el
+++ b/contrib/emacs/vc-git.el
@@ -53,6 +53,10 @@
   (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
@@ -119,7 +123,28 @@
     (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
-- 
1.4.4.1.g6a1a-dirty
Message 1 of 1 in “contrib/emacs/vc-git.el: support vc-version-other-window”
  1. contrib/emacs/vc-git.el: support vc-version-other-windowSam Vilain, Jan 25, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.