sequencer (rebase -i): allow fast-forwarding for edit/reword
The sequencer already knew how to fast-forward instead of cherry-picking, if possible. We want to continue to do this, of course, but in case of the 'reword' command, we will need to call `git commit` after fast-forwarding. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
04efc8b57c
commit
bcbb68be2e
25
sequencer.c
25
sequencer.c
@ -860,7 +860,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,
|
|||||||
const char *base_label, *next_label;
|
const char *base_label, *next_label;
|
||||||
struct commit_message msg = { NULL, NULL, NULL, NULL };
|
struct commit_message msg = { NULL, NULL, NULL, NULL };
|
||||||
struct strbuf msgbuf = STRBUF_INIT;
|
struct strbuf msgbuf = STRBUF_INIT;
|
||||||
int res, unborn = 0, amend = 0, allow;
|
int res, unborn = 0, amend = 0, allow = 0;
|
||||||
|
|
||||||
if (opts->no_commit) {
|
if (opts->no_commit) {
|
||||||
/*
|
/*
|
||||||
@ -905,11 +905,23 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,
|
|||||||
else
|
else
|
||||||
parent = commit->parents->item;
|
parent = commit->parents->item;
|
||||||
|
|
||||||
|
if (get_message(commit, &msg) != 0)
|
||||||
|
return error(_("cannot get commit message for %s"),
|
||||||
|
oid_to_hex(&commit->object.oid));
|
||||||
|
|
||||||
if (opts->allow_ff && !is_fixup(command) &&
|
if (opts->allow_ff && !is_fixup(command) &&
|
||||||
((parent && !hashcmp(parent->object.oid.hash, head)) ||
|
((parent && !hashcmp(parent->object.oid.hash, head)) ||
|
||||||
(!parent && unborn)))
|
(!parent && unborn))) {
|
||||||
return fast_forward_to(commit->object.oid.hash, head, unborn, opts);
|
if (is_rebase_i(opts))
|
||||||
|
write_author_script(msg.message);
|
||||||
|
res = fast_forward_to(commit->object.oid.hash, head, unborn,
|
||||||
|
opts);
|
||||||
|
if (res || command != TODO_REWORD)
|
||||||
|
goto leave;
|
||||||
|
edit = amend = 1;
|
||||||
|
msg_file = NULL;
|
||||||
|
goto fast_forward_edit;
|
||||||
|
}
|
||||||
if (parent && parse_commit(parent) < 0)
|
if (parent && parse_commit(parent) < 0)
|
||||||
/* TRANSLATORS: The first %s will be a "todo" command like
|
/* TRANSLATORS: The first %s will be a "todo" command like
|
||||||
"revert" or "pick", the second %s a SHA1. */
|
"revert" or "pick", the second %s a SHA1. */
|
||||||
@ -917,10 +929,6 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,
|
|||||||
command_to_string(command),
|
command_to_string(command),
|
||||||
oid_to_hex(&parent->object.oid));
|
oid_to_hex(&parent->object.oid));
|
||||||
|
|
||||||
if (get_message(commit, &msg) != 0)
|
|
||||||
return error(_("cannot get commit message for %s"),
|
|
||||||
oid_to_hex(&commit->object.oid));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "commit" is an existing commit. We would want to apply
|
* "commit" is an existing commit. We would want to apply
|
||||||
* the difference it introduces since its first parent "prev"
|
* the difference it introduces since its first parent "prev"
|
||||||
@ -1044,6 +1052,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,
|
|||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
if (!opts->no_commit)
|
if (!opts->no_commit)
|
||||||
|
fast_forward_edit:
|
||||||
res = run_git_commit(msg_file, opts, allow, edit, amend,
|
res = run_git_commit(msg_file, opts, allow, edit, amend,
|
||||||
cleanup_commit_message);
|
cleanup_commit_message);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user