Skip to content

Fix 2.26.0 rebase regression and documentation shortcoming

Elijah Newren via GitGitGadget git 2 versions In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest2 patches 5 repliesIn review
  2. v12 patches 4 repliesSuperseded

Changes in v2 from the cover letter

* Clean out any MERGE_MSG file in addition to CHERRY_PICK_HEAD, and add a test

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/2sequencer: clear state upon dropping a become-empty commitsequencer.c t/t3424-rebase-empty.sh+10 -03 replies
2/2git-rebase.txt: highlight backend differences with commit rewordingDocumentation/git-rebase.txt+10 -02 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [PATCH v2 0/2] Fix 2.26.0 rebase regression and documentation shortcoming

This two commit series addresses two points raised by Peff about rebase backend issues. The first is a two-line fix to a regression in 2.26.0 (when "the eighth batch for 2.26.0" added the dropping of commits which become empty, if the last commit in the series was the one that became empty the rebase would complete without cleaning out state files), and the other is just a documentation update about a backend difference that we were previously unaware of.

Changes since v1:

* Clean out any MERGE_MSG file in addition to CHERRY_PICK_HEAD, and add a test

Elijah Newren (2):
sequencer: clear state upon dropping a become-empty commit git-rebase.txt: highlight backend differences with commit rewording

 Documentation/git-rebase.txt | 10 ++++++++++
 sequencer.c                  |  2 ++
 t/t3424-rebase-empty.sh      |  8 ++++++++
 3 files changed, 20 insertions(+)

base-commit: b4374e96c84ed9394fed363973eb540da308ed4f
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-722%2Fnewren%2Frebase-fixups-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-722/newren/rebase-fixups-v2
Pull-Request: https://github.com/git/git/pull/722

Range-diff vs v1:

1: 132f769adb0 ! 1: 84b89d78435 sequencer: clear CHERRY_PICK_HEAD upon dropping a become-empty commit
@@ -1,6 +1,6 @@
Author: Elijah Newren <[email protected]>

- sequencer: clear CHERRY_PICK_HEAD upon dropping a become-empty commit
+ 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
@@ -9,10 +9,10 @@
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 file, 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 CHERRY_PICK_HEAD
- when we decide to drop the commit.
+ 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.

@@ -24,6 +24,24 @@
} else if (allow == 2) {
drop_commit = 1;
+ unlink(git_path_cherry_pick_head(r));
++ unlink(git_path_merge_msg(r));
fprintf(stderr,
_("dropping %s %s -- patch contents already upstream\n"), oid_to_hex(&commit->object.oid), msg.subject);
+
+ diff --git a/t/t3424-rebase-empty.sh b/t/t3424-rebase-empty.sh
+ --- a/t/t3424-rebase-empty.sh
+ +++ b/t/t3424-rebase-empty.sh
+@@
+ test_cmp expect actual
+ '
+
++test_expect_success 'rebase --merge does not leave state laying around' '
++ git checkout -B testing localmods~2 &&
++ git rebase --merge upstream &&
++
++ test_path_is_missing .git/CHERRY_PICK_HEAD &&
++ test_path_is_missing .git/MERGE_MSG
++'
++
+ test_done
2: 12932b847ef = 2: 6d51cff41d9 git-rebase.txt: highlight backend differences with commit rewording

Signature · 1 line
gitgitgadget