Merge branch 'pd/mergetool-nvimdiff'

The existing backends for "git mergetool" based on variants of vim
have been refactored and then support for "nvim" has been added.

* pd/mergetool-nvimdiff:
  mergetools: add support for nvimdiff (neovim) family
  mergetool--lib: improve support for vimdiff-style tool variants
This commit is contained in:
Junio C Hamano 2020-08-17 17:02:43 -07:00
commit 873fa13e3f
9 changed files with 51 additions and 18 deletions

View file

@ -1712,8 +1712,8 @@ _git_diff ()
}
__git_mergetools_common="diffuse diffmerge ecmerge emerge kdiff3 meld opendiff
tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc
codecompare smerge
tkdiff vimdiff nvimdiff gvimdiff xxdiff araxis p4merge
bc codecompare smerge
"
_git_difftool ()

View file

@ -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
@ -286,11 +304,14 @@ list_merge_tool_candidates () {
tools="$tools smerge"
fi
case "${VISUAL:-$EDITOR}" in
*nvim*)
tools="$tools nvimdiff vimdiff emerge"
;;
*vim*)
tools="$tools vimdiff emerge"
tools="$tools vimdiff nvimdiff emerge"
;;
*)
tools="$tools emerge vimdiff"
tools="$tools emerge vimdiff nvimdiff"
;;
esac
}

View file

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

View file

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

View file

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

View file

@ -5,7 +5,7 @@ diff_cmd () {
merge_cmd () {
case "$1" in
gvimdiff|vimdiff)
*vimdiff)
if $base_present
then
"$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
@ -15,11 +15,11 @@ merge_cmd () {
"$LOCAL" "$MERGED" "$REMOTE"
fi
;;
gvimdiff2|vimdiff2)
*vimdiff2)
"$merge_tool_path" -f -d -c 'wincmd l' \
"$LOCAL" "$MERGED" "$REMOTE"
;;
gvimdiff3|vimdiff3)
*vimdiff3)
if $base_present
then
"$merge_tool_path" -f -d -c 'hid | hid | hid' \
@ -34,10 +34,13 @@ merge_cmd () {
translate_merge_tool_path() {
case "$1" in
gvimdiff|gvimdiff2|gvimdiff3)
nvimdiff*)
echo nvim
;;
gvimdiff*)
echo gvim
;;
vimdiff|vimdiff2|vimdiff3)
vimdiff*)
echo vim
;;
esac
@ -46,3 +49,11 @@ translate_merge_tool_path() {
exit_code_trustable () {
true
}
list_tool_variants () {
for prefix in '' g n; do
for suffix in '' 2 3; do
echo "${prefix}vimdiff${suffix}"
done
done
}

View file

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

View file

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