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

Re: [PATCH] git-mergetool: add support for ediff

From
Theodore Tso <tytso@mit.edu>
Date
Jul 2, 2007, 22:16 UTC
Message-ID
<20070702221639.GB20597@thunk.org>
In-Reply-To
<20070702215859.GA20597@thunk.org>

OK, so I've hacked together the following emacs-lisp snippet, which I propose would go in contrib/use-ediff-instead.el. If placed in your .emacs.el file, it will cause you to use ediff instead of emerge when you call "git mergetool". It does so by replacing the two functions emerge-files-command and emerge-files-with-ancestor-comand with ones that patch the necessary ediff hooks, and then calling the ediff package instead of the emerge package.

With this .el file, no changes are needed to git-mergetool.sh. Does this meet your needs?

					- Ted

;; use-ediff-instead.el ;; ;; This emacs lisp snippet should be placed in your .emacs.el file in ;; order to use the ediff package instead of emerge for git-mergetool. ;; Ediff has more whiz-bang features, but unfortunately it doesn't ;; integrate well with shell scripts that try to invoke ediff from an ;; emacs shell invocation.

(defun ediff-write-merge-buffer ()
  (let ((file ediff-merge-store-file))
    (set-buffer ediff-buffer-C)
    (write-region (point-min) (point-max) file)
    (message "Merge buffer saved in: %s" file)
    (set-buffer-modified-p nil)
    (sit-for 1)))
(defun emerge-files-command ()
  (let ((file-a (nth 0 command-line-args-left))
	(file-b (nth 1 command-line-args-left))
	(file-out (nth 2 command-line-args-left)))
    (setq command-line-args-left (nthcdr 3 command-line-args-left))
    (setq ediff-quit-hook 'kill-emacs
	  ediff-quit-merge-hook 'ediff-write-merge-buffer)
    (ediff-merge-files file-a file-b  nil file-out)))
(defun emerge-files-with-ancestor-command ()
  (let (file-a file-b file-anc file-out)
    ;; check for a -a flag, for filemerge compatibility
    (if (string= (car command-line-args-left) "-a")
	;; arguments are "-a ancestor file-a file-b file-out"
	(progn
	  (setq file-a (nth 2 command-line-args-left))
	  (setq file-b (nth 3 command-line-args-left))
	  (setq file-anc (nth 1 command-line-args-left))
	  (setq file-out (nth 4 command-line-args-left))
	  (setq command-line-args-left (nthcdr 5 command-line-args-left)))
        ;; arguments are "file-a file-b ancestor file-out"
        (setq file-a (nth 0 command-line-args-left))
        (setq file-b (nth 1 command-line-args-left))
        (setq file-anc (nth 2 command-line-args-left))
        (setq file-out (nth 3 command-line-args-left))
        (setq command-line-args-left (nthcdr 4 command-line-args-left)))
    (setq ediff-quit-hook 'kill-emacs
	  ediff-quit-merge-hook 'ediff-write-merge-buffer)
    (ediff-merge-files-with-ancestor file-a file-b file-anc nil file-out)))
;; End of use-ediff-instead.el
Previous: Theodore TsoNext: Sam Vilain
Message 12 of 18 in “git-mergetool: add support for ediff”
  1. git-mergetool: add support for ediffSam Vilain, Jun 29, 2007
  2. Jason SewallJun 29, 2007
  3. Theodore TsoJun 29, 2007
  4. Theodore TsoJul 2, 2007
  5. Junio C HamanoJul 2, 2007
  6. Theodore TsoJul 2, 2007
  7. Junio C HamanoJul 2, 2007
  8. Theodore TsoJul 2, 2007
  9. Junio C HamanoJul 2, 2007
  10. Sam VilainJul 2, 2007
  11. Theodore TsoJul 2, 2007
  12. Theodore TsoJul 2, 2007
  13. Sam VilainJul 2, 2007
  14. Theodore TsoJul 3, 2007
  15. Sam VilainJul 3, 2007
  16. David KastrupJul 28, 2007
  17. Theodore TsoJul 29, 2007
  18. David KastrupJul 29, 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.