Thread (2 messages) flat view 2 messages, 2 authors, 2016-06-15

Re: [PATCH] difftool: support repositories with .git-files

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:59:59

Jens Lehmann [off-list ref] writes:
quoted hunk
Am 24.02.2014 17:55, schrieb Junio C Hamano:
quoted
David Aguilar [off-list ref] writes:
quoted
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 <redacted>
Helped-by: Jens Lehmann [off-list ref]
Helped-by: John Keeping [off-list ref]
Signed-off-by: David Aguilar <redacted>
---
Looks good; thanks.

FWIW:
Tested-by: Jens Lehmann <redacted>

What about squashing this in to detect any future regressions?
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index 2418528..d86ad68 100755
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
@@ -434,4 +434,12 @@ test_expect_success PERL 'difftool --no-symlinks detects conflict ' '
 	)
 '

+test_expect_success PERL 'difftool properly honours gitlink and core.worktree' '
+	git submodule add ./. submod/ule &&
+	(
+		cd submod/ule &&
+		git difftool --tool=echo  --dir-diff --cached
In the context of this fix, finishing with 0 exit status may be all
we care about, but do we also care about things like in what
directory the tool is invoked in, what arguments and extra
environment settings (if any) it is given, and stuff like that?

In fact, the "echo" in the above is very misleading.  The test
relies on the fact that immediately after the submod/ule is cloned,
"diff --cached" does not have to call any tool backend---if you
modify some tracked file in its working tree and dropped --cached
on the command line, the command will fail with "Huh?  I do not know
what 'echo' diff/merge backend is", no?
+	)
+'
+
 test_done
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help