@@ -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
+}
deleted file mode 100644
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/bc"
deleted file mode 100644
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
deleted file mode 100644
@@ -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
+}
deleted file mode 100644
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
deleted file mode 100644
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
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> --- git-mergetool--lib.sh | 28 +++++++++++++++++++++++----- mergetools/bc | 5 +++++ mergetools/bc3 | 1 - mergetools/gvimdiff2 | 1 - mergetools/gvimdiff3 | 1 - mergetools/vimdiff | 8 ++++++++ mergetools/vimdiff2 | 1 - mergetools/vimdiff3 | 1 - 8 files changed, 36 insertions(+), 10 deletions(-) delete mode 100644 mergetools/bc3 delete mode 100644 mergetools/gvimdiff2 delete mode 100644 mergetools/gvimdiff3 delete mode 100644 mergetools/vimdiff2 delete mode 100644 mergetools/vimdiff3