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

Re: Diftool problems

From
Markus Heidelberg <markus.heidelberg@web.de>
Date
Apr 29, 2009, 20:48 UTC
Message-ID
<200904292248.06107.markus.heidelberg@web.de>
In-Reply-To
<7c0fdf4f0904291255i4076df8cubb26fdb2d51826d4@mail.gmail.com>
Marcin Zalewski, 29.04.2009:
Show 5 quoted lines
> > The real fix would be to adjust the ediff snippet for difftool support.
> 
> The emas snippet was meant to work with mergetool and it does (I
> think). Changing the emacs code could indeed help with difftool but it
> would break mergetool.

I'm sure the emacs snippet can be adjusted to work with both. If it is called with 2 files, then it's for difftool, else for mergetool.

Show 5 quoted lines
> > As you said yourself, git-difftool is not meant for merging files, so
> > there is no reason to open more than 2 files at all.
> 
> I agree, but the current implementation of difftool uses mergetool
> library.

The file is called git-mergetool--lib, but more exactly it should be called git-mergetool-difftool--lib, but who wants this? Difftool was originally based on mergetool, but the recent refactoring introduced the lib, which is shared by both, without belonging to one of them more than to the other.

> That may be the reason why difftool is trying to come up with
> the third file.
Difftool isn't forcing a third file on you.
Show 5 quoted lines
> Here is the snippet of code from mergetool library
> that executes emerge in case of non-merge-mode:
> 
> "$merge_tool_path" -f emerge-files-command \
> 				"$LOCAL" "$REMOTE" "$(basename "$MERGED")"

As said, this command shouldn't open the 3rd MERGED file, this should be fixed. This part of the lib is not responsible for difftool.

Show 6 quoted lines
> > The built-in difftools 'emerge' and 'ecmerge' still seem to open LOCAL,
> > REMOTE and MERGED. This should be fixed, so that they don't open MERGED
> > any more, but I don't have emacs installed, so I shouldn't try it
> > myself.
> 
> Again, I agree. This could be one of the possible solutions,

No, that doesn't solve your problem with ediff. Or do you set merge.tool=emerge and ediff is called due to the snippet in your ~/.emacs? If yes, then I got it now... Sure, I just read the post from Ted Tso again, use-ediff-instead.el, aha.

I guess it would be cleaner to do this in ~/.gitconfig:
[diff]
	tool = ediff
[difftool "ediff"]
	cmd = emacs --options "$LOCAL" "$REMOTE"
Which is annoying, of course.

But now that I got it (see above) I think you should leave merge.tool=emerge, since the snippet somehow seems to rely on it.

> but it
> would require that mergetool library is changed

What's wrong with that? If this solves the 'ediff' problem and also makes 'emerge' to work right as difftool, then everyone would benefit from.

Show 10 quoted lines
> or rewriting pieces of
> mergetool in difftool. Correct me if I am wrong.
> 
> > Oh, and LOCAL shouldn't be copied to a temporary file in the first
> > place, because people don't use git-difftool in read-only mode only.
> 
> I think that merge result could be a temporary file, like in
> mergetool. In a situation where I use git to track an SVN repository,
> difftool can be actually used to merge my uncommitted changes with a
> commit from someone else after doing svn rebase.

Above you want your ediff mergetool snippet to work with difftool. And here you want to use difftool as a mergetool. I'm confused :)

BTW, difftool doesn't work with files in unmerged state.
Markus
Previous: Marcin ZalewskiNext: Marcin Zalewski
Message 4 of 6 in “Diftool problems”
  1. Marcin ZalewskiApr 29, 2009
  2. Markus HeidelbergApr 29, 2009
  3. Marcin ZalewskiApr 29, 2009
  4. Markus HeidelbergApr 29, 2009
  5. Marcin ZalewskiApr 29, 2009
  6. David AguilarMay 2, 2009

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.