[v3] Enable auto-merge for meld to follow the vim-diff beharior
diff mbox series

Message ID CANg4QoHZS0o5k_qb8BEW0yGUc8xQXSKPVA4-BHBcQkOEzO=D6Q@mail.gmail.com
State New
Headers show
Series
  • [v3] Enable auto-merge for meld to follow the vim-diff beharior
Related show

Commit Message

Abhishek Kumar via GitGitGadget June 29, 2020, 12:32 p.m. UTC
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(-)


@@ -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

Patch
diff mbox series

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
 }