From: Johannes Schindelin Date: Mon, 2 Jan 2017 15:28:34 +0000 (+0100) Subject: sequencer (rebase -i): allow rescheduling commands X-Git-Tag: v2.12.0-rc0~38^2~10 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/9d7bf3cf993ab59e0f9d7150534213f57dd12741?hp=ca6c6b45dd9c36ae3e0b4f1fc9812d1e6a8b59bc sequencer (rebase -i): allow rescheduling commands 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 Signed-off-by: Junio C Hamano --- diff --git a/sequencer.c b/sequencer.c index 04a64cf0dc..dd5b843a84 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1915,6 +1915,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)