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

[PATCH 1/2 v3] mergetool--lib: don't call "exit" in setup_tool

From
John Keeping <john@keeping.me.uk>
Date
Jan 26, 2013, 13:50 UTC
Message-ID
<20130126135023.GJ7498@serenity.lan>
In-Reply-To
<20130126121721.GI7498@serenity.lan>

This will make it easier to use setup_tool in places where we expect that the selected tool will not support the current mode.

We need to introduce a new return code for setup_tool to differentiate between the case of "the selected tool is invalid" and "the selected tool is not a built-in" since we must call setup_tool when a custom 'merge.<tool>.path' is configured for a built-in tool but avoid failing when the configured tool is not a built-in.

Signed-off-by: John Keeping <john@keeping.me.uk>
---
Show 11 quoted lines
> On Fri, Jan 25, 2013 at 04:24:03PM -0800, Junio C Hamano wrote:
> > Applying this one on top of 1/7 thru 5/7 and 7/7 seems to break
> > t7610 rather badly.
> 
> Sorry about that.  The 'setup_tool' function should really be called
> 'setup_builtin_tool' - it isn't necessary when a custom mergetool is
> configured and will return 1 when called with an argument that isn't a
> builtin tool from $GIT_EXEC_PATH/mergetools.
> 
> The change is the second hunk below which now wraps the call to
> setup_tool in an if block as well as adding the "|| return".

Now that I've run the entire test suite, that still wasn't correct since it did not correctly handle the case where the user overrides the path for one of the built-in mergetools.

 git-mergetool--lib.sh | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 4c1e129..dd4f088 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -58,7 +58,11 @@ setup_tool () {
 	. "$mergetools/defaults"
 	if ! test -f "$mergetools/$tool"
 	then
-		return 1
+		# Use a special return code for this case since we want to
+		# source "defaults" even when an explicit tool path is
+		# configured since the user can use that to override the
+		# default path in the scriptlet.
+		return 2
 	fi
 
 	# Load the redefined functions
@@ -67,11 +71,11 @@ setup_tool () {
 	if merge_mode && ! can_merge
 	then
 		echo "error: '$tool' can not be used to resolve merges" >&2
-		exit 1
+		return 1
 	elif diff_mode && ! can_diff
 	then
 		echo "error: '$tool' can only be used to resolve merges" >&2
-		exit 1
+		return 1
 	fi
 	return 0
 }
@@ -101,6 +105,19 @@ run_merge_tool () {
 
 	# Bring tool-specific functions into scope
 	setup_tool "$1"
+	exitcode=$?
+	case $exitcode in
+	0)
+		:
+		;;
+	2)
+		# The configured tool is not a built-in tool.
+		test -n "$merge_tool_path" || return 1
+		;;
+	*)
+		return $exitcode
+		;;
+	esac
 
 	if merge_mode
 	then
-- 
1.8.1
Previous: John KeepingNext: John Keeping
Message 29 of 30 in “mergetool-lib improvements for --tool-help”
  1. 0/7 mergetool-lib improvements for --tool-helpDavid Aguilar, Jan 25, 2013
  2. 1/7 git-mergetool: move show_tool_help to mergetool--libDavid Aguilar, Jan 25, 2013
  3. 2/7 git-mergetool: remove redundant assignmentDavid Aguilar, Jan 25, 2013
  4. 3/7 git-mergetool: don't hardcode 'mergetool' in show_tool_helpDavid Aguilar, Jan 25, 2013
  5. 4/7 git-difftool: use git-mergetool--lib for "--tool-help"David Aguilar, Jan 25, 2013
  6. 5/7 mergetools/vim: Remove redundant diff commandDavid Aguilar, Jan 25, 2013
  7. 6/7 mergetools: Fix difftool/mergetool --tool-help listing for vimDavid Aguilar, Jan 25, 2013
  8. Sebastian SchuberthJan 25, 2013
  9. David AguilarJan 25, 2013
  10. Sebastian SchuberthJan 25, 2013
  11. Sebastian SchuberthJan 25, 2013
  12. John KeepingJan 25, 2013
  13. David AguilarJan 25, 2013
  14. Junio C HamanoJan 25, 2013
  15. 7/7 mergetool--lib: Improve show_tool_help() outputDavid Aguilar, Jan 25, 2013
  16. John KeepingJan 25, 2013
  17. Junio C HamanoJan 25, 2013
  18. John KeepingJan 25, 2013
  19. Junio C HamanoJan 25, 2013
  20. John KeepingJan 25, 2013
  21. Junio C HamanoJan 25, 2013
  22. John KeepingJan 25, 2013
  23. Junio C HamanoJan 25, 2013
  24. John KeepingJan 25, 2013
  25. 8/7 mergetool--lib: don't call "exit" in setup_toolJohn Keeping, Jan 25, 2013
  26. Junio C HamanoJan 26, 2013
  27. David AguilarJan 26, 2013
  28. 1/2 mergetool--lib: don't call "exit" in setup_toolJohn Keeping, Jan 26, 2013
  29. 1/2 mergetool--lib: don't call "exit" in setup_toolJohn Keeping, Jan 26, 2013
  30. 9/7 mergetool--lib: fix path lookup in guess_merge_toolJohn Keeping, Jan 25, 2013

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.