summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenton Liu <liu.denton@gmail.com>2019-04-29 06:21:08 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-05-13 14:11:59 (GMT)
commit05fb8726cccc74908853c166248ff9b6abdafae5 (patch)
treee879f61c63d326d264ab6911fd8e32e6445610e4
parent57d93c1d2ce7deddf485e7c826278fef6815ec6b (diff)
downloadgit-05fb8726cccc74908853c166248ff9b6abdafae5.zip
git-05fb8726cccc74908853c166248ff9b6abdafae5.tar.gz
git-05fb8726cccc74908853c166248ff9b6abdafae5.tar.bz2
mergetool: use get_merge_tool function
In git-mergetool, the logic for getting which merge tool to use is duplicated in git-mergetool--lib, except for the fact that it needs to know whether the tool was guessed or not. Rewrite `get_merge_tool` to return whether or not the tool was guessed through the return code and make git-mergetool call this function instead of duplicating the logic. Note that 1 was chosen to be the return code of when a tool is guessed because it seems like a slightly more abnormal condition than getting a tool that's explicitly specified but this is completely arbitrary. Also, let `$GIT_MERGETOOL_GUI` be set to determine whether or not the guitool will be selected. This change is not completely backwards compatible as there may be external users of git-mergetool--lib. However, only one user, git-diffall[1], was found from searching GitHub and Google, and this tool is superseded by `git difftool --dir-diff` anyway. It seems very unlikely that there exists an external caller that would take into account the return code of `get_merge_tool` as it would always return 0 before this change so this change probably does not affect any external users. [1]: https://github.com/thenigan/git-diffall Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--Documentation/git-mergetool--lib.txt4
-rwxr-xr-xgit-difftool--helper.sh2
-rw-r--r--git-mergetool--lib.sh5
-rwxr-xr-xgit-mergetool.sh12
4 files changed, 12 insertions, 11 deletions
diff --git a/Documentation/git-mergetool--lib.txt b/Documentation/git-mergetool--lib.txt
index 055550b..4da9d24 100644
--- a/Documentation/git-mergetool--lib.txt
+++ b/Documentation/git-mergetool--lib.txt
@@ -28,7 +28,9 @@ to define the operation mode for the functions listed below.
FUNCTIONS
---------
get_merge_tool::
- returns a merge tool.
+ returns a merge tool. the return code is 1 if we returned a guessed
+ merge tool, else 0. '$GIT_MERGETOOL_GUI' may be set to 'true' to
+ search for the appropriate guitool.
get_merge_tool_cmd::
returns the custom command for a merge tool.
diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh
index 7bfb673..46af3e6 100755
--- a/git-difftool--helper.sh
+++ b/git-difftool--helper.sh
@@ -71,7 +71,7 @@ then
then
merge_tool="$GIT_DIFF_TOOL"
else
- merge_tool="$(get_merge_tool)" || exit
+ merge_tool="$(get_merge_tool)"
fi
fi
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 83bf524..b928179 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -403,14 +403,17 @@ get_merge_tool_path () {
}
get_merge_tool () {
+ is_guessed=false
# Check if a merge tool has been configured
- merge_tool=$(get_configured_merge_tool)
+ merge_tool=$(get_configured_merge_tool $GIT_MERGETOOL_GUI)
# Try to guess an appropriate merge tool if no tool has been set.
if test -z "$merge_tool"
then
merge_tool=$(guess_merge_tool) || exit
+ is_guessed=true
fi
echo "$merge_tool"
+ test "$is_guessed" = false
}
mergetool_find_win32_cmd () {
diff --git a/git-mergetool.sh b/git-mergetool.sh
index 01b9ad5..88fa6a9 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -389,7 +389,7 @@ print_noop_and_exit () {
main () {
prompt=$(git config --bool mergetool.prompt)
- gui_tool=false
+ GIT_MERGETOOL_GUI=false
guessed_merge_tool=false
orderfile=
@@ -416,10 +416,10 @@ main () {
esac
;;
--no-gui)
- gui_tool=false
+ GIT_MERGETOOL_GUI=false
;;
-g|--gui)
- gui_tool=true
+ GIT_MERGETOOL_GUI=true
;;
-y|--no-prompt)
prompt=false
@@ -449,12 +449,8 @@ main () {
if test -z "$merge_tool"
then
- # Check if a merge tool has been configured
- merge_tool=$(get_configured_merge_tool $gui_tool)
- # Try to guess an appropriate merge tool if no tool has been set.
- if test -z "$merge_tool"
+ if ! merge_tool=$(get_merge_tool)
then
- merge_tool=$(guess_merge_tool) || exit
guessed_merge_tool=true
fi
fi