]> git.ipfire.org Git - thirdparty/git.git/commitdiff
format_trailers(): use strbuf instead of FILE
authorLinus Arver <linusa@google.com>
Fri, 1 Mar 2024 00:14:44 +0000 (00:14 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Mar 2024 18:35:42 +0000 (10:35 -0800)
This is another preparatory refactor to unify the trailer formatters.

Make format_trailers() also write to a strbuf, to align with
format_trailers_from_commit() which also does the same. Doing this makes
format_trailers() behave similar to format_trailer_info() (which will
soon help us replace one with the other).

Signed-off-by: Linus Arver <linusa@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/interpret-trailers.c
trailer.c
trailer.h

index d1cf0aa33a237a537c8b5a79a45466490748869d..11f4ce9e4a274c666fe4127a904872653d35010d 100644 (file)
@@ -140,6 +140,7 @@ static void interpret_trailers(const struct process_trailer_options *opts,
 {
        LIST_HEAD(head);
        struct strbuf sb = STRBUF_INIT;
+       struct strbuf trailer_block = STRBUF_INIT;
        struct trailer_info info;
        FILE *outfile = stdout;
 
@@ -169,8 +170,11 @@ static void interpret_trailers(const struct process_trailer_options *opts,
                process_trailers_lists(&head, &arg_head);
        }
 
-       format_trailers(opts, &head, outfile);
+       /* Print trailer block. */
+       format_trailers(opts, &head, &trailer_block);
        free_trailers(&head);
+       fwrite(trailer_block.buf, 1, trailer_block.len, outfile);
+       strbuf_release(&trailer_block);
 
        /* Print the lines after the trailers as is */
        if (!opts->only_trailers)
index f92d844361ac0d844e5fb68cf3313392adf656b7..cbd643cd1fe8b013a5f0d0b9b054a468345790e7 100644 (file)
--- a/trailer.c
+++ b/trailer.c
@@ -144,12 +144,12 @@ static char last_non_space_char(const char *s)
        return '\0';
 }
 
-static void print_tok_val(FILE *outfile, const char *tok, const char *val)
+static void print_tok_val(struct strbuf *out, const char *tok, const char *val)
 {
        char c;
 
        if (!tok) {
-               fprintf(outfile, "%s\n", val);
+               strbuf_addf(out, "%s\n", val);
                return;
        }
 
@@ -157,13 +157,14 @@ static void print_tok_val(FILE *outfile, const char *tok, const char *val)
        if (!c)
                return;
        if (strchr(separators, c))
-               fprintf(outfile, "%s%s\n", tok, val);
+               strbuf_addf(out, "%s%s\n", tok, val);
        else
-               fprintf(outfile, "%s%c %s\n", tok, separators[0], val);
+               strbuf_addf(out, "%s%c %s\n", tok, separators[0], val);
 }
 
 void format_trailers(const struct process_trailer_options *opts,
-                    struct list_head *trailers, FILE *outfile)
+                    struct list_head *trailers,
+                    struct strbuf *out)
 {
        struct list_head *pos;
        struct trailer_item *item;
@@ -171,7 +172,7 @@ void format_trailers(const struct process_trailer_options *opts,
                item = list_entry(pos, struct trailer_item, list);
                if ((!opts->trim_empty || strlen(item->value) > 0) &&
                    (!opts->only_trailers || item->token))
-                       print_tok_val(outfile, item->token, item->value);
+                       print_tok_val(out, item->token, item->value);
        }
 }
 
index 410c61b62befa3d5f70146c0dccb0d0ec6c494de..1d106b6dd403b7755e4c81a1a40c1eea8eeae1d6 100644 (file)
--- a/trailer.h
+++ b/trailer.h
@@ -102,7 +102,8 @@ void trailer_info_release(struct trailer_info *info);
 
 void trailer_config_init(void);
 void format_trailers(const struct process_trailer_options *,
-                    struct list_head *trailers, FILE *outfile);
+                    struct list_head *trailers,
+                    struct strbuf *out);
 void free_trailers(struct list_head *);
 
 /*