Fwd: [PATCH v3] Enable auto-merge for meld to follow the vim-diff beharior
- From
- Git Gadget <gitgitgadget@gmail.com>
- Date
- Jun 29, 2020, 12:32 UTC
- Message-ID
- <CANg4QoHZS0o5k_qb8BEW0yGUc8xQXSKPVA4-BHBcQkOEzO=D6Q@mail.gmail.com>
- In-Reply-To
- <pull.781.v3.git.git.1593414441313.gitgitgadget@gmail.com>
Re-sending, as this mail seems to have been dropped by vger.
---------- Forwarded message --------- From: sunlin via GitGitGadget <gitgitgadget@gmail.com> Date: Mon, Jun 29, 2020 at 9:07 AM Subject: [PATCH v3] Enable auto-merge for meld to follow the vim-diff beharior To: <git@vger.kernel.org> Cc: sunlin <sunlin7@yahoo.com>, lin.sun <lin.sun@zoom.us>
From: "lin.sun" <lin.sun@zoom.us>
The mergetool "meld" does NOT merge the no-conflict changes, while the mergetool "vimdiff" will merge the no-conflict parts and highlight the conflict parts. This patch will make the mergetool "meld" similar to "vimdiff", auto-merge the no-conflict parts, highlight conflict parts.
Signed-off-by: Lin Sun <lin.sun@zoom.us>
---
Enable auto-merge for meld to follow the vimdiff beharior Hi, the mergetool "meld" does NOT merge the no-conflict changes, while
the mergetool "vimdiff" will merge the no-conflict changes and highlight
the conflict parts. This patch will make the mergetool "meld" similar to
"vimdiff", auto-merge the no-conflict changes, highlight conflict parts.Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-781%2Fsunlin7%2Fmaster-v3 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-781/sunlin7/master-v3 Pull-Request: https://github.com/git/git/pull/781
Range-diff vs v2:
1: 6e98a10bfa ! 1: 3b70fd0bfc Enable auto-merge for meld to follow
the vim-diff beharior
@@ Commit message ## mergetools/meld ##
@@ mergetools/meld: merge_cmd () {
+ then
+ check_meld_for_output_version
+ fi
++ if test -z "${meld_has_auto_merge_option:+set}"
++ then
++ check_meld_for_auto_merge_version
++ fi
++
++ option_auto_merge=
++ if test "$meld_has_auto_merge_option" = true
++ then
++ option_auto_merge="--auto-merge"
++ fi if test "$meld_has_output_option" = true
then
- "$merge_tool_path" --output="$MERGED" \
-+ "$merge_tool_path" --auto-merge --output="$MERGED" \
++ "$merge_tool_path" $option_auto_merge --output="$MERGED" \
"$LOCAL" "$BASE" "$REMOTE"
else
- "$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE"
-+ "$merge_tool_path" --auto-merge "$LOCAL" "$MERGED" "$REMOTE"
++ "$merge_tool_path" $option_auto_merge "$LOCAL"
"$MERGED" "$REMOTE"
fi
} +@@ mergetools/meld: check_meld_for_output_version () {
+ meld_has_output_option=false
+ fi
+ }
++
++# Check whether we should use 'meld --auto-merge ...'
++check_meld_for_auto_merge_version () {
++ meld_path="$(git config mergetool.meld.path)"
++ meld_path="${meld_path:-meld}"
++
++ if meld_has_auto_merge_option=$(git config --bool
mergetool.meld.hasAutoMerge)
++ then
++ : use configured value
++ elif "$meld_path" --help 2>&1 |
++ grep -e '--auto-merge' -e '\[OPTION\.\.\.\]' >/dev/null
++ then
++ : old ones mention --auto-merge and new ones just say OPTION...
++ meld_has_auto_merge_option=true
++ else
++ meld_has_auto_merge_option=false
++ fi
++}mergetools/meld | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/mergetools/meld b/mergetools/meld index 7a08470f88..91b65ff22c 100644 --- a/mergetools/meld +++ b/mergetools/meld @@ -7,13 +7,23 @@ merge_cmd () { then check_meld_for_output_version fi + if test -z "${meld_has_auto_merge_option:+set}" + then + check_meld_for_auto_merge_version + fi + + option_auto_merge= + if test "$meld_has_auto_merge_option" = true + then + option_auto_merge="--auto-merge" + fi if test "$meld_has_output_option" = true then - "$merge_tool_path" --output="$MERGED" \ + "$merge_tool_path" $option_auto_merge --output="$MERGED" \ "$LOCAL" "$BASE" "$REMOTE" else - "$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE" + "$merge_tool_path" $option_auto_merge "$LOCAL" "$MERGED" "$REMOTE" fi } @@ -34,3 +44,21 @@ check_meld_for_output_version () { meld_has_output_option=false fi } + +# Check whether we should use 'meld --auto-merge ...' +check_meld_for_auto_merge_version () { + meld_path="$(git config mergetool.meld.path)" + meld_path="${meld_path:-meld}" + + if meld_has_auto_merge_option=$(git config --bool mergetool.meld.hasAutoMerge) + then + : use configured value + elif "$meld_path" --help 2>&1 | + grep -e '--auto-merge' -e '\[OPTION\.\.\.\]' >/dev/null + then + : old ones mention --auto-merge and new ones just say OPTION... + meld_has_auto_merge_option=true + else + meld_has_auto_merge_option=false + fi +} base-commit: 07d8ea56f2ecb64b75b92264770c0a664231ce17 -- gitgitgadget