@matheusbsbs / matheus-bagliano / commits / 9a1b7474d6
Fork 0

sequencer: clear state upon dropping a become-empty commit

In commit e98c4269c8 ("rebase (interactive-backend): fix handling of commits that become empty", 2020-02-15), the merge backend was changed to drop commits that did not start empty but became so after being applied (because their changes were a subset of what was already upstream). This new code path did not need to go through the process of creating a commit, since we were dropping the commit instead. Unfortunately, this also means we bypassed the clearing of the CHERRY_PICK_HEAD and MERGE_MSG files, which if there were no further commits to cherry-pick would mean that the rebase would end but assume there was still an operation in progress. Ensure that we clear such state files when we decide to drop the commit. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Mar 11, 2020 at 15:30 UTC 9a1b7474d6babad5fabed9a2926a57d875f3820b
2 files changed +10
sequencer.c
+2
@@ -1955,6 +1955,8 @@ static int do_pick_commit(struct repository *r,
1955 flags |= ALLOW_EMPTY;
1956 } else if (allow == 2) {
1957 drop_commit = 1;
1958 + unlink(git_path_cherry_pick_head(r));
1959 + unlink(git_path_merge_msg(r));
1960 fprintf(stderr,
1961 _("dropping %s %s -- patch contents already upstream\n"),
1962 oid_to_hex(&commit->object.oid), msg.subject);
t/t3424-rebase-empty.sh
+8
@@ -123,4 +123,12 @@ test_expect_success 'rebase --interactive uses default of --empty=ask' '
123 test_cmp expect actual
124 '
125
126 +test_expect_success 'rebase --merge does not leave state laying around' '
127 + git checkout -B testing localmods~2 &&
128 + git rebase --merge upstream &&
129 +
130 + test_path_is_missing .git/CHERRY_PICK_HEAD &&
131 + test_path_is_missing .git/MERGE_MSG
132 +'
133 +
134 test_done