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