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

Re: [PATCH v5] Enable auto-merge for meld to follow the vim-diff beharior

From
Đoàn Trần Công Danh <congdanhqx@gmail.com>
Date
Jul 1, 2020, 14:17 UTC
Message-ID
<20200701141755.GB1966@danh.dev>
In-Reply-To
<pull.781.v5.git.git.1593587206520.gitgitgadget@gmail.com>
On 2020-07-01 07:06:46+0000, sunlin via GitGitGadget <gitgitgadget@gmail.com> wrote:
Show 21 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.hasAutoMerge` with `true`, or `auto` for
> automatically detecting the option.
> 
> Signed-off-by: Lin Sun <lin.sun@zoom.us>
> ---
> diff --git a/Documentation/config/mergetool.txt b/Documentation/config/mergetool.txt
> index 09ed31dbfa..9a74bd98dc 100644
> --- a/Documentation/config/mergetool.txt
> +++ b/Documentation/config/mergetool.txt
> @@ -30,6 +30,14 @@ mergetool.meld.hasOutput::
>  	to `true` tells Git to unconditionally use the `--output` option,
>  	and `false` avoids using `--output`.
>  
> +mergetool.meld.hasAutoMerge::
> +	Older versions of `meld` do not support the `--auto-merge` option.
> +	Setting `mergetool.meld.hasOutput` to `true` tells Git to
s/hasOutput/hasAutoMerge/
Bikeshed opinion: I don't know if hasAutoMerge is a good name :)
Show 46 quoted lines
> +	unconditionally use the `--auto-merge` option, and `false` avoids using
> +	`--auto-merge`, and `auto` detect whether `meld` supports `--auto-merge`
> +	by inspecting the output of `meld --help`, otherwise, follow meld's
> +	default behavior.
> +
>  mergetool.keepBackup::
>  	After performing a merge, the original file with conflict markers
>  	can be saved as a file with a `.orig` extension.  If this variable
> diff --git a/mergetools/meld b/mergetools/meld
> index 7a08470f88..9ee835b1e5 100644
> --- a/mergetools/meld
> +++ b/mergetools/meld
> @@ -3,34 +3,74 @@ diff_cmd () {
>  }
>  
>  merge_cmd () {
> -	if test -z "${meld_has_output_option:+set}"
> +	check_meld_for_features
> +
> +	option_auto_merge=
> +	if test "$meld_has_auto_merge_option" = true
>  	then
> -		check_meld_for_output_version
> +		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
>  }
>  
> -# Check whether we should use 'meld --output <file>'
> -check_meld_for_output_version () {
> -	meld_path="$(git config mergetool.meld.path)"
> -	meld_path="${meld_path:-meld}"
> +# Get meld help message
> +get_meld_help_msg () {
> +	meld_path="$(git config mergetool.meld.path || echo meld)"
> +	$meld_path --help 2>&1
> +}

I'm actually prefer this change in 2 separated patches to reduce noise. But given that mergetool/meld doesn't attract much attention, I don't know.

Show 13 quoted lines
>  
> -	if meld_has_output_option=$(git config --bool mergetool.meld.hasOutput)
> +# 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}"
>  	then
> -		: use configured value
> -	elif "$meld_path" --help 2>&1 |
> -		grep -e '--output=' -e '\[OPTION\.\.\.\]' >/dev/null
> +		meld_has_output_option=$(git config --bool mergetool.meld.hasOutput)
> +		if test "$meld_has_output_option" = true -o \
> +			"$meld_has_output_option" = false

The coding guideline seems to not like "test -o". I think it's acceptable in this case since we control its input. The output is comming out of "git config --bool" anyway, so meld_has_output_option must be either "", "true", or "false"

I think we're better to do this instead:
	if test -n "$meld_has_output_option"
	then
		: use configured output
	else
		: messing with help
	fi
Show 8 quoted lines
> +		then
> +			: use configured value
> +		else
> +			# treat meld_has_output_option as "auto"
> +			if test -z "$meld_help_msg"
> +			then
> +				meld_help_msg="$(get_meld_help_msg)"
> +			fi
If I were writing this patch, I probably changed get_meld_help_msg to
	init_meld_help_msg () {
		if test -z "$meld_help_msg"
		then
			meld_path="$(git config mergetool.meld.path || echo meld)"
			meld_help_msg=$($meld_path --help 2>&1)
		fi
	}

And call init_meld_help_msg unconditionally here, (and in --auto-merge arm below, maybe other arms in the future).

I'm writing without much thought into this, please take my word with a grain of salt :)

> +}
> +
> +			case "$meld_help_msg" in
> +				*"--output="* | *"[OPTION"???"]"*)

I think Git project prefer aligning case arm with case, IOW, move left 1 TAB.

> +					# old ones mention --output and new ones just say OPTION...
> +					meld_has_output_option=true ;;

It's nice to see this update, good. The comment is no longer correct, though. The version 3.20.2 has --output but not OPTIONS.

It's not introduced by your change, but I think it's better to say:
	# All versions that has [OPTIONS???] supports --output
Show 14 quoted lines
> +				*)
> +					meld_has_output_option=false ;;
> +			esac
> +		fi
> +	fi
> +	# Check whether we should use 'meld --auto-merge ...'
> +	if test -z "${meld_has_auto_merge_option:+set}"
>  	then
> -		: old ones mention --output and new ones just say OPTION...
> -		meld_has_output_option=true
> -	else
> -		meld_has_output_option=false
> +		meld_has_auto_merge_option=$(git config mergetool.meld.hasAutoMerge)
> +		if test "$meld_has_auto_merge_option" = auto

Since we don't canonicallise to bool output of mergetool.meld.hasAutoMerge, I think we would need:

	case "$meld_has_auto_merge_option" in
	[Tt]rue|[Yy]es|[Oo]n)
		meld_has_auto_merge_option=true ;;
	auto)
		: this shenanigan ;;
	esac
But, that's a bit messy. Let's see other's opinions.
Show 10 quoted lines
> +		then
> +			# testing the "--auto-merge" option only if config is "auto"
> +			if test -z "$meld_help_msg"
> +			then
> +					meld_help_msg="$(get_meld_help_msg)"
> +			fi
> +
> +			case "$meld_help_msg" in
> +				*"--auto-merge"*)
> +					: old ones mention --output and new ones just say OPTION...
This comment doesn't apply here.
Show 11 quoted lines
> +					meld_has_auto_merge_option=true ;;
> +				*)
> +					meld_has_auto_merge_option=false ;;
> +			esac
> +		fi
>  	fi
>  }
> 
> base-commit: 07d8ea56f2ecb64b75b92264770c0a664231ce17
> -- 
> gitgitgadget
-- 
Danh
Previous: David AguilarNext: lin.sun@zoom.us
Message 17 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.