git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v6] Support auto-merge for meld to follow the vim-diff behavior

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 3, 2020, 01:50 UTC
Message-ID
<xmqqv9j5bc4o.fsf@gitster.c.googlers.com>
In-Reply-To
<pull.781.v6.git.git.1593650687697.gitgitgadget@gmail.com>
"sunlin via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 13 quoted lines
> From: Lin Sun <lin.sun@zoom.us>
>
> Make the mergetool used with "meld" backend behave similarly to how
> "vimdiff" behavior by telling it to auto-merge parts without conflicts
> and highlight the parts with conflicts when configuring
> `mergetool.meld.useAutoMerge` with `true`, or `auto` for automatically
> detecting the option.
>
> Helped-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
> Helped-by: Junio C Hamano <gitster@pobox.com>
> Helped-by: David Aguilar <davvid@gmail.com>
> Signed-off-by: Lin Sun <lin.sun@zoom.us>
> ---
Thanks.
> +mergetool.meld.useAutoMerge::
> +	Older versions of `meld` do not support the `--auto-merge` option.

I do not mind the above text at all, but I do not think it is the most important point about this configuration option. Are the readers of this manual page, at least the subset of them who are interested in using the meld backend, expected to know what 'meld' would do when given (and not given) the `--auto-merge` option?

At least, what meld does with and without `--auto-merge` briefly is more important, especially if your belief is that it is plausible that most users would prefer to use it. Something like (I am not a `meld` user, so everything I wrote after the first comma ',' in these two paragraphs may be total rubbish---I am just writing these as an illustration to show the level of details necessary to help readers decide if the option is for them)...

    When meld is given `--auto-merge`, a part of the conflicted file
    that was modified only by one side is automatically resolved to
    take that change, and a part that was touched by both sides are
    highlighted for manual conflict resolution.
    Without `--auto-merge` option given, the automatic resolution
    does not happen---all changes in the conflicted file are
    highlighted for manual conflict resolution.

Only after that, telling them "(even though you may want to use the option all the time) Older versions of `meld` do not support it" becomes relevant---for users with ancient versions of `meld`, the option, even if it is desirable, may not be available to them so it is worth warning them that they should not set it to 'true' blindly without checking with their version of `meld` first.

Show 24 quoted lines
> diff --git a/mergetools/meld b/mergetools/meld
> index 7a08470f88..5bc03f564a 100644
> --- a/mergetools/meld
> +++ b/mergetools/meld
> @@ -3,34 +3,82 @@ diff_cmd () {
>  }
>  
>  merge_cmd () {
> +	check_meld_for_features
> +
> +	option_auto_merge=
> +	if test "$meld_use_auto_merge_option" = true
>  	then
> +		option_auto_merge="--auto-merge"
>  	fi
>  
>  	if test "$meld_has_output_option" = true
>  	then
> +		"$merge_tool_path" $option_auto_merge --output="$MERGED" \
>  			"$LOCAL" "$BASE" "$REMOTE"
>  	else
> +		"$merge_tool_path" $option_auto_merge "$LOCAL" "$MERGED" "$REMOTE"
>  	fi
>  }
That's straight-forward to follow.  Good.
> +# Get meld help message
> +init_meld_help_msg () {
> +	if test -z "${meld_help_msg:+set}"
I suspect that you copied the pattern 
    if test -z "${var:+set}"

from the original, but it looks rather strange. "${var:+set}" means "if $var is set to a non-empty string, give me 'set'; otherwise give me $var". And checking if that result is an empty string with "-z" would mean you can safely write

    if test -z "$var"

no? If you are "set -u" proofing, you might write "${var-}" instead of "$var" there, but that does not change the story all that much.

Show 5 quoted lines
> +	then
> +		meld_path="$(git config mergetool.meld.path || echo meld)"
> +		meld_help_msg=$($meld_path --help 2>&1)
> +	fi
> +}

In any case, the if/then/fi makes sure we'll ask `meld` only once, which is good.

> +# Check the features and set flags
> +check_meld_for_features () {
> +	# Check whether we should use 'meld --output <file>'
> +	if test -z "${meld_has_output_option:+set}"
Likewise about "test -z ${var:+set}".
So, if we do not know yet, then...
>  	then
> +		meld_has_output_option=$(git config --bool mergetool.meld.hasOutput)
We ask "config --bool" and are prepared to see two primary cases, i.e.
> +		case "$meld_has_output_option" in
> +		true|false)
> +			: use configured value

In this case, the user may have configured, so the variable already has the right value. Good.

> +			;;
> +		*)
> +			: treat meld_has_output_option as "auto"
> +			init_meld_help_msg
Otherwise, we ask `meld`.
> +			case "$meld_help_msg" in
> +			*"--output="* | *'[OPTION...]'*)
> +				# All version that has [OPTION...] supports --output
Very good comment.
Show 9 quoted lines
> +				meld_has_output_option=true
> +				;;
> +			*)
> +				meld_has_output_option=false
> +				;;
> +			esac
> +			;;
> +		esac
> +	fi
Nicely done up to this point.
> +	# Check whether we should use 'meld --auto-merge ...'
> +	if test -z "${meld_use_auto_merge_option:+set}"
Likewise about "test -z ${var:+set}".
So, if we do not know yet, then...
Show 5 quoted lines
>  	then
> +		meld_use_auto_merge_option=$(git config mergetool.meld.useAutoMerge)
> +		case "$meld_use_auto_merge_option" in
> +		[Tt]rue|[Yy]es|[Oo]n|1)
> +			meld_use_auto_merge_option=true
This is sloppy.  TRUE is also a valid way to spell 'yes'.
    if o=$(git config --bool 2>/dev/null mergetool.meld.useautomerge)
    then
    	meld_use_auto_merge_option=$o
    elif test auto = "$(git config mergetool.meld.useautomerge)"
    then
	... auto detect ...
    else
	meld_use_auto_merge_option=false
    fi

Maybe somebody else has a clever idea to reduce the two calls into one without breaking correctness, but unfortunately I do not offhand think of a way to do this with just a single "git config" call.

Show 20 quoted lines
> +			;;
> +		auto)
> +			# testing the "--auto-merge" option only if config is "auto"
> +			init_meld_help_msg
> +
> +			case "$meld_help_msg" in
> +			*"--auto-merge"*)
> +				meld_use_auto_merge_option=true
> +				;;
> +			*)
> +				meld_use_auto_merge_option=false
> +				;;
> +			esac
> +			;;
> +		*)
> +			meld_use_auto_merge_option=false
> +			;;
> +		esac
>  	fi
>  }
Thanks.
Previous: lin.sun@zoom.usNext: lin.sun@zoom.us
Message 25 of 74 in “Enable auto-merge for meld to follow the vim-diff beharior”
  1. Enable auto-merge for meld to follow the vim-diff behariorsunlin via GitGitGadget, May 8, 2020
  2. Pratyush YadavJun 8, 2020
  3. Enable auto-merge for meld to follow the vim-diff behariorsunlin via GitGitGadget, Jun 9, 2020
  4. Enable auto-merge for meld to follow the vim-diff behariorsunlin via GitGitGadget, Jun 29, 2020
  5. Fwd: [PATCH v3] Enable auto-merge for meld to follow the vim-diff behariorGit Gadget, Jun 29, 2020
  6. Junio C HamanoJun 30, 2020
  7. David AguilarJun 30, 2020
  8. lin.sun@zoom.usJun 30, 2020
  9. Enable auto-merge for meld to follow the vim-diff behariorlin.sun@zoom.us, Jun 30, 2020
  10. Junio C HamanoJun 30, 2020
  11. Enable auto-merge for meld to follow the vim-diff behariorsunlin via GitGitGadget, Jun 30, 2020
  12. Đoàn Trần Công DanhJun 30, 2020
  13. Đoàn Trần Công DanhJun 30, 2020
  14. Enable auto-merge for meld to follow the vim-diff behariorsunlin via GitGitGadget, Jul 1, 2020
  15. lin.sun@zoom.usJul 1, 2020
  16. David AguilarJul 1, 2020
  17. Đoàn Trần Công DanhJul 1, 2020
  18. lin.sun@zoom.usJul 1, 2020
  19. lin.sun@zoom.usJul 1, 2020
  20. Đoàn Trần Công DanhJul 1, 2020
  21. Junio C HamanoJul 1, 2020
  22. lin.sun@zoom.usJul 2, 2020
  23. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 2, 2020
  24. lin.sun@zoom.usJul 2, 2020
  25. Junio C HamanoJul 3, 2020
  26. lin.sun@zoom.usJul 3, 2020
  27. Đoàn Trần Công DanhJul 3, 2020
  28. Junio C HamanoJul 6, 2020
  29. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 3, 2020
  30. Junio C HamanoJul 3, 2020
  31. lin.sun@zoom.usJul 4, 2020
  32. lin.sun@zoom.usJul 6, 2020
  33. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 4, 2020
  34. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 6, 2020
  35. Junio C HamanoJul 6, 2020
  36. lin.sun@zoom.usJul 7, 2020
  37. Junio C HamanoJul 7, 2020
  38. lin.sun@zoom.usJul 8, 2020
  39. Junio C HamanoJul 8, 2020
  40. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 7, 2020
  41. Junio C HamanoJul 7, 2020
  42. lin.sun@zoom.usJul 7, 2020
  43. lin.sun@zoom.usJul 7, 2020
  44. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 7, 2020
  45. Đoàn Trần Công DanhJul 7, 2020
  46. lin.sun@zoom.usJul 8, 2020
  47. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 8, 2020
  48. lin.sun@zoom.usJul 8, 2020
  49. Đoàn Trần Công DanhJul 8, 2020
  50. lin.sun@zoom.usJul 8, 2020
  51. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 9, 2020
  52. Support auto-merge for meld to follow the vim-diff behaviorlin.sun@zoom.us, Jul 9, 2020
  53. Junio C HamanoJul 9, 2020
  54. Junio C HamanoJul 9, 2020
  55. lin.sun@zoom.usJul 9, 2020
  56. Junio C HamanoJul 9, 2020
  57. Junio C HamanoJul 9, 2020
  58. lin.sun@zoom.usJul 12, 2020
  59. lin.sun@zoom.usJul 12, 2020
  60. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 9, 2020
  61. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 12, 2020
  62. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 12, 2020
  63. Junio C HamanoJul 12, 2020
  64. lin.sun@zoom.usJul 12, 2020
  65. Junio C HamanoJul 13, 2020
  66. lin.sun@zoom.usJul 13, 2020
  67. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Jul 12, 2020
  68. Junio C HamanoJul 24, 2020
  69. Junio C HamanoSep 3, 2020
  70. Support auto-merge for meld to follow the vim-diff behaviorsunlin via GitGitGadget, Sep 12, 2020
  71. Junio C HamanoSep 14, 2020
  72. Lin SunSep 15, 2020
  73. Lin SunSep 9, 2020
  74. Junio C HamanoSep 9, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.