interpret-trailers: access trailer_info with new helpers

Instead of directly accessing trailer_info members, access them
indirectly through new helper functions exposed by the trailer API.

This is the first of two preparatory commits which will allow us to
use the so-called "pimpl" (pointer to implementation) idiom for the
trailer API, by making the trailer_info struct private to the trailer
implementation (and thus hidden from the API).

Helped-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Linus Arver <linus@ucla.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Linus Arver 2024-05-02 04:54:22 +00:00 committed by Junio C Hamano
parent 2ade05431e
commit 655eb65d48
3 changed files with 31 additions and 6 deletions

View File

@ -141,7 +141,7 @@ static void interpret_trailers(const struct process_trailer_options *opts,
LIST_HEAD(head); LIST_HEAD(head);
struct strbuf sb = STRBUF_INIT; struct strbuf sb = STRBUF_INIT;
struct strbuf trailer_block = STRBUF_INIT; struct strbuf trailer_block = STRBUF_INIT;
struct trailer_info info; struct trailer_info *info = trailer_info_new();
FILE *outfile = stdout; FILE *outfile = stdout;


trailer_config_init(); trailer_config_init();
@ -151,13 +151,13 @@ static void interpret_trailers(const struct process_trailer_options *opts,
if (opts->in_place) if (opts->in_place)
outfile = create_in_place_tempfile(file); outfile = create_in_place_tempfile(file);


parse_trailers(opts, &info, sb.buf, &head); parse_trailers(opts, info, sb.buf, &head);


/* Print the lines before the trailers */ /* Print the lines before the trailers */
if (!opts->only_trailers) if (!opts->only_trailers)
fwrite(sb.buf, 1, info.trailer_block_start, outfile); fwrite(sb.buf, 1, trailer_block_start(info), outfile);


if (!opts->only_trailers && !info.blank_line_before_trailer) if (!opts->only_trailers && !blank_line_before_trailer_block(info))
fprintf(outfile, "\n"); fprintf(outfile, "\n");




@ -178,8 +178,8 @@ static void interpret_trailers(const struct process_trailer_options *opts,


/* Print the lines after the trailers as is */ /* Print the lines after the trailers as is */
if (!opts->only_trailers) if (!opts->only_trailers)
fwrite(sb.buf + info.trailer_block_end, 1, sb.len - info.trailer_block_end, outfile); fwrite(sb.buf + trailer_block_end(info), 1, sb.len - trailer_block_end(info), outfile);
trailer_info_release(&info); trailer_info_release(info);


if (opts->in_place) if (opts->in_place)
if (rename_tempfile(&trailers_tempfile, file)) if (rename_tempfile(&trailers_tempfile, file))

View File

@ -952,6 +952,12 @@ static void unfold_value(struct strbuf *val)
strbuf_release(&out); strbuf_release(&out);
} }


struct trailer_info *trailer_info_new(void)
{
struct trailer_info *info = xcalloc(1, sizeof(*info));
return info;
}

/* /*
* Parse trailers in "str", populating the trailer info and "head" * Parse trailers in "str", populating the trailer info and "head"
* linked list structure. * linked list structure.
@ -1000,6 +1006,21 @@ void free_trailers(struct list_head *trailers)
} }
} }


size_t trailer_block_start(struct trailer_info *info)
{
return info->trailer_block_start;
}

size_t trailer_block_end(struct trailer_info *info)
{
return info->trailer_block_end;
}

int blank_line_before_trailer_block(struct trailer_info *info)
{
return info->blank_line_before_trailer;
}

void trailer_info_get(const struct process_trailer_options *opts, void trailer_info_get(const struct process_trailer_options *opts,
const char *str, const char *str,
struct trailer_info *info) struct trailer_info *info)

View File

@ -97,6 +97,10 @@ void parse_trailers(const struct process_trailer_options *,
void trailer_info_get(const struct process_trailer_options *, void trailer_info_get(const struct process_trailer_options *,
const char *str, const char *str,
struct trailer_info *); struct trailer_info *);
size_t trailer_block_start(struct trailer_info *);
size_t trailer_block_end(struct trailer_info *);
int blank_line_before_trailer_block(struct trailer_info *);
struct trailer_info *trailer_info_new(void);


void trailer_info_release(struct trailer_info *info); void trailer_info_release(struct trailer_info *info);