Marcin Zalewski, 29.04.2009: > > 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. > > 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. > 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. > > 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. > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html