mergetool--lib: don't call "exit" in setup_tool
authorJohn Keeping <john@keeping.me.uk>
Sun, 27 Jan 2013 00:40:06 +0000 (16:40 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 28 Jan 2013 02:33:16 +0000 (18:33 -0800)
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>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-mergetool--lib.sh

index aa38bd18bfaa3b1d79a7370b7b6cefbacb169556..f1bb372b6b822d2c3d09b2d7fa35f90cfc50c403 100644 (file)
@@ -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