diff options
author | Junio C Hamano <gitster@pobox.com> | 2022-10-26 02:11:34 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-10-26 02:11:34 +0200 |
commit | 7f8a6caee563de5b1df31f698dfbe4b55a6b2bea (patch) | |
tree | e4c45f15a9d08422a4187a1ee420d0e21dbe9f48 | |
parent | Merge branch 'jk/fsck-on-diet' into maint-2.38 (diff) | |
parent | sequencer: avoid dropping fixup commit that targets self via commit-ish (diff) | |
download | git-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.c | 4 | ||||
-rwxr-xr-x | t/t3415-rebase-autosquash.sh | 13 |
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 && |