John Keeping <john@xxxxxxxxxxxxx> writes: > On Fri, Jan 25, 2013 at 12:16:42PM -0800, Junio C Hamano wrote: >> John Keeping <john@xxxxxxxxxxxxx> writes: >> >> > Actually, can we just change all of the above part of the loop to: >> > >> > test "$tool" = defaults && continue >> > >> > merge_tool_path=$( >> > setup_tool "$tool" >/dev/null 2>&1 && >> > translate_merge_tool_path "$tool" >> > ) || continue >> >> Meaning "setup_tool ought to know which mode we are in and should >> fail if we are in merge mode and it does not support merging"? That >> line of reasoning makes tons of sense to me, compared to this script >> implementing that logic for these scriptlets. > > Yes, that's part of what setup_tool does. It actually calls "exit" if > the "mode? && can_mode" test fails, which is why we need to call it in > the subshell. > > I think this would get even better if we add a preparatory patch like > this, so we can just call setup_tool and then set merge_tool_path: > > -- >8 -- > > diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh > index 888ae3e..4644cbf 100644 > --- a/git-mergetool--lib.sh > +++ b/git-mergetool--lib.sh > @@ -67,11 +67,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 > } > @@ -100,7 +100,7 @@ run_merge_tool () { > status=0 > > # Bring tool-specific functions into scope > - setup_tool "$1" > + setup_tool "$1" || return > > if merge_mode > then > > -- 8< -- > >> How/when does translate_merge_tool_path fail? > > It doesn't - the "|| continue" is to catch errors from setup_tool. Ugh. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html