* [PATCH] Support nvim as mergetool
@ 2020-07-18 19:20 pudinha
2020-07-18 20:30 ` Junio C Hamano
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: pudinha @ 2020-07-18 19:20 UTC (permalink / raw)
To: git; +Cc: pudinha
---
Hello giters! Hope you are well!
I made this little patch to support nvim as a merge tool. What do you
think?
Best regards,
Pudinha <3
mergetools/nvimdiff | 1 +
mergetools/nvimdiff2 | 1 +
mergetools/nvimdiff3 | 1 +
mergetools/vimdiff | 9 ++++++---
4 files changed, 9 insertions(+), 3 deletions(-)
create mode 100644 mergetools/nvimdiff
create mode 100644 mergetools/nvimdiff2
create mode 100644 mergetools/nvimdiff3
diff --git a/mergetools/nvimdiff b/mergetools/nvimdiff
new file mode 100644
index 0000000000..04a5bb0ea8
--- /dev/null
+++ b/mergetools/nvimdiff
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/nvimdiff2 b/mergetools/nvimdiff2
new file mode 100644
index 0000000000..04a5bb0ea8
--- /dev/null
+++ b/mergetools/nvimdiff2
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/nvimdiff3 b/mergetools/nvimdiff3
new file mode 100644
index 0000000000..04a5bb0ea8
--- /dev/null
+++ b/mergetools/nvimdiff3
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
index 10d86f3e19..be559062ee 100644
--- a/mergetools/vimdiff
+++ b/mergetools/vimdiff
@@ -5,7 +5,7 @@ diff_cmd () {
merge_cmd () {
case "$1" in
- gvimdiff|vimdiff)
+ nvimdiff|gvimdiff|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)
+ nvimdiff2|gvimdiff2|vimdiff2)
"$merge_tool_path" -f -d -c 'wincmd l' \
"$LOCAL" "$MERGED" "$REMOTE"
;;
- gvimdiff3|vimdiff3)
+ nvimdiff3|gvimdiff3|vimdiff3)
if $base_present
then
"$merge_tool_path" -f -d -c 'hid | hid | hid' \
@@ -34,6 +34,9 @@ merge_cmd () {
translate_merge_tool_path() {
case "$1" in
+ nvimdiff|nvimdiff2|nvimdiff3)
+ echo nvim
+ ;;
gvimdiff|gvimdiff2|gvimdiff3)
echo gvim
;;
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] Support nvim as mergetool
2020-07-18 19:20 [PATCH] Support nvim as mergetool pudinha
@ 2020-07-18 20:30 ` Junio C Hamano
2020-07-19 4:23 ` [PATCH v2 0/2] Support nvim as merge tool pudinha
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: Junio C Hamano @ 2020-07-18 20:30 UTC (permalink / raw)
To: pudinha; +Cc: git
pudinha <rogi@skylittlesystem.org> writes:
> ---
> Hello giters! Hope you are well!
>
> I made this little patch to support nvim as a merge tool. What do you
> think?
Uninspiring.
But that is not your fault.
The way vimdiff, vimdiff2 and vimdiff3 waste one file for each just
to have a different name is simply bad, and the way it was extended
to cover gvimdiff family is even more horrible. This patch makes
the existing mess even worse. That part is your fault, I'd have to
say.
I'd rather see us explore ways to improve the current arrangement
used to support these 6 variants before adding yet another 3 new
ones.
For example, we could add another method the backends could define,
call it list_tool_variants, and whenever the control flow goes from
run_merge_tool through setup_tool for a tool whose name ends with
[1-9], e.g. "foomerge3", we first see if there is "foomerge" tool
and if there is ask it if it knows about "foomerge3" variant by
calling its list_tool_variants.
That way, we probably can remove the files for vimdiff2, vimdiff3,
gvimdiff2 and gvimdiff3 (gvimdiff needs to stay there, as we do not
want to make the name derivation rule too complex) only to hold a
single line ". vimdiff". Then the next person who adds yet another
set of backends based on a yet another reimplementation or skin of
vim would only have to add a single file in mergetools/ directory,
not three.
Hmm?
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 0/2] Support nvim as merge tool
2020-07-18 19:20 [PATCH] Support nvim as mergetool pudinha
2020-07-18 20:30 ` Junio C Hamano
@ 2020-07-19 4:23 ` pudinha
2020-07-29 21:31 ` [PATCH v3 0/2] mergetools: add support for nvimdiff (neovim) family pudinha
2020-07-19 4:23 ` [PATCH v2 1/2] Refactor vimdiff and bc merge tool variants pudinha
2020-07-19 4:23 ` [PATCH v2 2/2] Support nvim as merge tool pudinha
3 siblings, 1 reply; 10+ messages in thread
From: pudinha @ 2020-07-19 4:23 UTC (permalink / raw)
To: git; +Cc: pudinha, Junio C Hamano
> For example, we could add another method the backends could define,
> call it list_tool_variants, and whenever the control flow goes from
> run_merge_tool through setup_tool for a tool whose name ends with
> [1-9], e.g. "foomerge3", we first see if there is "foomerge" tool
> and if there is ask it if it knows about "foomerge3" variant by
> calling its list_tool_variants.
>
> That way, we probably can remove the files for vimdiff2, vimdiff3,
> gvimdiff2 and gvimdiff3 (gvimdiff needs to stay there, as we do not
> want to make the name derivation rule too complex) only to hold a
> single line ". vimdiff". Then the next person who adds yet another
> set of backends based on a yet another reimplementation or skin of
> vim would only have to add a single file in mergetools/ directory,
> not three.
This is what I managed to do.
pudinha (2):
Refactor vimdiff and bc merge tool variants
Support nvim as merge tool
contrib/completion/git-completion.bash | 4 +--
git-mergetool--lib.sh | 35 ++++++++++++++++++++------
mergetools/bc | 5 ++++
mergetools/bc3 | 1 -
mergetools/gvimdiff3 | 1 -
mergetools/{gvimdiff2 => nvimdiff} | 0
mergetools/vimdiff | 21 ++++++++++++----
mergetools/vimdiff2 | 1 -
mergetools/vimdiff3 | 1 -
9 files changed, 51 insertions(+), 18 deletions(-)
delete mode 100644 mergetools/bc3
delete mode 100644 mergetools/gvimdiff3
rename mergetools/{gvimdiff2 => nvimdiff} (100%)
delete mode 100644 mergetools/vimdiff2
delete mode 100644 mergetools/vimdiff3
--
2.27.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/2] Refactor vimdiff and bc merge tool variants
2020-07-18 19:20 [PATCH] Support nvim as mergetool pudinha
2020-07-18 20:30 ` Junio C Hamano
2020-07-19 4:23 ` [PATCH v2 0/2] Support nvim as merge tool pudinha
@ 2020-07-19 4:23 ` pudinha
2020-07-20 18:51 ` Junio C Hamano
2020-07-19 4:23 ` [PATCH v2 2/2] Support nvim as merge tool pudinha
3 siblings, 1 reply; 10+ messages in thread
From: pudinha @ 2020-07-19 4:23 UTC (permalink / raw)
To: git; +Cc: pudinha
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.
This patch allows 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.
---
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
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 204a5acd66..29fecc340f 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -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
diff --git a/mergetools/bc b/mergetools/bc
index 3a69e60faa..a89086ee72 100644
--- a/mergetools/bc
+++ b/mergetools/bc
@@ -21,3 +21,8 @@ translate_merge_tool_path() {
echo bcompare
fi
}
+
+list_tool_variants () {
+ echo bc
+ echo bc3
+}
diff --git a/mergetools/bc3 b/mergetools/bc3
deleted file mode 100644
index 5d8dd48184..0000000000
--- a/mergetools/bc3
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/bc"
diff --git a/mergetools/gvimdiff2 b/mergetools/gvimdiff2
deleted file mode 100644
index 04a5bb0ea8..0000000000
--- a/mergetools/gvimdiff2
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/gvimdiff3 b/mergetools/gvimdiff3
deleted file mode 100644
index 04a5bb0ea8..0000000000
--- a/mergetools/gvimdiff3
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
index 10d86f3e19..3925e1fc3e 100644
--- a/mergetools/vimdiff
+++ b/mergetools/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
+}
diff --git a/mergetools/vimdiff2 b/mergetools/vimdiff2
deleted file mode 100644
index 04a5bb0ea8..0000000000
--- a/mergetools/vimdiff2
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/vimdiff3 b/mergetools/vimdiff3
deleted file mode 100644
index 04a5bb0ea8..0000000000
--- a/mergetools/vimdiff3
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/2] Support nvim as merge tool
2020-07-18 19:20 [PATCH] Support nvim as mergetool pudinha
` (2 preceding siblings ...)
2020-07-19 4:23 ` [PATCH v2 1/2] Refactor vimdiff and bc merge tool variants pudinha
@ 2020-07-19 4:23 ` pudinha
2020-07-20 18:52 ` Junio C Hamano
3 siblings, 1 reply; 10+ messages in thread
From: pudinha @ 2020-07-19 4:23 UTC (permalink / raw)
To: git; +Cc: pudinha
---
contrib/completion/git-completion.bash | 4 ++--
git-mergetool--lib.sh | 7 +++++--
mergetools/nvimdiff | 1 +
mergetools/vimdiff | 15 +++++++++------
4 files changed, 17 insertions(+), 10 deletions(-)
create mode 100644 mergetools/nvimdiff
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index ee468ea3b0..aed08f8df5 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -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 ()
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 29fecc340f..2defef28cd 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -304,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
}
diff --git a/mergetools/nvimdiff b/mergetools/nvimdiff
new file mode 100644
index 0000000000..04a5bb0ea8
--- /dev/null
+++ b/mergetools/nvimdiff
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
index 3925e1fc3e..abc8ce4ec4 100644
--- a/mergetools/vimdiff
+++ b/mergetools/vimdiff
@@ -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
@@ -48,7 +51,7 @@ exit_code_trustable () {
}
list_tool_variants () {
- for prefix in '' g; do
+ for prefix in '' g n; do
for suffix in '' 2 3; do
echo "${prefix}vimdiff${suffix}"
done
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] Refactor vimdiff and bc merge tool variants
2020-07-19 4:23 ` [PATCH v2 1/2] Refactor vimdiff and bc merge tool variants pudinha
@ 2020-07-20 18:51 ` Junio C Hamano
0 siblings, 0 replies; 10+ messages in thread
From: Junio C Hamano @ 2020-07-20 18:51 UTC (permalink / raw)
To: pudinha; +Cc: git
pudinha <rogi@skylittlesystem.org> writes:
> Subject: Re: [PATCH v2 1/2] Refactor vimdiff and bc merge tool variants
cf. https://git-scm.com/docs/SubmittingPatches#describe-changes
Two tricks to pick a good title are:
- Read a pageful or two of "git shortlog --no-merges" output to get
accustomed to the general pattern in the entire project. It
would become clear why titles with "area:" prefix help the
patches with them easier to locate.
- Read a pageful of "git shortlog --no-merges -- mergetools"
(i.e. the same but limited to the files you are touching) to see
how the changes that contributed over time to build the subsystem
are called, so that the new patches can fit in the pattern.
> 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.
>
> This patch allows 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.
Well explained. The final paragraph could be made more in line with
the existing commit log messages by writing in the imperative mood
(e.g. "Introduce a new list_tool_variants method, and when a tool
whose name ends with a digit is asked for, and if there is no such
script in mergetools/ directoroy, ask the tool with the name without
the final digit, if exists, if it knows how to handle the variant.
That way, instead of 5 scriptss, ..."), but what is written above is
already good enough.
> ---
cf. https://git-scm.com/docs/SubmittingPatches#sign-off
Thanks.
> 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
>
> diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
> index 204a5acd66..29fecc340f 100644
> --- a/git-mergetool--lib.sh
> +++ b/git-mergetool--lib.sh
> @@ -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
Nice---if the thing has a custom script in mergetools/ then we do
not do anything special, but if a script is missing for a tool whose
name ends with a digit, and a script exists for a tool with the same
name without that digit, we try to use that instead, and we make
sure it does support the named variant or bail out later...
> 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
... like this. Excellent.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/2] Support nvim as merge tool
2020-07-19 4:23 ` [PATCH v2 2/2] Support nvim as merge tool pudinha
@ 2020-07-20 18:52 ` Junio C Hamano
0 siblings, 0 replies; 10+ messages in thread
From: Junio C Hamano @ 2020-07-20 18:52 UTC (permalink / raw)
To: pudinha; +Cc: git
pudinha <rogi@skylittlesystem.org> writes:
> Subject: Re: [PATCH v2 2/2] Support nvim as merge tool
Perhaps "mergetools: add support for nvimdiff family" or something
along that line.
> ---
Missing sign-off.
Thanks.
> contrib/completion/git-completion.bash | 4 ++--
> git-mergetool--lib.sh | 7 +++++--
> mergetools/nvimdiff | 1 +
> mergetools/vimdiff | 15 +++++++++------
> 4 files changed, 17 insertions(+), 10 deletions(-)
> create mode 100644 mergetools/nvimdiff
>
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index ee468ea3b0..aed08f8df5 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -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 ()
> diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
> index 29fecc340f..2defef28cd 100644
> --- a/git-mergetool--lib.sh
> +++ b/git-mergetool--lib.sh
> @@ -304,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
> }
> diff --git a/mergetools/nvimdiff b/mergetools/nvimdiff
> new file mode 100644
> index 0000000000..04a5bb0ea8
> --- /dev/null
> +++ b/mergetools/nvimdiff
> @@ -0,0 +1 @@
> +. "$MERGE_TOOLS_DIR/vimdiff"
> diff --git a/mergetools/vimdiff b/mergetools/vimdiff
> index 3925e1fc3e..abc8ce4ec4 100644
> --- a/mergetools/vimdiff
> +++ b/mergetools/vimdiff
> @@ -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
> @@ -48,7 +51,7 @@ exit_code_trustable () {
> }
>
> list_tool_variants () {
> - for prefix in '' g; do
> + for prefix in '' g n; do
> for suffix in '' 2 3; do
> echo "${prefix}vimdiff${suffix}"
> done
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 0/2] mergetools: add support for nvimdiff (neovim) family
2020-07-19 4:23 ` [PATCH v2 0/2] Support nvim as merge tool pudinha
@ 2020-07-29 21:31 ` pudinha
2020-07-29 21:31 ` [PATCH v3 1/2] mergetool--lib: improve support for vimdiff-style tool variants pudinha
2020-07-29 21:31 ` [PATCH v3 2/2] mergetools: add support for nvimdiff (neovim) family pudinha
0 siblings, 2 replies; 10+ messages in thread
From: pudinha @ 2020-07-29 21:31 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano, pudinha
Junio,
thanks for your time. I think I addressed all your comments regarding
the commit messages. One of them is a bit long, but I saw some others
are too and I'd rather have it long than not descriptive enough.
Please, let me know if anything else needs changing.
Best regards
pudinha (2):
mergetool--lib: improve support for vimdiff-style tool variants
mergetools: add support for nvimdiff (neovim) family
contrib/completion/git-completion.bash | 4 +--
git-mergetool--lib.sh | 35 ++++++++++++++++++++------
mergetools/bc | 5 ++++
mergetools/bc3 | 1 -
mergetools/gvimdiff3 | 1 -
mergetools/{gvimdiff2 => nvimdiff} | 0
mergetools/vimdiff | 21 ++++++++++++----
mergetools/vimdiff2 | 1 -
mergetools/vimdiff3 | 1 -
9 files changed, 51 insertions(+), 18 deletions(-)
delete mode 100644 mergetools/bc3
delete mode 100644 mergetools/gvimdiff3
rename mergetools/{gvimdiff2 => nvimdiff} (100%)
delete mode 100644 mergetools/vimdiff2
delete mode 100644 mergetools/vimdiff3
--
2.28.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 1/2] mergetool--lib: improve support for vimdiff-style tool variants
2020-07-29 21:31 ` [PATCH v3 0/2] mergetools: add support for nvimdiff (neovim) family pudinha
@ 2020-07-29 21:31 ` pudinha
2020-07-29 21:31 ` [PATCH v3 2/2] mergetools: add support for nvimdiff (neovim) family pudinha
1 sibling, 0 replies; 10+ messages in thread
From: pudinha @ 2020-07-29 21:31 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano, pudinha
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
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 204a5acd66..29fecc340f 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -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
diff --git a/mergetools/bc b/mergetools/bc
index 3a69e60faa..a89086ee72 100644
--- a/mergetools/bc
+++ b/mergetools/bc
@@ -21,3 +21,8 @@ translate_merge_tool_path() {
echo bcompare
fi
}
+
+list_tool_variants () {
+ echo bc
+ echo bc3
+}
diff --git a/mergetools/bc3 b/mergetools/bc3
deleted file mode 100644
index 5d8dd48184..0000000000
--- a/mergetools/bc3
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/bc"
diff --git a/mergetools/gvimdiff2 b/mergetools/gvimdiff2
deleted file mode 100644
index 04a5bb0ea8..0000000000
--- a/mergetools/gvimdiff2
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/gvimdiff3 b/mergetools/gvimdiff3
deleted file mode 100644
index 04a5bb0ea8..0000000000
--- a/mergetools/gvimdiff3
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
index 10d86f3e19..3925e1fc3e 100644
--- a/mergetools/vimdiff
+++ b/mergetools/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
+}
diff --git a/mergetools/vimdiff2 b/mergetools/vimdiff2
deleted file mode 100644
index 04a5bb0ea8..0000000000
--- a/mergetools/vimdiff2
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/vimdiff3 b/mergetools/vimdiff3
deleted file mode 100644
index 04a5bb0ea8..0000000000
--- a/mergetools/vimdiff3
+++ /dev/null
@@ -1 +0,0 @@
-. "$MERGE_TOOLS_DIR/vimdiff"
--
2.28.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 2/2] mergetools: add support for nvimdiff (neovim) family
2020-07-29 21:31 ` [PATCH v3 0/2] mergetools: add support for nvimdiff (neovim) family pudinha
2020-07-29 21:31 ` [PATCH v3 1/2] mergetool--lib: improve support for vimdiff-style tool variants pudinha
@ 2020-07-29 21:31 ` pudinha
1 sibling, 0 replies; 10+ messages in thread
From: pudinha @ 2020-07-29 21:31 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano, pudinha
Signed-off-by: pudinha <rogi@skylittlesystem.org>
---
contrib/completion/git-completion.bash | 4 ++--
git-mergetool--lib.sh | 7 +++++--
mergetools/nvimdiff | 1 +
mergetools/vimdiff | 15 +++++++++------
4 files changed, 17 insertions(+), 10 deletions(-)
create mode 100644 mergetools/nvimdiff
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index ee468ea3b0..aed08f8df5 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -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 ()
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index 29fecc340f..2defef28cd 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -304,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
}
diff --git a/mergetools/nvimdiff b/mergetools/nvimdiff
new file mode 100644
index 0000000000..04a5bb0ea8
--- /dev/null
+++ b/mergetools/nvimdiff
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
index 3925e1fc3e..abc8ce4ec4 100644
--- a/mergetools/vimdiff
+++ b/mergetools/vimdiff
@@ -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
@@ -48,7 +51,7 @@ exit_code_trustable () {
}
list_tool_variants () {
- for prefix in '' g; do
+ for prefix in '' g n; do
for suffix in '' 2 3; do
echo "${prefix}vimdiff${suffix}"
done
--
2.28.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-07-29 21:33 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-18 19:20 [PATCH] Support nvim as mergetool pudinha
2020-07-18 20:30 ` Junio C Hamano
2020-07-19 4:23 ` [PATCH v2 0/2] Support nvim as merge tool pudinha
2020-07-29 21:31 ` [PATCH v3 0/2] mergetools: add support for nvimdiff (neovim) family pudinha
2020-07-29 21:31 ` [PATCH v3 1/2] mergetool--lib: improve support for vimdiff-style tool variants pudinha
2020-07-29 21:31 ` [PATCH v3 2/2] mergetools: add support for nvimdiff (neovim) family pudinha
2020-07-19 4:23 ` [PATCH v2 1/2] Refactor vimdiff and bc merge tool variants pudinha
2020-07-20 18:51 ` Junio C Hamano
2020-07-19 4:23 ` [PATCH v2 2/2] Support nvim as merge tool pudinha
2020-07-20 18:52 ` Junio C Hamano
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).