[PATCH v2] format-patch: fix From header in cover letter
- From
Mirko Faina <mroik@delayed.space>
- Date
- Feb 16, 2026, 15:27 UTC
- Message-ID
- <20260216152730.37478-1-mroik@delayed.space>
- In-Reply-To
- <aZAMr6XOwKkTa55q@exploit>
"git format-patch" takes "--from=<user ident>" command line option and uses the given ident for patch e-mails, but this is not applied to the cover letter, the option is ignored and the committer ident of the current user is used.
Teach the make_cover_letter() function to honor the option, instead of always using the current committer identity.
Signed-off-by: Mirko Faina <mroik@delayed.space> --- I'm sorry about the poor quality of the previous commit message, I realise it did a poor job at explaining what the patch did.
I've applied the changes you suggested and wrote the test. Thank you for the review.
builtin/log.c | 6 +++--- t/t4014-format-patch.sh | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/builtin/log.c b/builtin/log.c index d43ca693bf..42648dda54 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1332,7 +1332,7 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file, int quiet, const struct format_config *cfg) { - const char *committer; + const char *from; struct shortlog log; struct strbuf sb = STRBUF_INIT; int i; @@ -1345,7 +1345,7 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file, if (!cmit_fmt_is_mail(rev->commit_format)) die(_("cover letter needs email format")); - committer = git_committer_info(0); + from = cfg->from ? cfg->from : git_committer_info(0); if (use_separate_file && open_next_file(NULL, rev->numbered_files ? NULL : "cover-letter", rev, quiet)) @@ -1368,7 +1368,7 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file, pp.date_mode.type = DATE_RFC2822; pp.rev = rev; pp.encode_email_headers = rev->encode_email_headers; - pp_user_info(&pp, NULL, &sb, committer, encoding); + pp_user_info(&pp, NULL, &sb, from, encoding); prepare_cover_text(&pp, description_file, branch_name, &sb, encoding, need_8bit_cte, cfg); fprintf(rev->diffopt.file, "%s\n", sb.buf); diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index 21d6d0cd9e..cb04a9c47b 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -1472,6 +1472,18 @@ test_expect_success '--from uses committer ident' ' test_cmp expect patch.head ' +test_expect_success '--from applies to cover letter' ' + echo "This is a test text" >file_to_commit && + git format-patch -1 --stdout --cover-letter --from="Foo Bar <author@example.com>" >patch && + cat >expect <<-\EOF && + From: Foo Bar <author@example.com> + From: Foo Bar <author@example.com> + From: A U Thor <author@example.com> + EOF + sed -ne "/^From:/p; /^[[:space:]]$/d" patch >patch.head && + test_cmp expect patch.head +' + test_expect_success '--from omits redundant in-body header' ' git format-patch -1 --stdout --from="A U Thor <author@example.com>" >patch && cat >expect <<-\EOF &&
-- 2.53.0