sequencer (rebase -i): refactor setting the reflog message

This makes the code DRYer, with the obvious benefit that we can enhance
the code further in a single place.

We can also reuse the functionality elsewhere by calling this new
function.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin
2016-04-09 16:27:51 +02:00
parent 98964c9ebf
commit a151c86675

View File

@@ -1729,6 +1729,26 @@ static int is_final_fixup(struct todo_list *todo_list)
return 1;
}
static const char *reflog_message(struct replay_opts *opts,
const char *sub_action, const char *fmt, ...)
{
va_list ap;
static struct strbuf buf = STRBUF_INIT;
va_start(ap, fmt);
strbuf_reset(&buf);
strbuf_addstr(&buf, action_name(opts));
if (sub_action)
strbuf_addf(&buf, " (%s)", sub_action);
if (fmt) {
strbuf_addstr(&buf, ": ");
strbuf_vaddf(&buf, fmt, ap);
}
va_end(ap);
return buf.buf;
}
static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
{
int res = 0;
@@ -1799,6 +1819,7 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
starts_with(head_ref.buf, "refs/")) {
const char *msg;
unsigned char head[20], orig[20];
if (get_sha1("HEAD", head))
@@ -1806,19 +1827,17 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
get_sha1_hex(buf.buf, orig))
return error("Could not read orig-head");
strbuf_addf(&buf, "rebase -i (finish): %s onto ",
head_ref.buf);
if (!read_oneliner(&buf, rebase_path_onto(), 0))
return error("Could not read 'onto'");
if (update_ref(buf.buf, head_ref.buf, head, orig,
msg = reflog_message(opts, "finish", "%s onto %s",
head_ref.buf, buf.buf);
if (update_ref(msg, head_ref.buf, head, orig,
REF_NODEREF, UPDATE_REFS_MSG_ON_ERR))
return error("Could not update %s",
head_ref.buf);
strbuf_reset(&buf);
strbuf_addf(&buf,
"rebase -i (finish): returning to %s",
msg = reflog_message(opts, "finish", "returning to %s",
head_ref.buf);
if (create_symref("HEAD", head_ref.buf, buf.buf))
if (create_symref("HEAD", head_ref.buf, msg))
return error("Could not update HEAD to %s",
head_ref.buf);
strbuf_reset(&buf);