Git fork

Merge branch 'pw/rebase-i-cleanup-fix'

"git rebase -i" failed to clean-up the commit log message when the
command commits the final one in a chain of "fixup" commands, which
has been corrected.

* pw/rebase-i-cleanup-fix:
sequencer: remove VERBATIM_MSG flag
rebase -i: respect commit.cleanup when picking fixups

+22 -18
-12
sequencer.c
··· 1087 1087 #define CLEANUP_MSG (1<<3) 1088 1088 #define VERIFY_MSG (1<<4) 1089 1089 #define CREATE_ROOT_COMMIT (1<<5) 1090 - #define VERBATIM_MSG (1<<6) 1091 1090 1092 1091 static int run_command_silent_on_success(struct child_process *cmd) 1093 1092 { ··· 1125 1124 { 1126 1125 struct child_process cmd = CHILD_PROCESS_INIT; 1127 1126 1128 - if ((flags & CLEANUP_MSG) && (flags & VERBATIM_MSG)) 1129 - BUG("CLEANUP_MSG and VERBATIM_MSG are mutually exclusive"); 1130 - 1131 1127 cmd.git_cmd = 1; 1132 1128 1133 1129 if (is_rebase_i(opts) && ··· 1166 1162 strvec_pushl(&cmd.args, "-C", "HEAD", NULL); 1167 1163 if ((flags & CLEANUP_MSG)) 1168 1164 strvec_push(&cmd.args, "--cleanup=strip"); 1169 - if ((flags & VERBATIM_MSG)) 1170 - strvec_push(&cmd.args, "--cleanup=verbatim"); 1171 1165 if ((flags & EDIT_MSG)) 1172 1166 strvec_push(&cmd.args, "-e"); 1173 1167 else if (!(flags & CLEANUP_MSG) && ··· 1540 1534 enum commit_msg_cleanup_mode cleanup; 1541 1535 int res = 0; 1542 1536 1543 - if ((flags & CLEANUP_MSG) && (flags & VERBATIM_MSG)) 1544 - BUG("CLEANUP_MSG and VERBATIM_MSG are mutually exclusive"); 1545 - 1546 1537 if (parse_head(r, &current_head)) 1547 1538 return -1; 1548 1539 ··· 1618 1609 1619 1610 if (flags & CLEANUP_MSG) 1620 1611 cleanup = COMMIT_MSG_CLEANUP_ALL; 1621 - else if (flags & VERBATIM_MSG) 1622 - cleanup = COMMIT_MSG_CLEANUP_NONE; 1623 1612 else if ((opts->signoff || opts->record_origin) && 1624 1613 !opts->explicit_cleanup) 1625 1614 cleanup = COMMIT_MSG_CLEANUP_SPACE; ··· 2436 2425 if (!final_fixup) 2437 2426 msg_file = rebase_path_squash_msg(); 2438 2427 else if (file_exists(rebase_path_fixup_msg())) { 2439 - flags |= VERBATIM_MSG; 2440 2428 msg_file = rebase_path_fixup_msg(); 2441 2429 } else { 2442 2430 const char *dest = git_path_squash_msg(r);
+22 -6
t/t3415-rebase-autosquash.sh
··· 486 486 test XZWY = $(git show | tr -cd W-Z) 487 487 ' 488 488 489 - test_expect_success 'fixup does not clean up commit message' ' 490 - oneline="#818" && 491 - git commit --allow-empty -m "$oneline" && 492 - git commit --fixup HEAD --allow-empty && 493 - git -c commit.cleanup=strip rebase -ki --autosquash HEAD~2 && 494 - test "$oneline" = "$(git show -s --format=%s)" 489 + test_expect_success 'pick and fixup respect commit.cleanup' ' 490 + git reset --hard base && 491 + test_commit --no-tag "fixup! second commit" file1 fixup && 492 + test_commit something && 493 + write_script .git/hooks/prepare-commit-msg <<-\EOF && 494 + printf "\n# Prepared\n" >> "$1" 495 + EOF 496 + git rebase -i --autosquash HEAD~3 && 497 + test_commit_message HEAD~1 <<-\EOF && 498 + second commit 499 + 500 + # Prepared 501 + EOF 502 + test_commit_message HEAD <<-\EOF && 503 + something 504 + 505 + # Prepared 506 + EOF 507 + git reset --hard something && 508 + git -c commit.cleanup=strip rebase -i --autosquash HEAD~3 && 509 + test_commit_message HEAD~1 -m "second commit" && 510 + test_commit_message HEAD -m "something" 495 511 ' 496 512 497 513 test_done