diff options
author | Taylor Blau <me@ttaylorr.com> | 2017-10-02 08:25:24 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-10-02 15:15:30 +0300 |
commit | 7a5edbdb748f58c0ff3f2a459596ad6ddfda0640 (patch) | |
tree | 644b598f8b71e6e0c452876b23d8e8cf6a4b6ac4 /ref-filter.c | |
parent | 67a20a0010224255bbd5bb9fa4f95595c3e1ba7c (diff) |
ref-filter.c: parse trailers arguments with %(contents) atom
The %(contents) atom takes a contents "field" as its argument. Since
"trailers" is one of those fields, extend contents_atom_parser to parse
"trailers"'s arguments when used through "%(contents)", like:
%(contents:trailers:unfold,only)
A caveat: trailers_atom_parser expects NULL when no arguments are given
(see: `parse_ref_filter_atom`). This is because string_list_split (given
a maxsplit of -1) returns a 1-ary string_list* containing the given
string if the delimiter could not be found using `strchr`.
To simulate this behavior without teaching trailers_atom_parser to
accept strings with length zero, conditionally pass NULL to
trailers_atom_parser if the arguments portion of the argument to
%(contents) is empty.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'ref-filter.c')
-rw-r--r-- | ref-filter.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/ref-filter.c b/ref-filter.c index 43ed10a5e1..85625fe2d2 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -212,9 +212,10 @@ static void contents_atom_parser(const struct ref_format *format, struct used_at atom->u.contents.option = C_SIG; else if (!strcmp(arg, "subject")) atom->u.contents.option = C_SUB; - else if (!strcmp(arg, "trailers")) - atom->u.contents.option = C_TRAILERS; - else if (skip_prefix(arg, "lines=", &arg)) { + else if (skip_prefix(arg, "trailers", &arg)) { + skip_prefix(arg, ":", &arg); + trailers_atom_parser(format, atom, *arg ? arg : NULL); + } else if (skip_prefix(arg, "lines=", &arg)) { atom->u.contents.option = C_LINES; if (strtoul_ui(arg, 10, &atom->u.contents.nlines)) die(_("positive value expected contents:lines=%s"), arg); |