Skip to content

Commit

Permalink
mergetool--lib: improve support for vimdiff-style tool variants
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
pudiva authored and gitster committed Jul 29, 2020
1 parent 47ae905 commit 83bbf9b
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 10 deletions.
28 changes: 23 additions & 5 deletions git-mergetool--lib.sh
Expand Up @@ -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")
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
5 changes: 5 additions & 0 deletions mergetools/bc
Expand Up @@ -21,3 +21,8 @@ translate_merge_tool_path() {
echo bcompare
fi
}

list_tool_variants () {
echo bc
echo bc3
}
1 change: 0 additions & 1 deletion mergetools/bc3

This file was deleted.

1 change: 0 additions & 1 deletion mergetools/gvimdiff2

This file was deleted.

1 change: 0 additions & 1 deletion mergetools/gvimdiff3

This file was deleted.

8 changes: 8 additions & 0 deletions mergetools/vimdiff
Expand Up @@ -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
}
1 change: 0 additions & 1 deletion mergetools/vimdiff2

This file was deleted.

1 change: 0 additions & 1 deletion mergetools/vimdiff3

This file was deleted.

0 comments on commit 83bbf9b

Please sign in to comment.