path: root/sequencer.c
diff options
authorAlban Gruin <>2019-11-24 17:43:32 (GMT)
committerJunio C Hamano <>2019-11-25 03:24:49 (GMT)
commit393adf7a6f600adca8cb75ec4e7136d523e8840d (patch)
tree8d59d40e46fe011e7f7814bc0355909f7b25d98d /sequencer.c
parenta2dd67f10523d3593f404b9889b6318f75ab988c (diff)
sequencer: directly call pick_commits() from complete_action()
Currently, complete_action(), used by builtin/rebase.c to start a new rebase, calls sequencer_continue() to do it. Before the former calls pick_commits(), it - calls read_and_refresh_cache() -- this is unnecessary here as we've just called require_clean_work_tree() in complete_action() - calls read_populate_opts() -- this is unnecessary as we're starting a new rebase, so `opts' is fully populated - loads the todo list -- this is unnecessary as we've just populated the todo list in complete_action() - commits any staged changes -- this is unnecessary as we're starting a new rebase, so there are no staged changes - calls record_in_rewritten() -- this is unnecessary as we're starting a new rebase. This changes complete_action() to directly call pick_commits() to avoid these unnecessary steps. Signed-off-by: Alban Gruin <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'sequencer.c')
1 files changed, 10 insertions, 4 deletions
diff --git a/sequencer.c b/sequencer.c
index ec7ea8d..ec0b793 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -5140,15 +5140,21 @@ int complete_action(struct repository *r, struct replay_opts *opts, unsigned fla
return error_errno(_("could not write '%s'"), todo_file);
- todo_list_release(&new_todo);
+ res = -1;
if (checkout_onto(r, opts, onto_name, &oid, orig_head))
- return -1;
+ goto cleanup;
if (require_clean_work_tree(r, "rebase", "", 1, 1))
- return -1;
+ goto cleanup;
- return sequencer_continue(r, opts);
+ todo_list_write_total_nr(&new_todo);
+ res = pick_commits(r, &new_todo, opts);
+ todo_list_release(&new_todo);
+ return res;
struct subject2item_entry {