diff options
author | John Keeping <john@keeping.me.uk> | 2013-01-26 16:40:06 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-01-27 18:33:16 -0800 |
commit | 62957bea0c7637ae1db4452fc165c59d9408585b (patch) | |
tree | 223b59e3ba2339401b62cbb079be6a6eeba2a6ee | |
parent | 88d3406ad77dbab4d8ea76756822531228332b1b (diff) | |
download | git-62957bea0c7637ae1db4452fc165c59d9408585b.tar.gz |
mergetool--lib: don't call "exit" in setup_tool
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>
-rw-r--r-- | git-mergetool--lib.sh | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh index aa38bd18bf..f1bb372b6b 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 |