Merge branch 'pw/rebase-cleanup-merge-strategy-option-handling'
Clean-up of the code path that deals with merge strategy option handling in "git rebase". * pw/rebase-cleanup-merge-strategy-option-handling: rebase: remove a couple of redundant strategy tests rebase -m: fix serialization of strategy options rebase -m: cleanup --strategy-option handling sequencer: use struct strvec to store merge strategy options rebase: stop reading and writing unnecessary strategy state
This commit is contained in:
@ -121,7 +121,8 @@ struct rebase_options {
|
||||
struct string_list exec;
|
||||
int allow_empty_message;
|
||||
int rebase_merges, rebase_cousins;
|
||||
char *strategy, *strategy_opts;
|
||||
char *strategy;
|
||||
struct string_list strategy_opts;
|
||||
struct strbuf git_format_patch_opt;
|
||||
int reschedule_failed_exec;
|
||||
int reapply_cherry_picks;
|
||||
@ -150,6 +151,7 @@ struct rebase_options {
|
||||
.config_rebase_merges = -1, \
|
||||
.update_refs = -1, \
|
||||
.config_update_refs = -1, \
|
||||
.strategy_opts = STRING_LIST_INIT_NODUP,\
|
||||
}
|
||||
|
||||
static struct replay_opts get_replay_opts(const struct rebase_options *opts)
|
||||
@ -183,8 +185,8 @@ static struct replay_opts get_replay_opts(const struct rebase_options *opts)
|
||||
replay.default_strategy = NULL;
|
||||
}
|
||||
|
||||
if (opts->strategy_opts)
|
||||
parse_strategy_opts(&replay, opts->strategy_opts);
|
||||
for (size_t i = 0; i < opts->strategy_opts.nr; i++)
|
||||
strvec_push(&replay.xopts, opts->strategy_opts.items[i].string);
|
||||
|
||||
if (opts->squash_onto) {
|
||||
oidcpy(&replay.squash_onto, opts->squash_onto);
|
||||
@ -492,24 +494,6 @@ static int read_basic_state(struct rebase_options *opts)
|
||||
opts->gpg_sign_opt = xstrdup(buf.buf);
|
||||
}
|
||||
|
||||
if (file_exists(state_dir_path("strategy", opts))) {
|
||||
strbuf_reset(&buf);
|
||||
if (!read_oneliner(&buf, state_dir_path("strategy", opts),
|
||||
READ_ONELINER_WARN_MISSING))
|
||||
return -1;
|
||||
free(opts->strategy);
|
||||
opts->strategy = xstrdup(buf.buf);
|
||||
}
|
||||
|
||||
if (file_exists(state_dir_path("strategy_opts", opts))) {
|
||||
strbuf_reset(&buf);
|
||||
if (!read_oneliner(&buf, state_dir_path("strategy_opts", opts),
|
||||
READ_ONELINER_WARN_MISSING))
|
||||
return -1;
|
||||
free(opts->strategy_opts);
|
||||
opts->strategy_opts = xstrdup(buf.buf);
|
||||
}
|
||||
|
||||
strbuf_release(&buf);
|
||||
|
||||
return 0;
|
||||
@ -527,12 +511,6 @@ static int rebase_write_basic_state(struct rebase_options *opts)
|
||||
write_file(state_dir_path("quiet", opts), "%s", "");
|
||||
if (opts->flags & REBASE_VERBOSE)
|
||||
write_file(state_dir_path("verbose", opts), "%s", "");
|
||||
if (opts->strategy)
|
||||
write_file(state_dir_path("strategy", opts), "%s",
|
||||
opts->strategy);
|
||||
if (opts->strategy_opts)
|
||||
write_file(state_dir_path("strategy_opts", opts), "%s",
|
||||
opts->strategy_opts);
|
||||
if (opts->allow_rerere_autoupdate > 0)
|
||||
write_file(state_dir_path("allow_rerere_autoupdate", opts),
|
||||
"-%s-rerere-autoupdate",
|
||||
@ -1089,7 +1067,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
||||
struct object_id branch_base;
|
||||
int ignore_whitespace = 0;
|
||||
const char *gpg_sign = NULL;
|
||||
struct string_list strategy_options = STRING_LIST_INIT_NODUP;
|
||||
struct object_id squash_onto;
|
||||
char *squash_onto_name = NULL;
|
||||
char *keep_base_onto_name = NULL;
|
||||
@ -1197,7 +1174,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
||||
N_("use 'merge-base --fork-point' to refine upstream")),
|
||||
OPT_STRING('s', "strategy", &options.strategy,
|
||||
N_("strategy"), N_("use the given merge strategy")),
|
||||
OPT_STRING_LIST('X', "strategy-option", &strategy_options,
|
||||
OPT_STRING_LIST('X', "strategy-option", &options.strategy_opts,
|
||||
N_("option"),
|
||||
N_("pass the argument through to the merge "
|
||||
"strategy")),
|
||||
@ -1500,23 +1477,13 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
||||
} else {
|
||||
/* REBASE_MERGE */
|
||||
if (ignore_whitespace) {
|
||||
string_list_append(&strategy_options,
|
||||
string_list_append(&options.strategy_opts,
|
||||
"ignore-space-change");
|
||||
}
|
||||
}
|
||||
|
||||
if (strategy_options.nr) {
|
||||
int i;
|
||||
|
||||
if (!options.strategy)
|
||||
options.strategy = "ort";
|
||||
|
||||
strbuf_reset(&buf);
|
||||
for (i = 0; i < strategy_options.nr; i++)
|
||||
strbuf_addf(&buf, " --%s",
|
||||
strategy_options.items[i].string);
|
||||
options.strategy_opts = xstrdup(buf.buf);
|
||||
}
|
||||
if (options.strategy_opts.nr && !options.strategy)
|
||||
options.strategy = "ort";
|
||||
|
||||
if (options.strategy) {
|
||||
options.strategy = xstrdup(options.strategy);
|
||||
@ -1898,10 +1865,9 @@ cleanup:
|
||||
free(options.gpg_sign_opt);
|
||||
string_list_clear(&options.exec, 0);
|
||||
free(options.strategy);
|
||||
free(options.strategy_opts);
|
||||
string_list_clear(&options.strategy_opts, 0);
|
||||
strbuf_release(&options.git_format_patch_opt);
|
||||
free(squash_onto_name);
|
||||
free(keep_base_onto_name);
|
||||
string_list_clear(&strategy_options, 0);
|
||||
return !!ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user