difftool: support repositories with .git-files
commit94eaa806519498de2ca59a424b013812d72d21c5
authorDavid Aguilar <davvid@gmail.com>
Mon, 24 Feb 2014 03:12:35 +0000 (23 19:12 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 24 Feb 2014 17:53:57 +0000 (24 09:53 -0800)
tree3fba9ea8512b6023845f4a97aa5bba01a6d2e4e4
parent7bbc4e8fdb33e0a8e42e77cc05460d4c4f615f4d
difftool: support repositories with .git-files

Modern versions of "git submodule" use .git-files to setup the
submodule directory.  When run in a "git submodule"-created
repository "git difftool --dir-diff" dies with the following
error:

$ git difftool -d HEAD~
fatal: This operation must be run in a work tree
diff --raw --no-abbrev -z HEAD~: command returned error: 128

core.worktree is relative to the .git directory but the logic
in find_worktree() does not account for it.

Use `git rev-parse --show-toplevel` to find the worktree so that
the dir-diff feature works inside a submodule.

Reported-by: Gábor Lipták <gabor.liptak@gmail.com>
Helped-by: Jens Lehmann <jens.lehmann@web.de>
Helped-by: John Keeping <john@keeping.me.uk>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-difftool.perl