Merge branch 'jt/use-trailer-api-in-commands'
"git cherry-pick" and other uses of the sequencer machinery mishandled a trailer block whose last line is an incomplete line. This has been fixed so that an additional sign-off etc. are added after completing the existing incomplete line. * jt/use-trailer-api-in-commands: sequencer: add newline before adding footers
This commit is contained in:
commit
6ebfa10439
11
sequencer.c
11
sequencer.c
@ -1045,6 +1045,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,
|
|||||||
strbuf_addstr(&msgbuf, p);
|
strbuf_addstr(&msgbuf, p);
|
||||||
|
|
||||||
if (opts->record_origin) {
|
if (opts->record_origin) {
|
||||||
|
strbuf_complete_line(&msgbuf);
|
||||||
if (!has_conforming_footer(&msgbuf, NULL, 0))
|
if (!has_conforming_footer(&msgbuf, NULL, 0))
|
||||||
strbuf_addch(&msgbuf, '\n');
|
strbuf_addch(&msgbuf, '\n');
|
||||||
strbuf_addstr(&msgbuf, cherry_picked_prefix);
|
strbuf_addstr(&msgbuf, cherry_picked_prefix);
|
||||||
@ -2357,6 +2358,9 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
|
|||||||
getenv("GIT_COMMITTER_EMAIL")));
|
getenv("GIT_COMMITTER_EMAIL")));
|
||||||
strbuf_addch(&sob, '\n');
|
strbuf_addch(&sob, '\n');
|
||||||
|
|
||||||
|
if (!ignore_footer)
|
||||||
|
strbuf_complete_line(msgbuf);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the whole message buffer is equal to the sob, pretend that we
|
* If the whole message buffer is equal to the sob, pretend that we
|
||||||
* found a conforming footer with a matching sob
|
* found a conforming footer with a matching sob
|
||||||
@ -2377,13 +2381,6 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
|
|||||||
* the title and body to be filled in by the user.
|
* the title and body to be filled in by the user.
|
||||||
*/
|
*/
|
||||||
append_newlines = "\n\n";
|
append_newlines = "\n\n";
|
||||||
} else if (msgbuf->buf[len - 1] != '\n') {
|
|
||||||
/*
|
|
||||||
* Incomplete line. Complete the line and add a
|
|
||||||
* blank one so that there is an empty line between
|
|
||||||
* the message body and the sob.
|
|
||||||
*/
|
|
||||||
append_newlines = "\n\n";
|
|
||||||
} else if (len == 1) {
|
} else if (len == 1) {
|
||||||
/*
|
/*
|
||||||
* Buffer contains a single newline. Add another
|
* Buffer contains a single newline. Add another
|
||||||
|
@ -208,6 +208,50 @@ test_expect_success 'cherry-pick -x -s adds sob even when trailing sob exists fo
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cherry-pick -x handles commits with no NL at end of message' '
|
||||||
|
pristine_detach initial &&
|
||||||
|
printf "title\n\nSigned-off-by: A <a@example.com>" >msg &&
|
||||||
|
sha1=$(git commit-tree -p initial mesg-with-footer^{tree} <msg) &&
|
||||||
|
git cherry-pick -x $sha1 &&
|
||||||
|
git log -1 --pretty=format:%B >actual &&
|
||||||
|
|
||||||
|
printf "\n(cherry picked from commit %s)\n" $sha1 >>msg &&
|
||||||
|
test_cmp msg actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cherry-pick -x handles commits with no footer and no NL at end of message' '
|
||||||
|
pristine_detach initial &&
|
||||||
|
printf "title\n\nnot a footer" >msg &&
|
||||||
|
sha1=$(git commit-tree -p initial mesg-with-footer^{tree} <msg) &&
|
||||||
|
git cherry-pick -x $sha1 &&
|
||||||
|
git log -1 --pretty=format:%B >actual &&
|
||||||
|
|
||||||
|
printf "\n\n(cherry picked from commit %s)\n" $sha1 >>msg &&
|
||||||
|
test_cmp msg actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cherry-pick -s handles commits with no NL at end of message' '
|
||||||
|
pristine_detach initial &&
|
||||||
|
printf "title\n\nSigned-off-by: A <a@example.com>" >msg &&
|
||||||
|
sha1=$(git commit-tree -p initial mesg-with-footer^{tree} <msg) &&
|
||||||
|
git cherry-pick -s $sha1 &&
|
||||||
|
git log -1 --pretty=format:%B >actual &&
|
||||||
|
|
||||||
|
printf "\nSigned-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>\n" >>msg &&
|
||||||
|
test_cmp msg actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cherry-pick -s handles commits with no footer and no NL at end of message' '
|
||||||
|
pristine_detach initial &&
|
||||||
|
printf "title\n\nnot a footer" >msg &&
|
||||||
|
sha1=$(git commit-tree -p initial mesg-with-footer^{tree} <msg) &&
|
||||||
|
git cherry-pick -s $sha1 &&
|
||||||
|
git log -1 --pretty=format:%B >actual &&
|
||||||
|
|
||||||
|
printf "\n\nSigned-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>\n" >>msg &&
|
||||||
|
test_cmp msg actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'cherry-pick -x treats "(cherry picked from..." line as part of footer' '
|
test_expect_success 'cherry-pick -x treats "(cherry picked from..." line as part of footer' '
|
||||||
pristine_detach initial &&
|
pristine_detach initial &&
|
||||||
sha1=$(git rev-parse mesg-with-cherry-footer^0) &&
|
sha1=$(git rev-parse mesg-with-cherry-footer^0) &&
|
||||||
|
Loading…
Reference in New Issue
Block a user