sequencer: use struct strvec to store merge strategy options
The sequencer stores the merge strategy options in an array of strings which allocated with ALLOC_GROW(). Using "struct strvec" avoids manually managing the memory of that array and simplifies the code. Aside from memory allocation the changes to the sequencer are largely mechanical, changing xopts_nr to xopts.nr and xopts[i] to xopts.v[i]. A new option parsing macro OPT_STRVEC() is also added to collect the strategy options. Hopefully this can be used to simplify the code in builtin/merge.c in the future. Note that there is a change of behavior to "git cherry-pick" and "git revert" as passing “--no-strategy-option” will now clear any previous strategy options whereas before this change it did nothing. Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
461434a013
commit
fb60b9f37f
@@ -44,20 +44,6 @@ static const char * const *revert_or_cherry_pick_usage(struct replay_opts *opts)
|
||||
return opts->action == REPLAY_REVERT ? revert_usage : cherry_pick_usage;
|
||||
}
|
||||
|
||||
static int option_parse_x(const struct option *opt,
|
||||
const char *arg, int unset)
|
||||
{
|
||||
struct replay_opts **opts_ptr = opt->value;
|
||||
struct replay_opts *opts = *opts_ptr;
|
||||
|
||||
if (unset)
|
||||
return 0;
|
||||
|
||||
ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
|
||||
opts->xopts[opts->xopts_nr++] = xstrdup(arg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int option_parse_m(const struct option *opt,
|
||||
const char *arg, int unset)
|
||||
{
|
||||
@@ -114,8 +100,8 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
|
||||
N_("select mainline parent"), option_parse_m),
|
||||
OPT_RERERE_AUTOUPDATE(&opts->allow_rerere_auto),
|
||||
OPT_STRING(0, "strategy", &opts->strategy, N_("strategy"), N_("merge strategy")),
|
||||
OPT_CALLBACK('X', "strategy-option", &opts, N_("option"),
|
||||
N_("option for merge strategy"), option_parse_x),
|
||||
OPT_STRVEC('X', "strategy-option", &opts->xopts, N_("option"),
|
||||
N_("option for merge strategy")),
|
||||
{ OPTION_STRING, 'S', "gpg-sign", &opts->gpg_sign, N_("key-id"),
|
||||
N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
|
||||
OPT_END()
|
||||
@@ -176,7 +162,7 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
|
||||
"--signoff", opts->signoff,
|
||||
"--mainline", opts->mainline,
|
||||
"--strategy", opts->strategy ? 1 : 0,
|
||||
"--strategy-option", opts->xopts ? 1 : 0,
|
||||
"--strategy-option", opts->xopts.nr ? 1 : 0,
|
||||
"-x", opts->record_origin,
|
||||
"--ff", opts->allow_ff,
|
||||
"--rerere-autoupdate", opts->allow_rerere_auto == RERERE_AUTOUPDATE,
|
||||
|
||||
Reference in New Issue
Block a user