sequencer: preserve commit messages
sequencer calls "commit" with default options, which implies "--cleanup=default" unless the user specified something else in their config. This leads to cherry-picked commits getting a cleaned up commit message, which is usually not an intended side-effect. Make the sequencer use "--cleanup=verbatim" so that it preserves commit messages independent of the default, unless the user has set config for "commit" or the message is amended with -s or -x. Reported-by: Christoph Anton Mitterer <calestyo@scientia.net> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
282616c72d
commit
17d65f03e1
@ -358,6 +358,7 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts,
|
|||||||
struct argv_array array;
|
struct argv_array array;
|
||||||
int rc;
|
int rc;
|
||||||
char *gpg_sign;
|
char *gpg_sign;
|
||||||
|
const char *value;
|
||||||
|
|
||||||
argv_array_init(&array);
|
argv_array_init(&array);
|
||||||
argv_array_push(&array, "commit");
|
argv_array_push(&array, "commit");
|
||||||
@ -374,6 +375,10 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts,
|
|||||||
if (!opts->edit) {
|
if (!opts->edit) {
|
||||||
argv_array_push(&array, "-F");
|
argv_array_push(&array, "-F");
|
||||||
argv_array_push(&array, defmsg);
|
argv_array_push(&array, defmsg);
|
||||||
|
if (!opts->signoff &&
|
||||||
|
!opts->record_origin &&
|
||||||
|
git_config_get_value("commit.cleanup", &value))
|
||||||
|
argv_array_push(&array, "--cleanup=verbatim");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allow_empty)
|
if (allow_empty)
|
||||||
|
@ -36,6 +36,20 @@ mesg_with_cherry_footer="$mesg_with_footer_sob
|
|||||||
(cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709)
|
(cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709)
|
||||||
Tested-by: C.U. Thor <cuthor@example.com>"
|
Tested-by: C.U. Thor <cuthor@example.com>"
|
||||||
|
|
||||||
|
mesg_unclean="$mesg_one_line
|
||||||
|
|
||||||
|
|
||||||
|
leading empty lines
|
||||||
|
|
||||||
|
|
||||||
|
consecutive empty lines
|
||||||
|
|
||||||
|
# hash tag comment
|
||||||
|
|
||||||
|
trailing empty lines
|
||||||
|
|
||||||
|
|
||||||
|
"
|
||||||
|
|
||||||
test_expect_success setup '
|
test_expect_success setup '
|
||||||
git config advice.detachedhead false &&
|
git config advice.detachedhead false &&
|
||||||
@ -53,6 +67,10 @@ test_expect_success setup '
|
|||||||
test_commit "$mesg_with_footer_sob" foo b mesg-with-footer-sob &&
|
test_commit "$mesg_with_footer_sob" foo b mesg-with-footer-sob &&
|
||||||
git reset --hard initial &&
|
git reset --hard initial &&
|
||||||
test_commit "$mesg_with_cherry_footer" foo b mesg-with-cherry-footer &&
|
test_commit "$mesg_with_cherry_footer" foo b mesg-with-cherry-footer &&
|
||||||
|
git reset --hard initial &&
|
||||||
|
test_config commit.cleanup verbatim &&
|
||||||
|
test_commit "$mesg_unclean" foo b mesg-unclean &&
|
||||||
|
test_unconfig commit.cleanup &&
|
||||||
pristine_detach initial &&
|
pristine_detach initial &&
|
||||||
test_commit conflicting unrelated
|
test_commit conflicting unrelated
|
||||||
'
|
'
|
||||||
@ -216,4 +234,14 @@ test_expect_success 'cherry-pick -x -s treats "(cherry picked from..." line as p
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cherry-pick preserves commit message' '
|
||||||
|
pristine_detach initial &&
|
||||||
|
printf "$mesg_unclean" >expect &&
|
||||||
|
git log -1 --pretty=format:%B mesg-unclean >actual &&
|
||||||
|
test_cmp expect actual &&
|
||||||
|
git cherry-pick mesg-unclean &&
|
||||||
|
git log -1 --pretty=format:%B >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
x
Reference in New Issue
Block a user