From: Denton Liu <liu.denton@gmail.com>
To: Git Mailing List <git@vger.kernel.org>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
David Aguilar <davvid@gmail.com>,
Jeff Hostetler <git@jeffhostetler.com>,
Eric Sunshine <sunshine@sunshineco.com>,
Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v5 0/7] difftool and mergetool improvements
Date: Mon, 29 Apr 2019 02:20:58 -0400 [thread overview]
Message-ID: <cover.1556518203.git.liu.denton@gmail.com> (raw)
In-Reply-To: <cover.1556185345.git.liu.denton@gmail.com>
Hi David, thanks for the comments.
I'm not really sure why I did the double-negative thing... It seems
obvious that it should be the other way around. I also unrolled the
loops and wrote a gui_mode function.
Good suggestions!
---
Changes since v4:
* Remove double-negative
* Change double-nested search loop into one for-loop
* Create gui_mode function
* Change an instance of "exclusive" to "mutually exclusive"
Changes since v3:
* Move nested for into a subshell so that IFS does not leak out of
function
Changes since v2:
* Unsuppress output in t7610
* Make `get_merge_tool` return 1 on guessed so we don't have to deal
with parsing '$guessed:$merge_tool'
Changes since v1:
* Introduce get_merge_tool_guessed function instead of changing
get_merge_tool
* Remove unnecessary if-tower in mutual exclusivity logic
Denton Liu (7):
t7610: unsuppress output
t7610: add mergetool --gui tests
mergetool: use get_merge_tool function
mergetool--lib: create gui_mode function
mergetool: fallback to tool when guitool unavailable
difftool: make --gui, --tool and --extcmd mutually exclusive
difftool: fallback on merge.guitool
Documentation/git-difftool.txt | 4 +-
Documentation/git-mergetool--lib.txt | 4 +-
Documentation/git-mergetool.txt | 4 +-
builtin/difftool.c | 13 +--
git-difftool--helper.sh | 2 +-
git-mergetool--lib.sh | 47 ++++++--
git-mergetool.sh | 12 +-
t/t7610-mergetool.sh | 163 +++++++++++++++++----------
t/t7800-difftool.sh | 24 ++++
9 files changed, 180 insertions(+), 93 deletions(-)
Range-diff against v4:
1: 919aa32e20 = 1: 9f9922cab3 t7610: unsuppress output
2: 9a1bb60b20 = 2: 0f632ca6bf t7610: add mergetool --gui tests
3: a900ce2a6a ! 3: 81dd25d8e2 mergetool: use get_merge_tool function
@@ -18,8 +18,9 @@
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. It seems
- very unlikely that there exists an external caller that would take into
+ 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.
@@ -63,7 +64,7 @@
}
get_merge_tool () {
-+ not_guessed=true
++ 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)
@@ -71,10 +72,10 @@
if test -z "$merge_tool"
then
merge_tool=$(guess_merge_tool) || exit
-+ not_guessed=false
++ is_guessed=true
fi
echo "$merge_tool"
-+ test "$not_guessed" = true
++ test "$is_guessed" = false
}
mergetool_find_win32_cmd () {
-: ---------- > 4: 27a59e1e27 mergetool--lib: create gui_mode function
4: abcf91688a ! 5: 40413dbda1 mergetool: fallback to tool when guitool unavailable
@@ -15,8 +15,41 @@
3. diff.tool
4. merge.tool
- Note that the behavior for when difftool or mergetool are called without
- `--gui` should be identical with or without this patch.
+ The behavior for when difftool or mergetool are called without `--gui`
+ should be identical with or without this patch.
+
+ Note that the search loop could be written as
+
+ sections="merge"
+ keys="tool"
+ if diff_mode
+ then
+ sections="diff $sections"
+ fi
+ if gui_mode
+ then
+ keys="guitool $keys"
+ fi
+
+ merge_tool=$(
+ IFS=' '
+ for key in $keys
+ do
+ for section in $sections
+ do
+ selected=$(git config $section.$key)
+ if test -n "$selected"
+ then
+ echo "$selected"
+ return
+ fi
+ done
+ done)
+
+ which would make adding a mode in the future much easier. However,
+ adding a new mode will likely never happen as it is highly discouraged
+ so, as a result, it is written in its current form so that it's
+ immediately obvious for future readers.
Signed-off-by: Denton Liu <liu.denton@gmail.com>
@@ -42,41 +75,43 @@
}
get_configured_merge_tool () {
-- # If first argument is true, find the guitool instead
-- if test "$1" = true
-+ is_gui="$1"
-+ sections="merge"
-+ keys="tool"
-+
-+ if diff_mode
- then
+- if gui_mode
+- then
- gui_prefix=gui
-+ sections="diff $sections"
- fi
-
+- fi
+-
- # Diff mode first tries diff.(gui)tool and falls back to merge.(gui)tool.
- # Merge mode only checks merge.(gui)tool
-- if diff_mode
-+ if "$is_gui" = true
++ keys=
+ if diff_mode
then
- merge_tool=$(git config diff.${gui_prefix}tool || git config merge.${gui_prefix}tool)
-- else
++ if gui_mode
++ then
++ keys="diff.guitool merge.guitool diff.tool merge.tool"
++ else
++ keys="diff.tool merge.tool"
++ fi
+ else
- merge_tool=$(git config merge.${gui_prefix}tool)
-+ keys="guitool $keys"
++ if gui_mode
++ then
++ keys="merge.guitool merge.tool"
++ else
++ keys="merge.tool"
++ fi
fi
+
+ merge_tool=$(
+ IFS=' '
+ for key in $keys
+ do
-+ for section in $sections
-+ do
-+ if selected=$(git config $section.$key)
-+ then
-+ echo "$selected"
-+ return
-+ fi
-+ done
++ selected=$(git config $key)
++ if test -n "$selected"
++ then
++ echo "$selected"
++ return
++ fi
+ done)
+
if test -n "$merge_tool" && ! valid_tool "$merge_tool"
5: 9ec39c5af0 ! 6: c70789b689 difftool: make --gui, --tool and --extcmd mutually exclusive
@@ -29,7 +29,7 @@
test_cmp expect actual
'
-+test_expect_success 'difftool --gui, --tool and --extcmd are exclusive' '
++test_expect_success 'difftool --gui, --tool and --extcmd are mutually exclusive' '
+ difftool_test_setup &&
+ test_must_fail git difftool --gui --tool=test-tool &&
+ test_must_fail git difftool --gui --extcmd=cat &&
6: a72009fc3d = 7: 3fd4f46a7c difftool: fallback on merge.guitool
--
2.21.0.1033.g0e8cc1100c
next prev parent reply other threads:[~2019-04-29 6:21 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-22 5:07 [PATCH 0/5] difftool and mergetool improvements Denton Liu
2019-04-22 5:07 ` [PATCH 1/5] t7610: add mergetool --gui tests Denton Liu
2019-04-22 5:07 ` [PATCH 2/5] mergetool: use get_merge_tool function Denton Liu
2019-04-22 7:07 ` Eric Sunshine
2019-04-22 8:35 ` Denton Liu
2019-04-22 5:07 ` [PATCH 3/5] mergetool: fallback to tool when guitool unavailable Denton Liu
2019-04-22 5:07 ` [PATCH 4/5] difftool: make --gui, --tool and --extcmd exclusive Denton Liu
2019-04-22 7:03 ` Eric Sunshine
2019-04-22 5:07 ` [PATCH 5/5] difftool: fallback on merge.guitool Denton Liu
2019-04-22 18:18 ` Jeff Hostetler
2019-04-22 18:33 ` Denton Liu
2019-04-23 8:53 ` [PATCH v2 0/5] difftool and mergetool improvements Denton Liu
2019-04-23 8:53 ` [PATCH v2 1/5] t7610: add mergetool --gui tests Denton Liu
2019-04-24 7:07 ` Junio C Hamano
2019-04-23 8:54 ` [PATCH v2 2/5] mergetool: use get_merge_tool_guessed function Denton Liu
2019-04-24 7:27 ` Junio C Hamano
2019-04-23 8:54 ` [PATCH v2 3/5] mergetool: fallback to tool when guitool unavailable Denton Liu
2019-04-23 8:54 ` [PATCH v2 4/5] difftool: make --gui, --tool and --extcmd mutually exclusive Denton Liu
2019-04-23 8:54 ` [PATCH v2 5/5] difftool: fallback on merge.guitool Denton Liu
2019-04-24 22:46 ` [PATCH v3 0/6] difftool and mergetool improvements Denton Liu
2019-04-24 22:46 ` [PATCH v3 1/6] t7610: unsuppress output Denton Liu
2019-04-25 2:31 ` Junio C Hamano
2019-04-24 22:46 ` [PATCH v3 2/6] t7610: add mergetool --gui tests Denton Liu
2019-04-24 22:47 ` [PATCH v3 3/6] mergetool: use get_merge_tool function Denton Liu
2019-04-25 2:36 ` Junio C Hamano
2019-04-24 22:47 ` [PATCH v3 4/6] mergetool: fallback to tool when guitool unavailable Denton Liu
2019-04-25 3:02 ` Junio C Hamano
2019-04-25 5:16 ` Denton Liu
2019-04-24 22:47 ` [PATCH v3 5/6] difftool: make --gui, --tool and --extcmd mutually exclusive Denton Liu
2019-04-24 22:47 ` [PATCH v3 6/6] difftool: fallback on merge.guitool Denton Liu
2019-04-25 3:10 ` Junio C Hamano
2019-04-25 9:54 ` [PATCH v4 0/6] difftool and mergetool improvements Denton Liu
2019-04-25 9:54 ` [PATCH v4 1/6] t7610: unsuppress output Denton Liu
2019-04-25 9:54 ` [PATCH v4 2/6] t7610: add mergetool --gui tests Denton Liu
2019-04-25 9:54 ` [PATCH v4 3/6] mergetool: use get_merge_tool function Denton Liu
2019-04-28 23:52 ` David Aguilar
2019-04-25 9:54 ` [PATCH v4 4/6] mergetool: fallback to tool when guitool unavailable Denton Liu
2019-04-28 23:56 ` David Aguilar
2019-04-25 9:54 ` [PATCH v4 5/6] difftool: make --gui, --tool and --extcmd mutually exclusive Denton Liu
2019-04-25 9:54 ` [PATCH v4 6/6] difftool: fallback on merge.guitool Denton Liu
2019-04-29 6:20 ` Denton Liu [this message]
2019-04-29 6:21 ` [PATCH v5 1/7] t7610: unsuppress output Denton Liu
2019-04-29 6:21 ` [PATCH v5 2/7] t7610: add mergetool --gui tests Denton Liu
2019-04-29 6:21 ` [PATCH v5 3/7] mergetool: use get_merge_tool function Denton Liu
2019-04-29 6:21 ` [PATCH v5 4/7] mergetool--lib: create gui_mode function Denton Liu
2019-04-29 6:21 ` [PATCH v5 5/7] mergetool: fallback to tool when guitool unavailable Denton Liu
2019-04-29 6:21 ` [PATCH v5 6/7] difftool: make --gui, --tool and --extcmd mutually exclusive Denton Liu
2019-04-29 6:21 ` [PATCH v5 7/7] difftool: fallback on merge.guitool Denton Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1556518203.git.liu.denton@gmail.com \
--to=liu.denton@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=davvid@gmail.com \
--cc=git@jeffhostetler.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.