The previous two commits in the series implement special handling for the single-commit cherry-pick case. Although we can technically revert the changes made by d3f4628e (revert: Remove sequencer state when no commits are pending, 2011-06-06) without breaking any existing tests now, there is one pending corner case: when a cherry-pick is invoked on a commit range, and a conflict that occurs in the last commit is concluded with a 'git commit'. Without d3f4628e, we'd have the following unpleasant case: $ git cherry-pick foo..bar ... .git/sequencer is created ... ... .git/CHERRY_PICK_HEAD is created ... ... conflict in bar ... $ echo "resolved" >problematicfile $ git add problematicfile $ git commit ... .git/CHERRY_PICK_HEAD is removed ... $ git cherry-pick moo error: An existing cherry-pick or revert is in progress $ git cherry-pick --continue ... .git/sequencer is removed ... # We're in pristine shape now While prematurely removing the entire sequencer state is an overkill, we can revise our plan: prematurely remove only '.git/sequencer/todo' in the 'REPLAY_PICK' case, because this is the exact case where the information in '.git/sequencer/todo' can be inferred from '.git/CHERRY_PICK_HEAD'. This will be compatible with our future plan to implement '--continue' and '--reset' consistently. Signed-off-by: Ramkumar Ramachandra <artagnon@xxxxxxxxx> --- sequencer.c | 8 +++----- t/t3510-cherry-pick-sequence.sh | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/sequencer.c b/sequencer.c index b35fcc7..23fd3fe 100644 --- a/sequencer.c +++ b/sequencer.c @@ -753,15 +753,13 @@ static int pick_commits(struct replay_insn_list *todo_list, save_todo(cur); res = do_pick_commit(cur->operand, cur->action, opts); if (res) { - if (!cur->next) + if (!cur->next && opts->action == REPLAY_PICK) /* * An error was encountered while * picking the last commit; the - * sequencer state is useless now -- - * the user simply needs to resolve - * the conflict and commit + * sequencer todo is useless now. */ - remove_sequencer_state(0); + unlink(git_path(SEQ_TODO_FILE)); return res; } } diff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh index 4b12244..09b9e65 100755 --- a/t/t3510-cherry-pick-sequence.sh +++ b/t/t3510-cherry-pick-sequence.sh @@ -85,10 +85,10 @@ test_expect_success '--reset cleans up sequencer state' ' test_path_is_missing .git/sequencer ' -test_expect_success 'cherry-pick cleans up sequencer state when one commit is left' ' +test_expect_success 'cherry-pick cleans up sequencer todo when one commit is left' ' pristine_detach initial && test_must_fail git cherry-pick base..picked && - test_path_is_missing .git/sequencer && + test_path_is_missing .git/sequencer/todo && echo "resolved" >foo && git add foo && git commit && -- 1.7.6.351.gb35ac.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html