summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2022-10-26 02:11:34 +0200
committerJunio C Hamano <gitster@pobox.com>2022-10-26 02:11:34 +0200
commit7f8a6caee563de5b1df31f698dfbe4b55a6b2bea (patch)
treee4c45f15a9d08422a4187a1ee420d0e21dbe9f48
parentMerge branch 'jk/fsck-on-diet' into maint-2.38 (diff)
parentsequencer: avoid dropping fixup commit that targets self via commit-ish (diff)
downloadgit-7f8a6caee563de5b1df31f698dfbe4b55a6b2bea.tar.xz
git-7f8a6caee563de5b1df31f698dfbe4b55a6b2bea.zip
Merge branch 'ja/rebase-i-avoid-amending-self' into maint-2.38
"git rebase -i" can mistakenly attempt to apply a fixup to a commit itself, which has been corrected. * ja/rebase-i-avoid-amending-self: sequencer: avoid dropping fixup commit that targets self via commit-ish
-rw-r--r--sequencer.c4
-rwxr-xr-xt/t3415-rebase-autosquash.sh13
2 files changed, 15 insertions, 2 deletions
diff --git a/sequencer.c b/sequencer.c
index d26ede83c4..a4d85f1fbd 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -6203,8 +6203,6 @@ int todo_list_rearrange_squash(struct todo_list *todo_list)
return error(_("the script was already rearranged."));
}
- *commit_todo_item_at(&commit_todo, item->commit) = item;
-
parse_commit(item->commit);
commit_buffer = logmsg_reencode(item->commit, NULL, "UTF-8");
find_commit_subject(commit_buffer, &subject);
@@ -6271,6 +6269,8 @@ int todo_list_rearrange_squash(struct todo_list *todo_list)
strhash(entry->subject));
hashmap_put(&subject2item, &entry->entry);
}
+
+ *commit_todo_item_at(&commit_todo, item->commit) = item;
}
if (rearranged) {
diff --git a/t/t3415-rebase-autosquash.sh b/t/t3415-rebase-autosquash.sh
index 78c27496d6..a364530d76 100755
--- a/t/t3415-rebase-autosquash.sh
+++ b/t/t3415-rebase-autosquash.sh
@@ -232,6 +232,19 @@ test_expect_success 'auto squash that matches longer sha1' '
test_line_count = 1 actual
'
+test_expect_success 'auto squash of fixup commit that matches branch name which points back to fixup commit' '
+ git reset --hard base &&
+ git commit --allow-empty -m "fixup! self-cycle" &&
+ git branch self-cycle &&
+ GIT_SEQUENCE_EDITOR="cat >tmp" git rebase --autosquash -i HEAD^^ &&
+ sed -ne "/^[^#]/{s/[0-9a-f]\{7,\}/HASH/g;p;}" tmp >actual &&
+ cat <<-EOF >expect &&
+ pick HASH second commit
+ pick HASH fixup! self-cycle # empty
+ EOF
+ test_cmp expect actual
+'
+
test_auto_commit_flags () {
git reset --hard base &&
echo 1 >file1 &&