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
This commit is contained in:
Junio C Hamano 2022-10-25 17:11:34 -07:00
commit 7f8a6caee5
2 changed files with 15 additions and 2 deletions

View File

@ -6203,8 +6203,6 @@ int todo_list_rearrange_squash(struct todo_list *todo_list)
return error(_("the script was already rearranged.")); return error(_("the script was already rearranged."));
} }
*commit_todo_item_at(&commit_todo, item->commit) = item;
parse_commit(item->commit); parse_commit(item->commit);
commit_buffer = logmsg_reencode(item->commit, NULL, "UTF-8"); commit_buffer = logmsg_reencode(item->commit, NULL, "UTF-8");
find_commit_subject(commit_buffer, &subject); find_commit_subject(commit_buffer, &subject);
@ -6271,6 +6269,8 @@ int todo_list_rearrange_squash(struct todo_list *todo_list)
strhash(entry->subject)); strhash(entry->subject));
hashmap_put(&subject2item, &entry->entry); hashmap_put(&subject2item, &entry->entry);
} }
*commit_todo_item_at(&commit_todo, item->commit) = item;
} }
if (rearranged) { if (rearranged) {

View File

@ -232,6 +232,19 @@ test_expect_success 'auto squash that matches longer sha1' '
test_line_count = 1 actual 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 () { test_auto_commit_flags () {
git reset --hard base && git reset --hard base &&
echo 1 >file1 && echo 1 >file1 &&