]> git.ipfire.org Git - thirdparty/git.git/commitdiff
format-patch: simplify after-subject MIME header handling
authorJeff King <peff@peff.net>
Wed, 20 Mar 2024 00:35:57 +0000 (20:35 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 Mar 2024 00:54:16 +0000 (17:54 -0700)
In log_write_email_headers(), we append our MIME headers to the set of
extra headers by creating a new strbuf, adding the existing headers, and
then adding our new ones.  We had to do it this way when our output
buffer might point to the constant opt->extra_headers variable.

But since the previous commit, we always make a local copy of that
variable. Let's turn that into a strbuf, which lets the MIME code simply
append to it. That simplifies the function and avoids a pointless extra
copy of the headers.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
log-tree.c

index c3e77064e42fcecac60f569b2dd27f5e22f83586..a102893621689f75ef174114a5bdb4b7d30b994d 100644 (file)
@@ -474,12 +474,15 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
                             int *need_8bit_cte_p,
                             int maybe_multipart)
 {
-       char *extra_headers = xstrdup_or_null(opt->extra_headers);
+       struct strbuf headers = STRBUF_INIT;
        const char *name = oid_to_hex(opt->zero_commit ?
                                      null_oid() : &commit->object.oid);
 
        *need_8bit_cte_p = 0; /* unknown */
 
+       if (opt->extra_headers)
+               strbuf_addstr(&headers, opt->extra_headers);
+
        fprintf(opt->diffopt.file, "From %s Mon Sep 17 00:00:00 2001\n", name);
        graph_show_oneline(opt->graph);
        if (opt->message_id) {
@@ -496,15 +499,13 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
                graph_show_oneline(opt->graph);
        }
        if (opt->mime_boundary && maybe_multipart) {
-               struct strbuf subject_buffer = STRBUF_INIT;
                static struct strbuf buffer = STRBUF_INIT;
                struct strbuf filename =  STRBUF_INIT;
                *need_8bit_cte_p = -1; /* NEVER */
 
                strbuf_reset(&buffer);
 
-               strbuf_addf(&subject_buffer,
-                        "%s"
+               strbuf_addf(&headers,
                         "MIME-Version: 1.0\n"
                         "Content-Type: multipart/mixed;"
                         " boundary=\"%s%s\"\n"
@@ -515,11 +516,8 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
                         "Content-Type: text/plain; "
                         "charset=UTF-8; format=fixed\n"
                         "Content-Transfer-Encoding: 8bit\n\n",
-                        extra_headers ? extra_headers : "",
                         mime_boundary_leader, opt->mime_boundary,
                         mime_boundary_leader, opt->mime_boundary);
-               free(extra_headers);
-               extra_headers = strbuf_detach(&subject_buffer, NULL);
 
                if (opt->numbered_files)
                        strbuf_addf(&filename, "%d", opt->nr);
@@ -539,7 +537,7 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
                opt->diffopt.stat_sep = buffer.buf;
                strbuf_release(&filename);
        }
-       *extra_headers_p = extra_headers;
+       *extra_headers_p = headers.len ? strbuf_detach(&headers, NULL) : NULL;
 }
 
 static void show_sig_lines(struct rev_info *opt, int status, const char *bol)