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

[PATCH v2 5/5] difftool: fallback on merge.guitool

From
Denton Liu <liu.denton@gmail.com>
Date
Apr 23, 2019, 08:54 UTC
Message-ID
<5a24772219f405c93a54310d3e81a7c0e71c350e.1556009181.git.liu.denton@gmail.com>
In-Reply-To
<cover.1556009181.git.liu.denton@gmail.com>
In git-difftool.txt, it says
	'git difftool' falls back to 'git mergetool' config variables when the
	difftool equivalents have not been defined.

However, when `diff.guitool` is missing, it doesn't fallback to anything. Make git-difftool fallback to `merge.guitool` when `diff.guitool` is missing.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
---
 Documentation/git-difftool.txt |  4 +++-
 builtin/difftool.c             | 10 ++--------
 t/t7800-difftool.sh            | 16 ++++++++++++++++
 3 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt
index 96c26e6aa8..484c485fd0 100644
--- a/Documentation/git-difftool.txt
+++ b/Documentation/git-difftool.txt
@@ -90,7 +90,9 @@ instead.  `--no-symlinks` is the default on Windows.
 	When 'git-difftool' is invoked with the `-g` or `--gui` option
 	the default diff tool will be read from the configured
 	`diff.guitool` variable instead of `diff.tool`. The `--no-gui`
-	option can be used to override this setting.
+	option can be used to override this setting. If `diff.guitool`
+	is not set, we will fallback in the order of `merge.guitool`,
+	`diff.tool`, `merge.tool` until a tool is found.
 
 --[no-]trust-exit-code::
 	'git-difftool' invokes a diff tool individually on each file.
diff --git a/builtin/difftool.c b/builtin/difftool.c
index 65bba90338..10660639c0 100644
--- a/builtin/difftool.c
+++ b/builtin/difftool.c
@@ -24,7 +24,6 @@
 #include "object-store.h"
 #include "dir.h"
 
-static char *diff_gui_tool;
 static int trust_exit_code;
 
 static const char *const builtin_difftool_usage[] = {
@@ -34,11 +33,6 @@ static const char *const builtin_difftool_usage[] = {
 
 static int difftool_config(const char *var, const char *value, void *cb)
 {
-	if (!strcmp(var, "diff.guitool")) {
-		diff_gui_tool = xstrdup(value);
-		return 0;
-	}
-
 	if (!strcmp(var, "difftool.trustexitcode")) {
 		trust_exit_code = git_config_bool(var, value);
 		return 0;
@@ -734,8 +728,8 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
 	if (use_gui_tool + !!difftool_cmd + !!extcmd > 1)
 		die(_("--gui, --tool and --extcmd are mutually exclusive"));
 
-	if (use_gui_tool && diff_gui_tool && *diff_gui_tool)
-		setenv("GIT_DIFF_TOOL", diff_gui_tool, 1);
+	if (use_gui_tool)
+		setenv("GIT_MERGETOOL_GUI", "true", 1);
 	else if (difftool_cmd) {
 		if (*difftool_cmd)
 			setenv("GIT_DIFF_TOOL", difftool_cmd, 1);
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index 107f31213d..ae90701a12 100755
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
@@ -279,11 +279,27 @@ test_expect_success 'difftool + mergetool config variables' '
 	echo branch >expect &&
 	git difftool --no-prompt branch >actual &&
 	test_cmp expect actual &&
+	git difftool --gui --no-prompt branch >actual &&
+	test_cmp expect actual &&
 
 	# set merge.tool to something bogus, diff.tool to test-tool
 	test_config merge.tool bogus-tool &&
 	test_config diff.tool test-tool &&
 	git difftool --no-prompt branch >actual &&
+	test_cmp expect actual &&
+	git difftool --gui --no-prompt branch >actual &&
+	test_cmp expect actual &&
+
+	# set merge.tool, diff.tool to something bogus, merge.guitool to test-tool
+	test_config diff.tool bogus-tool &&
+	test_config merge.guitool test-tool &&
+	git difftool --gui --no-prompt branch >actual &&
+	test_cmp expect actual &&
+
+	# set merge.tool, diff.tool, merge.guitool to something bogus, diff.guitool to test-tool
+	test_config merge.guitool bogus-tool &&
+	test_config diff.guitool test-tool &&
+	git difftool --gui --no-prompt branch >actual &&
 	test_cmp expect actual
 '
 
-- 
2.21.0.1000.g11cd861522
Previous: Denton LiuNext: Denton Liu
Message 19 of 48 in “difftool and mergetool improvements”
  1. 0/5 difftool and mergetool improvementsDenton Liu, Apr 22, 2019
  2. 1/5 t7610: add mergetool --gui testsDenton Liu, Apr 22, 2019
  3. 2/5 mergetool: use get_merge_tool functionDenton Liu, Apr 22, 2019
  4. Eric SunshineApr 22, 2019
  5. Denton LiuApr 22, 2019
  6. 3/5 mergetool: fallback to tool when guitool unavailableDenton Liu, Apr 22, 2019
  7. 4/5 difftool: make --gui, --tool and --extcmd exclusiveDenton Liu, Apr 22, 2019
  8. Eric SunshineApr 22, 2019
  9. 5/5 difftool: fallback on merge.guitoolDenton Liu, Apr 22, 2019
  10. Jeff HostetlerApr 22, 2019
  11. Denton LiuApr 22, 2019
  12. 0/5 difftool and mergetool improvementsDenton Liu, Apr 23, 2019
  13. 1/5 t7610: add mergetool --gui testsDenton Liu, Apr 23, 2019
  14. Junio C HamanoApr 24, 2019
  15. 2/5 mergetool: use get_merge_tool_guessed functionDenton Liu, Apr 23, 2019
  16. Junio C HamanoApr 24, 2019
  17. 3/5 mergetool: fallback to tool when guitool unavailableDenton Liu, Apr 23, 2019
  18. 4/5 difftool: make --gui, --tool and --extcmd mutually exclusiveDenton Liu, Apr 23, 2019
  19. 5/5 difftool: fallback on merge.guitoolDenton Liu, Apr 23, 2019
  20. 0/6 difftool and mergetool improvementsDenton Liu, Apr 24, 2019
  21. 1/6 t7610: unsuppress outputDenton Liu, Apr 24, 2019
  22. Junio C HamanoApr 25, 2019
  23. 2/6 t7610: add mergetool --gui testsDenton Liu, Apr 24, 2019
  24. 3/6 mergetool: use get_merge_tool functionDenton Liu, Apr 24, 2019
  25. Junio C HamanoApr 25, 2019
  26. 4/6 mergetool: fallback to tool when guitool unavailableDenton Liu, Apr 24, 2019
  27. Junio C HamanoApr 25, 2019
  28. Denton LiuApr 25, 2019
  29. 5/6 difftool: make --gui, --tool and --extcmd mutually exclusiveDenton Liu, Apr 24, 2019
  30. 6/6 difftool: fallback on merge.guitoolDenton Liu, Apr 24, 2019
  31. Junio C HamanoApr 25, 2019
  32. 0/6 difftool and mergetool improvementsDenton Liu, Apr 25, 2019
  33. 1/6 t7610: unsuppress outputDenton Liu, Apr 25, 2019
  34. 2/6 t7610: add mergetool --gui testsDenton Liu, Apr 25, 2019
  35. 3/6 mergetool: use get_merge_tool functionDenton Liu, Apr 25, 2019
  36. David AguilarApr 28, 2019
  37. 4/6 mergetool: fallback to tool when guitool unavailableDenton Liu, Apr 25, 2019
  38. David AguilarApr 28, 2019
  39. 5/6 difftool: make --gui, --tool and --extcmd mutually exclusiveDenton Liu, Apr 25, 2019
  40. 6/6 difftool: fallback on merge.guitoolDenton Liu, Apr 25, 2019
  41. 0/7 difftool and mergetool improvementsDenton Liu, Apr 29, 2019
  42. 1/7 t7610: unsuppress outputDenton Liu, Apr 29, 2019
  43. 2/7 t7610: add mergetool --gui testsDenton Liu, Apr 29, 2019
  44. 3/7 mergetool: use get_merge_tool functionDenton Liu, Apr 29, 2019
  45. 4/7 mergetool--lib: create gui_mode functionDenton Liu, Apr 29, 2019
  46. 5/7 mergetool: fallback to tool when guitool unavailableDenton Liu, Apr 29, 2019
  47. 6/7 difftool: make --gui, --tool and --extcmd mutually exclusiveDenton Liu, Apr 29, 2019
  48. 7/7 difftool: fallback on merge.guitoolDenton Liu, Apr 29, 2019

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.