From 83bbf9b92ea8a10a60f44369a200b39ce5db78cd Mon Sep 17 00:00:00 2001 From: pudinha Date: Wed, 29 Jul 2020 22:31:12 +0100 Subject: mergetool--lib: improve support for vimdiff-style tool variants The merge tools vimdiff2, vimdiff3, gvimdiff2, gvimdiff3 and bc3 are all variants of the main tools vimdiff and bc. They are implemented in the main and a one-liner script that just sources it exist for each. Allow variants ending in [0-9] to be correctly wired without the need for such one-liners, so instead of 5 scripts, only 1 (gvimdiff) is needed. Signed-off-by: pudinha Signed-off-by: Junio C Hamano --- git-mergetool--lib.sh | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'git-mergetool--lib.sh') diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh index 204a5acd66..29fecc340f 100644 --- a/git-mergetool--lib.sh +++ b/git-mergetool--lib.sh @@ -43,7 +43,14 @@ show_tool_names () { shown_any= ( cd "$MERGE_TOOLS_DIR" && ls ) | { - while read toolname + while read scriptname + do + setup_tool "$scriptname" 2>/dev/null + variants="$variants$(list_tool_variants)\n" + done + variants="$(echo "$variants" | sort | uniq)" + + for toolname in $variants do if setup_tool "$toolname" 2>/dev/null && (eval "$condition" "$toolname") @@ -157,6 +164,10 @@ setup_tool () { echo "$1" } + list_tool_variants () { + echo "$tool" + } + # Most tools' exit codes cannot be trusted, so By default we ignore # their exit code and check the merged file's modification time in # check_unchanged() to determine whether or not the merge was @@ -178,19 +189,26 @@ setup_tool () { false } - - if ! test -f "$MERGE_TOOLS_DIR/$tool" + if test -f "$MERGE_TOOLS_DIR/$tool" then + . "$MERGE_TOOLS_DIR/$tool" + elif test -f "$MERGE_TOOLS_DIR/${tool%[0-9]}" + then + . "$MERGE_TOOLS_DIR/${tool%[0-9]}" + else setup_user_tool return $? fi - # Load the redefined functions - . "$MERGE_TOOLS_DIR/$tool" # Now let the user override the default command for the tool. If # they have not done so then this will return 1 which we ignore. setup_user_tool + if ! list_tool_variants | grep -q "^$tool$" + then + return 1 + fi + if merge_mode && ! can_merge then echo "error: '$tool' can not be used to resolve merges" >&2 -- cgit v1.2.3