Skip to content

Commit

Permalink
Merge branch 'pd/mergetool-nvimdiff'
Browse files Browse the repository at this point in the history
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
  • Loading branch information
gitster committed Aug 18, 2020
2 parents 95c687b + 1186897 commit 873fa13
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 18 deletions.
4 changes: 2 additions & 2 deletions contrib/completion/git-completion.bash
Original file line number Diff line number Diff line change
Expand Up @@ -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 ()
Expand Down
35 changes: 28 additions & 7 deletions git-mergetool--lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
}
Expand Down
5 changes: 5 additions & 0 deletions mergetools/bc
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,8 @@ translate_merge_tool_path() {
echo bcompare
fi
}

list_tool_variants () {
echo bc
echo bc3
}
1 change: 0 additions & 1 deletion mergetools/bc3

This file was deleted.

1 change: 0 additions & 1 deletion mergetools/gvimdiff3

This file was deleted.

File renamed without changes.
21 changes: 16 additions & 5 deletions mergetools/vimdiff
Original file line number Diff line number Diff line change
Expand Up @@ -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' \
Expand All @@ -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' \
Expand All @@ -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
Expand All @@ -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
}
1 change: 0 additions & 1 deletion mergetools/vimdiff2

This file was deleted.

1 change: 0 additions & 1 deletion mergetools/vimdiff3

This file was deleted.

0 comments on commit 873fa13

Please sign in to comment.