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=
( 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

View File

@ -21,3 +21,8 @@ translate_merge_tool_path() {
echo bcompare
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 () {
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"