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 <rogi@skylittlesystem.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
pudinha 2020-07-29 22:31:12 +01:00 committed by Junio C Hamano
parent 47ae905ffb
commit 83bbf9b92e
8 changed files with 36 additions and 10 deletions

View File

@ -43,7 +43,14 @@ show_tool_names () {
shown_any= shown_any=
( cd "$MERGE_TOOLS_DIR" && ls ) | { ( 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 do
if setup_tool "$toolname" 2>/dev/null && if setup_tool "$toolname" 2>/dev/null &&
(eval "$condition" "$toolname") (eval "$condition" "$toolname")
@ -157,6 +164,10 @@ setup_tool () {
echo "$1" echo "$1"
} }
list_tool_variants () {
echo "$tool"
}
# Most tools' exit codes cannot be trusted, so By default we ignore # Most tools' exit codes cannot be trusted, so By default we ignore
# their exit code and check the merged file's modification time in # their exit code and check the merged file's modification time in
# check_unchanged() to determine whether or not the merge was # check_unchanged() to determine whether or not the merge was
@ -178,19 +189,26 @@ setup_tool () {
false false
} }
if test -f "$MERGE_TOOLS_DIR/$tool"
if ! test -f "$MERGE_TOOLS_DIR/$tool"
then 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 setup_user_tool
return $? return $?
fi fi
# Load the redefined functions
. "$MERGE_TOOLS_DIR/$tool"
# Now let the user override the default command for the tool. If # 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. # they have not done so then this will return 1 which we ignore.
setup_user_tool setup_user_tool
if ! list_tool_variants | grep -q "^$tool$"
then
return 1
fi
if merge_mode && ! can_merge if merge_mode && ! can_merge
then then
echo "error: '$tool' can not be used to resolve merges" >&2 echo "error: '$tool' can not be used to resolve merges" >&2

View File

@ -21,3 +21,8 @@ translate_merge_tool_path() {
echo bcompare echo bcompare
fi fi
} }
list_tool_variants () {
echo bc
echo bc3
}

View File

@ -1 +0,0 @@
. "$MERGE_TOOLS_DIR/bc"

View File

@ -1 +0,0 @@
. "$MERGE_TOOLS_DIR/vimdiff"

View File

@ -1 +0,0 @@
. "$MERGE_TOOLS_DIR/vimdiff"

View File

@ -46,3 +46,11 @@ translate_merge_tool_path() {
exit_code_trustable () { exit_code_trustable () {
true true
} }
list_tool_variants () {
for prefix in '' g; do
for suffix in '' 2 3; do
echo "${prefix}vimdiff${suffix}"
done
done
}

View File

@ -1 +0,0 @@
. "$MERGE_TOOLS_DIR/vimdiff"

View File

@ -1 +0,0 @@
. "$MERGE_TOOLS_DIR/vimdiff"