Browse Source

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>
maint
pudinha 5 years ago committed by Junio C Hamano
parent
commit
83bbf9b92e
  1. 28
      git-mergetool--lib.sh
  2. 5
      mergetools/bc
  3. 1
      mergetools/bc3
  4. 1
      mergetools/gvimdiff2
  5. 1
      mergetools/gvimdiff3
  6. 8
      mergetools/vimdiff
  7. 1
      mergetools/vimdiff2
  8. 1
      mergetools/vimdiff3

28
git-mergetool--lib.sh

@ -43,7 +43,14 @@ show_tool_names () { @@ -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 () { @@ -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 () { @@ -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

5
mergetools/bc

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

list_tool_variants () {
echo bc
echo bc3
}

1
mergetools/bc3

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

1
mergetools/gvimdiff2

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

1
mergetools/gvimdiff3

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

8
mergetools/vimdiff

@ -46,3 +46,11 @@ translate_merge_tool_path() { @@ -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
mergetools/vimdiff2

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

1
mergetools/vimdiff3

@ -1 +0,0 @@ @@ -1 +0,0 @@
. "$MERGE_TOOLS_DIR/vimdiff"
Loading…
Cancel
Save