All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Izzy via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Izzy <winglovet@gmail.com>,
	Elijah Newren <newren@gmail.com>
Subject: Re: [PATCH] merge-tree: add -X strategy option
Date: Sun, 06 Aug 2023 19:10:57 -0700	[thread overview]
Message-ID: <xmqqfs4vioum.fsf@gitster.g> (raw)
In-Reply-To: <pull.1565.git.1691245481977.gitgitgadget@gmail.com> (Izzy via GitGitGadget's message of "Sat, 05 Aug 2023 14:24:41 +0000")

"Izzy via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: winglovet <winglovet@gmail.com>
>
> Add merge strategy option to produce more customizable merge result such
> as automatically solve conflicts.
>
> Signed-off-by: winglovet <winglovet@gmail.com>

cf. Documentation/SubmittingPatches::[real-name], a part of the DCO
section of the document.

>  builtin/merge-tree.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)

A new feature should be protected by new tests to make sure it will
not be broken accidentally by others.  Probably a couple of new
tests to both t4300 and t4301?

$ git shortlog -sn --no-merges --since=6.months builtin/merge-tree.c t/t430[01]*.sh

tells me that Elijah and Ævar had been active, but by looking at the
output of

$ git log --author=Ævar --since=6.months builtin/merge-tree.c t/t430[01]*.sh

shows that the contribution by the latter was solely about code
clean-up with Coccinelle and not about code features and correctness,
so for a new-feature change like this, I'd ask comments by Elijah if
I were writing this patch.

Thanks.

> diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
> index 0de42aecf4b..2ec6ec0d39a 100644
> --- a/builtin/merge-tree.c
> +++ b/builtin/merge-tree.c
> @@ -19,6 +19,8 @@
>  #include "tree.h"
>  #include "config.h"
>  
> +static const char **xopts;
> +static size_t xopts_nr, xopts_alloc;
>  static int line_termination = '\n';
>  
>  struct merge_list {
> @@ -414,6 +416,7 @@ struct merge_tree_options {
>  	int show_messages;
>  	int name_only;
>  	int use_stdin;
> +	struct merge_options merge_options;
>  };
>  
>  static int real_merge(struct merge_tree_options *o,
> @@ -439,6 +442,8 @@ static int real_merge(struct merge_tree_options *o,
>  
>  	init_merge_options(&opt, the_repository);
>  
> +	opt.recursive_variant = o->merge_options.recursive_variant;
> +
>  	opt.show_rename_progress = 0;
>  
>  	opt.branch1 = branch1;
> @@ -510,6 +515,17 @@ static int real_merge(struct merge_tree_options *o,
>  	return !result.clean; /* result.clean < 0 handled above */
>  }
>  
> +static int option_parse_x(const struct option *opt,
> +			  const char *arg, int unset)
> +{
> +	if (unset)
> +		return 0;
> +
> +	ALLOC_GROW(xopts, xopts_nr + 1, xopts_alloc);
> +	xopts[xopts_nr++] = xstrdup(arg);
> +	return 0;
> +}
> +
>  int cmd_merge_tree(int argc, const char **argv, const char *prefix)
>  {
>  	struct merge_tree_options o = { .show_messages = -1 };
> @@ -548,6 +564,10 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
>  			   &merge_base,
>  			   N_("commit"),
>  			   N_("specify a merge-base for the merge")),
> +		OPT_CALLBACK('X', "strategy-option", &xopts,
> +			N_("option=value"),
> +			N_("option for selected merge strategy"),
> +			option_parse_x),
>  		OPT_END()
>  	};
>  
> @@ -556,6 +576,10 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
>  	argc = parse_options(argc, argv, prefix, mt_options,
>  			     merge_tree_usage, PARSE_OPT_STOP_AT_NON_OPTION);
>  
> +	for (int x = 0; x < xopts_nr; x++)
> +		if (parse_merge_opt(&o.merge_options, xopts[x]))
> +			die(_("unknown strategy option: -X%s"), xopts[x]);
> +
>  	/* Handle --stdin */
>  	if (o.use_stdin) {
>  		struct strbuf buf = STRBUF_INIT;
>
> base-commit: ac83bc5054c2ac489166072334b4147ce6d0fccb

  reply	other threads:[~2023-08-07  2:11 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-05 14:24 [PATCH] merge-tree: add -X strategy option Izzy via GitGitGadget
2023-08-07  2:10 ` Junio C Hamano [this message]
2023-08-12  5:33 ` [PATCH v2] " Izzy via GitGitGadget
2023-08-12  5:41   ` 唐宇奕
2023-09-03  1:31     ` 唐宇奕
2023-09-12 15:03   ` Elijah Newren
2023-09-16  2:14   ` [PATCH v3] " Izzy via GitGitGadget
2023-09-16  2:26     ` 唐宇奕
2023-09-16  3:21       ` Elijah Newren
2023-09-16  3:16     ` Elijah Newren
2023-09-16  3:47     ` [PATCH v4] " Izzy via GitGitGadget
2023-09-16  3:55       ` Elijah Newren
2023-09-16  4:04       ` 唐宇奕
2023-09-16  6:11       ` Jeff King
2023-09-16  8:37       ` [PATCH v5] " Izzy via GitGitGadget
2023-09-16  8:38         ` 唐宇奕
2023-09-18  9:53         ` Phillip Wood
2023-09-18 16:08           ` Junio C Hamano
2023-09-24  2:23         ` [PATCH v6] " Izzy via GitGitGadget
2023-09-24  2:26           ` 唐宇奕
2023-10-09  9:58           ` Phillip Wood
2023-10-09 15:53             ` Jeff King
2023-10-09 17:10               ` Junio C Hamano
2023-10-09 18:52                 ` Jeff King
2023-10-11 19:38                   ` Junio C Hamano
2023-10-11 21:43                     ` Jeff King
2023-10-11 22:19                       ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqfs4vioum.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=newren@gmail.com \
    --cc=winglovet@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.