mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
Merge branch 'la/format-trailer-info'
The code to format trailers have been cleaned up. * la/format-trailer-info: trailer: finish formatting unification trailer: begin formatting unification format_trailer_info(): append newline for non-trailer lines format_trailer_info(): drop redundant unfold_value() format_trailer_info(): use trailer_item objects
This commit is contained in:
commit
c9f1f88bb0
81
trailer.c
81
trailer.c
@ -144,38 +144,6 @@ static char last_non_space_char(const char *s)
|
||||
return '\0';
|
||||
}
|
||||
|
||||
static void print_tok_val(struct strbuf *out, const char *tok, const char *val)
|
||||
{
|
||||
char c;
|
||||
|
||||
if (!tok) {
|
||||
strbuf_addf(out, "%s\n", val);
|
||||
return;
|
||||
}
|
||||
|
||||
c = last_non_space_char(tok);
|
||||
if (!c)
|
||||
return;
|
||||
if (strchr(separators, c))
|
||||
strbuf_addf(out, "%s%s\n", tok, val);
|
||||
else
|
||||
strbuf_addf(out, "%s%c %s\n", tok, separators[0], val);
|
||||
}
|
||||
|
||||
void format_trailers(const struct process_trailer_options *opts,
|
||||
struct list_head *trailers,
|
||||
struct strbuf *out)
|
||||
{
|
||||
struct list_head *pos;
|
||||
struct trailer_item *item;
|
||||
list_for_each(pos, trailers) {
|
||||
item = list_entry(pos, struct trailer_item, list);
|
||||
if ((!opts->trim_empty || strlen(item->value) > 0) &&
|
||||
(!opts->only_trailers || item->token))
|
||||
print_tok_val(out, item->token, item->value);
|
||||
}
|
||||
}
|
||||
|
||||
static struct trailer_item *trailer_from_arg(struct arg_item *arg_tok)
|
||||
{
|
||||
struct trailer_item *new_item = xcalloc(1, sizeof(*new_item));
|
||||
@ -1084,26 +1052,32 @@ void trailer_info_release(struct trailer_info *info)
|
||||
free(info->trailers);
|
||||
}
|
||||
|
||||
static void format_trailer_info(const struct process_trailer_options *opts,
|
||||
const struct trailer_info *info,
|
||||
struct strbuf *out)
|
||||
void format_trailers(const struct process_trailer_options *opts,
|
||||
struct list_head *trailers,
|
||||
struct strbuf *out)
|
||||
{
|
||||
size_t origlen = out->len;
|
||||
size_t i;
|
||||
struct list_head *pos;
|
||||
struct trailer_item *item;
|
||||
|
||||
for (i = 0; i < info->trailer_nr; i++) {
|
||||
char *trailer = info->trailers[i];
|
||||
ssize_t separator_pos = find_separator(trailer, separators);
|
||||
|
||||
if (separator_pos >= 1) {
|
||||
list_for_each(pos, trailers) {
|
||||
item = list_entry(pos, struct trailer_item, list);
|
||||
if (item->token) {
|
||||
struct strbuf tok = STRBUF_INIT;
|
||||
struct strbuf val = STRBUF_INIT;
|
||||
strbuf_addstr(&tok, item->token);
|
||||
strbuf_addstr(&val, item->value);
|
||||
|
||||
/*
|
||||
* Skip key/value pairs where the value was empty. This
|
||||
* can happen from trailers specified without a
|
||||
* separator, like `--trailer "Reviewed-by"` (no
|
||||
* corresponding value).
|
||||
*/
|
||||
if (opts->trim_empty && !strlen(item->value))
|
||||
continue;
|
||||
|
||||
parse_trailer(&tok, &val, NULL, trailer, separator_pos);
|
||||
if (!opts->filter || opts->filter(&tok, opts->filter_data)) {
|
||||
if (opts->unfold)
|
||||
unfold_value(&val);
|
||||
|
||||
if (opts->separator && out->len != origlen)
|
||||
strbuf_addbuf(out, opts->separator);
|
||||
if (!opts->value_only)
|
||||
@ -1111,8 +1085,11 @@ static void format_trailer_info(const struct process_trailer_options *opts,
|
||||
if (!opts->key_only && !opts->value_only) {
|
||||
if (opts->key_value_separator)
|
||||
strbuf_addbuf(out, opts->key_value_separator);
|
||||
else
|
||||
strbuf_addstr(out, ": ");
|
||||
else {
|
||||
char c = last_non_space_char(tok.buf);
|
||||
if (c && !strchr(separators, c))
|
||||
strbuf_addf(out, "%c ", separators[0]);
|
||||
}
|
||||
}
|
||||
if (!opts->key_only)
|
||||
strbuf_addbuf(out, &val);
|
||||
@ -1126,13 +1103,13 @@ static void format_trailer_info(const struct process_trailer_options *opts,
|
||||
if (opts->separator && out->len != origlen) {
|
||||
strbuf_addbuf(out, opts->separator);
|
||||
}
|
||||
strbuf_addstr(out, trailer);
|
||||
if (opts->separator) {
|
||||
strbuf_addstr(out, item->value);
|
||||
if (opts->separator)
|
||||
strbuf_rtrim(out);
|
||||
}
|
||||
else
|
||||
strbuf_addch(out, '\n');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void format_trailers_from_commit(const struct process_trailer_options *opts,
|
||||
@ -1151,7 +1128,7 @@ void format_trailers_from_commit(const struct process_trailer_options *opts,
|
||||
strbuf_add(out, msg + info.trailer_block_start,
|
||||
info.trailer_block_end - info.trailer_block_start);
|
||||
} else
|
||||
format_trailer_info(opts, &info, out);
|
||||
format_trailers(opts, &trailer_objects, out);
|
||||
|
||||
free_trailers(&trailer_objects);
|
||||
trailer_info_release(&info);
|
||||
|
13
trailer.h
13
trailer.h
@ -107,17 +107,10 @@ void format_trailers(const struct process_trailer_options *,
|
||||
void free_trailers(struct list_head *);
|
||||
|
||||
/*
|
||||
* Format the trailers from the commit msg "msg" into the strbuf "out".
|
||||
* Note two caveats about "opts":
|
||||
*
|
||||
* - this is primarily a helper for pretty.c, and not
|
||||
* all of the flags are supported.
|
||||
*
|
||||
* - this differs from process_trailers slightly in that we always format
|
||||
* only the trailer block itself, even if the "only_trailers" option is not
|
||||
* set.
|
||||
* Convenience function to format the trailers from the commit msg "msg" into
|
||||
* the strbuf "out". Reuses format_trailers() internally.
|
||||
*/
|
||||
void format_trailers_from_commit(const struct process_trailer_options *opts,
|
||||
void format_trailers_from_commit(const struct process_trailer_options *,
|
||||
const char *msg,
|
||||
struct strbuf *out);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user