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:
parent
47ae905ffb
commit
83bbf9b92e
@ -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
|
||||||
|
@ -21,3 +21,8 @@ translate_merge_tool_path() {
|
|||||||
echo bcompare
|
echo bcompare
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
list_tool_variants () {
|
||||||
|
echo bc
|
||||||
|
echo bc3
|
||||||
|
}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
. "$MERGE_TOOLS_DIR/bc"
|
|
@ -1 +0,0 @@
|
|||||||
. "$MERGE_TOOLS_DIR/vimdiff"
|
|
@ -1 +0,0 @@
|
|||||||
. "$MERGE_TOOLS_DIR/vimdiff"
|
|
@ -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
|
||||||
|
}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
. "$MERGE_TOOLS_DIR/vimdiff"
|
|
@ -1 +0,0 @@
|
|||||||
. "$MERGE_TOOLS_DIR/vimdiff"
|
|
Loading…
Reference in New Issue
Block a user