]> git.ipfire.org Git - thirdparty/git.git/commitdiff
format-patch: fix From header in cover letter
authorMirko Faina <mroik@delayed.space>
Tue, 17 Feb 2026 23:25:18 +0000 (00:25 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 17 Feb 2026 23:29:57 +0000 (15:29 -0800)
"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. This has been the case ever since
"--from" was introduced in a9080475 (teach format-patch to place
other authors into in-body "From", 2013-07-03).

Teach the make_cover_letter() function to honor the option, instead of
always using the current committer identity. Change variable name from
"committer" to "from" to better reflect the purpose of the variable.

Signed-off-by: Mirko Faina <mroik@delayed.space>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-format-patch.adoc
builtin/log.c
t/t4014-format-patch.sh

index 9a7807ca71a52866ed8587483475ba92f88854a3..6ac453958c5987e33be0a839b4cfd6fe659e07c2 100644 (file)
@@ -282,11 +282,12 @@ e.g., `--rfc='-(WIP)'` results in "PATCH (WIP)".
 
 --from::
 --from=<ident>::
-       Use `ident` in the `From:` header of each commit email. If the
-       author ident of the commit is not textually identical to the
-       provided `ident`, place a `From:` header in the body of the
-       message with the original author. If no `ident` is given, use
-       the committer ident.
+       Use `ident` in the `From:` header of each email. In case of a
+       commit email, if the author ident of the commit is not textually
+       identical to the provided `ident`, place a `From:` header in the
+       body of the message with the original author. If no `ident` is
+       given, or if the option is not passed at all, use the ident of
+       the current committer.
 +
 Note that this option is only useful if you are actually sending the
 emails and want to identify yourself as the sender, but retain the
index 5c9a8ef3632906544a37a9bb66c4713dd774b722..c1cd3999a7ec2832561d222df964c3412d2fafe8 100644 (file)
@@ -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);
index 21d6d0cd9ef679c04534fb9fa61952546c63c740..2135b65cee5d3b69a3470f0fd93261bc981f18aa 100755 (executable)
@@ -1472,6 +1472,14 @@ test_expect_success '--from uses committer ident' '
        test_cmp expect patch.head
 '
 
+test_expect_success '--from applies to cover letter' '
+       test_when_finished "rm -rf patches" &&
+       git format-patch -1 --cover-letter --from="Foo Bar <author@example.com>" -o patches &&
+       echo "From: Foo Bar <author@example.com>" >expect &&
+       grep "^From:" patches/0000-cover-letter.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 &&