Skip to content

Commit

Permalink
sequencer: die on config error when saving replay opts
Browse files Browse the repository at this point in the history
When we start picking a range of revisions we save the replay
options that are required to restore state when interrupting and
later continuing picking the revisions. However, we do not check
the return values of the `git_config_set` functions, which may
lead us to store incomplete information. As this may lead us to
fail when trying to continue the sequence the error can be fatal.

Fix this by dying immediately when we are unable to write back
any replay option.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Patrick Steinhardt authored and Junio C Hamano committed Feb 22, 2016
1 parent 695009b commit 6c24dfb
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions sequencer.c
Original file line number Diff line number Diff line change
Expand Up @@ -933,31 +933,31 @@ static void save_opts(struct replay_opts *opts)
const char *opts_file = git_path_opts_file();

if (opts->no_commit)
git_config_set_in_file(opts_file, "options.no-commit", "true");
git_config_set_in_file_or_die(opts_file, "options.no-commit", "true");
if (opts->edit)
git_config_set_in_file(opts_file, "options.edit", "true");
git_config_set_in_file_or_die(opts_file, "options.edit", "true");
if (opts->signoff)
git_config_set_in_file(opts_file, "options.signoff", "true");
git_config_set_in_file_or_die(opts_file, "options.signoff", "true");
if (opts->record_origin)
git_config_set_in_file(opts_file, "options.record-origin", "true");
git_config_set_in_file_or_die(opts_file, "options.record-origin", "true");
if (opts->allow_ff)
git_config_set_in_file(opts_file, "options.allow-ff", "true");
git_config_set_in_file_or_die(opts_file, "options.allow-ff", "true");
if (opts->mainline) {
struct strbuf buf = STRBUF_INIT;
strbuf_addf(&buf, "%d", opts->mainline);
git_config_set_in_file(opts_file, "options.mainline", buf.buf);
git_config_set_in_file_or_die(opts_file, "options.mainline", buf.buf);
strbuf_release(&buf);
}
if (opts->strategy)
git_config_set_in_file(opts_file, "options.strategy", opts->strategy);
git_config_set_in_file_or_die(opts_file, "options.strategy", opts->strategy);
if (opts->gpg_sign)
git_config_set_in_file(opts_file, "options.gpg-sign", opts->gpg_sign);
git_config_set_in_file_or_die(opts_file, "options.gpg-sign", opts->gpg_sign);
if (opts->xopts) {
int i;
for (i = 0; i < opts->xopts_nr; i++)
git_config_set_multivar_in_file(opts_file,
"options.strategy-option",
opts->xopts[i], "^$", 0);
git_config_set_multivar_in_file_or_die(opts_file,
"options.strategy-option",
opts->xopts[i], "^$", 0);
}
}

Expand Down

0 comments on commit 6c24dfb

Please sign in to comment.