[PATCH 25/34] sequencer (rebase -i): allow rescheduling commands
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Aug 31, 2016, 08:56 UTC
- Message-ID
- <7e3a0120e1da6ccad814d3ab3826d9ef6faa68e7.1472633606.git.johannes.schindelin@gmx.de>
- In-Reply-To
- <cover.1472633606.git.johannes.schindelin@gmx.de>
The interactive rebase has the very special magic that a cherry-pick that exits with a status different from 0 and 1 signifies a failure to even record that a cherry-pick was started.
This can happen e.g. when a fast-forward fails because it would overwrite untracked files.
In that case, we must reschedule the command that we thought we already had at least started successfully.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- sequencer.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/sequencer.c b/sequencer.c index 5f5fb9f..366ee78 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1895,6 +1895,12 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts) 1); res = do_pick_commit(item->command, item->commit, opts, is_final_fixup(todo_list)); + if (is_rebase_i(opts) && res < 0) { + /* Reschedule */ + todo_list->current--; + if (save_todo(todo_list, opts)) + return -1; + } if (item->command == TODO_EDIT) { struct commit *commit = item->commit; if (!res)
-- 2.10.0.rc2.102.g5c102ec