From: Taylor Blau <me@ttaylorr.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, peff@peff.net, Taylor Blau <me@ttaylorr.com>
Subject: [PATCH v4 6/6] ref-filter.c: parse trailers arguments with %(contents) atom
Date: Sun, 1 Oct 2017 09:18:52 -0700 [thread overview]
Message-ID: <20171001161852.84571-6-me@ttaylorr.com> (raw)
In-Reply-To: <20171001161852.84571-1-me@ttaylorr.com>
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`). 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>
---
ref-filter.c | 6 ++++--
t/t6300-for-each-ref.sh | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/ref-filter.c b/ref-filter.c
index 43ed10a5e..2c03c2bf5 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -212,8 +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, "trailers", &arg)) {
+ skip_prefix(arg, ":", &arg);
+ trailers_atom_parser(atom, *arg ? NULL : arg);
+ }
else if (skip_prefix(arg, "lines=", &arg)) {
atom->u.contents.option = C_LINES;
if (strtoul_ui(arg, 10, &atom->u.contents.nlines))
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index e4ce9c550..ab95fe427 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -655,6 +655,35 @@ test_expect_success '%(trailers:only) and %(trailers:unfold) work together' '
test_cmp expect actual
'
+test_expect_success '%(contents:trailers:unfold) unfolds trailers' '
+ git for-each-ref --format="%(contents:trailers:unfold)" refs/heads/master >actual &&
+ {
+ unfold <trailers
+ echo
+ } >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success '%(contents:trailers:only) shows only "key: value" trailers' '
+ git for-each-ref --format="%(contents:trailers:only)" refs/heads/master >actual &&
+ {
+ grep -v patch.description <trailers &&
+ echo
+ } >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success '%(contents:trailers:only) and %(contents:trailers:unfold) work together' '
+ git for-each-ref --format="%(contents:trailers:only,unfold)" refs/heads/master >actual &&
+ git for-each-ref --format="%(contents:trailers:unfold,only)" refs/heads/master >reverse &&
+ test_cmp actual reverse &&
+ {
+ grep -v patch.description <trailers | unfold &&
+ echo
+ } >expect &&
+ test_cmp expect actual
+'
+
test_expect_success '%(trailers) rejects unknown trailers arguments' '
cat >expect <<-EOF &&
fatal: unknown %(trailers) argument: unsupported
@@ -663,6 +692,14 @@ test_expect_success '%(trailers) rejects unknown trailers arguments' '
test_cmp expect actual
'
+test_expect_success '%(contents:trailers) rejects unknown trailers arguments' '
+ cat >expect <<-EOF &&
+ fatal: unknown %(trailers) argument: unsupported
+ EOF
+ test_must_fail git for-each-ref --format="%(contents:trailers:unsupported)" 2>actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'basic atom: head contents:trailers' '
git for-each-ref --format="%(contents:trailers)" refs/heads/master >actual &&
sanitize_pgp <actual >actual.clean &&
--
2.14.1.145.gb3622a4ee
next prev parent reply other threads:[~2017-10-01 16:19 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-30 6:22 [PATCH 0/5] Support %(trailers) arguments in for-each-ref(1) Taylor Blau
2017-09-30 6:22 ` [PATCH 1/5] pretty.c: delimit "%(trailers)" arguments with "," Taylor Blau
2017-09-30 6:49 ` Jeff King
2017-09-30 6:22 ` [PATCH 2/5] t6300: refactor %(trailers) tests Taylor Blau
2017-09-30 7:01 ` Jeff King
2017-09-30 6:22 ` [PATCH 3/5] ref-filter.c: add trailer options to used_atom Taylor Blau
2017-09-30 7:10 ` Jeff King
2017-09-30 6:22 ` [PATCH 4/5] ref-filter.c: use trailer_opts to format trailers Taylor Blau
2017-09-30 7:21 ` Jeff King
2017-10-01 9:08 ` Junio C Hamano
2017-10-01 9:00 ` Junio C Hamano
2017-10-02 5:05 ` Jeff King
2017-10-02 5:11 ` Taylor Blau
2017-09-30 6:22 ` [PATCH 5/5] ref-filter.c: parse trailers arguments with %(contents) atom Taylor Blau
2017-09-30 7:36 ` Jeff King
2017-09-30 7:38 ` [PATCH 0/5] Support %(trailers) arguments in for-each-ref(1) Jeff King
2017-09-30 18:41 ` [PATCH v2 0/6] " Taylor Blau
2017-09-30 18:46 ` [PATCH v2 1/6] pretty.c: delimit "%(trailers)" arguments with "," Taylor Blau
2017-09-30 18:46 ` [PATCH v2 2/6] t6300: refactor %(trailers) tests Taylor Blau
2017-09-30 18:46 ` [PATCH v2 3/6] doc: 'trailers' is the preferred way to format trailers Taylor Blau
2017-09-30 18:46 ` [PATCH v2 4/6] doc: use modern "`"-style code fencing Taylor Blau
2017-09-30 18:46 ` [PATCH v2 5/6] ref-filter.c: use trailer_opts to format trailers Taylor Blau
2017-09-30 18:46 ` [PATCH v2 6/6] ref-filter.c: parse trailers arguments with %(contents) atom Taylor Blau
2017-10-01 0:06 ` [PATCH v2 0/6] Support %(trailers) arguments in for-each-ref(1) Taylor Blau
2017-10-01 0:10 ` [PATCH v3 1/6] pretty.c: delimit "%(trailers)" arguments with "," Taylor Blau
2017-10-01 0:10 ` [PATCH v3 2/6] t6300: refactor %(trailers) tests Taylor Blau
2017-10-01 0:10 ` [PATCH v3 3/6] doc: 'trailers' is the preferred way to format trailers Taylor Blau
2017-10-01 0:10 ` [PATCH v3 4/6] doc: use modern "`"-style code fencing Taylor Blau
2017-10-01 0:10 ` [PATCH v3 5/6] ref-filter.c: use trailer_opts to format trailers Taylor Blau
2017-10-01 0:10 ` [PATCH v3 6/6] ref-filter.c: parse trailers arguments with %(contents) atom Taylor Blau
2017-10-01 16:17 ` [PATCH v4 0/6] Support %(trailers) arguments in for-each-ref(1) Taylor Blau
2017-10-01 16:18 ` [PATCH v4 1/6] pretty.c: delimit "%(trailers)" arguments with "," Taylor Blau
2017-10-01 16:18 ` [PATCH v4 2/6] t6300: refactor %(trailers) tests Taylor Blau
2017-10-02 0:12 ` Junio C Hamano
2017-10-01 16:18 ` [PATCH v4 3/6] doc: 'trailers' is the preferred way to format trailers Taylor Blau
2017-10-01 16:18 ` [PATCH v4 4/6] doc: use modern "`"-style code fencing Taylor Blau
2017-10-01 23:55 ` Junio C Hamano
2017-10-02 0:06 ` Taylor Blau
2017-10-02 1:35 ` Junio C Hamano
2017-10-02 4:53 ` Jeff King
2017-10-01 16:18 ` [PATCH v4 5/6] ref-filter.c: use trailer_opts to format trailers Taylor Blau
2017-10-02 0:13 ` Junio C Hamano
2017-10-01 16:18 ` Taylor Blau [this message]
2017-10-02 0:19 ` [PATCH v4 6/6] ref-filter.c: parse trailers arguments with %(contents) atom Junio C Hamano
2017-10-02 0:11 ` [PATCH v4 1/6] pretty.c: delimit "%(trailers)" arguments with "," Junio C Hamano
2017-10-02 5:00 ` Jeff King
2017-10-02 0:31 ` [PATCH v5 0/6] Support %(trailers) arguments in for-each-ref(1) Taylor Blau
2017-10-02 0:32 ` [PATCH v5 1/6] pretty.c: delimit "%(trailers)" arguments with "," Taylor Blau
2017-10-02 0:33 ` [PATCH v5 2/6] t6300: refactor %(trailers) tests Taylor Blau
2017-10-02 0:33 ` [PATCH v5 3/6] doc: 'trailers' is the preferred way to format trailers Taylor Blau
2017-10-02 0:33 ` [PATCH v5 4/6] doc: use modern "`"-style code quoting Taylor Blau
2017-10-02 0:33 ` [PATCH v5 5/6] ref-filter.c: use trailer_opts to format trailers Taylor Blau
2017-10-02 0:33 ` [PATCH v5 6/6] ref-filter.c: parse trailers arguments with %(contents) atom Taylor Blau
2017-10-02 4:26 ` Junio C Hamano
2017-10-02 4:51 ` Junio C Hamano
2017-10-02 5:13 ` Taylor Blau
2017-10-02 5:03 ` Jeff King
2017-10-02 5:12 ` Taylor Blau
2017-10-02 5:14 ` Jeff King
2017-10-02 5:23 ` [PATCH v6 0/7] Support %(trailers) arguments in for-each-ref(1) Taylor Blau
2017-10-02 5:25 ` [PATCH v6 1/7] pretty.c: delimit "%(trailers)" arguments with "," Taylor Blau
2017-10-02 5:25 ` [PATCH v6 2/7] t4205: unfold across multiple lines Taylor Blau
2017-10-02 5:25 ` [PATCH v6 3/7] doc: 'trailers' is the preferred way to format trailers Taylor Blau
2017-10-02 5:25 ` [PATCH v6 4/7] doc: use modern "`"-style code quoting Taylor Blau
2017-10-02 5:25 ` [PATCH v6 5/7] t6300: refactor %(trailers) tests Taylor Blau
2017-10-02 5:25 ` [PATCH v6 6/7] ref-filter.c: use trailer_opts to format trailers Taylor Blau
2017-10-02 5:25 ` [PATCH v6 7/7] ref-filter.c: parse trailers arguments with %(contents) atom Taylor Blau
2017-10-02 6:51 ` Jeff King
2017-10-02 9:52 ` Junio C Hamano
2017-10-02 15:49 ` Taylor Blau
2017-10-02 23:44 ` Junio C Hamano
2017-10-02 6:56 ` [PATCH v6 0/7] Support %(trailers) arguments in for-each-ref(1) Jeff King
2017-10-03 6:24 ` Junio C Hamano
2017-10-03 6:36 ` Jeff King
2017-10-03 6:40 ` Junio C Hamano
2017-10-02 8:07 ` Junio C Hamano
2017-10-02 12:15 ` Junio C Hamano
2017-10-02 16:07 ` Taylor Blau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171001161852.84571-6-me@ttaylorr.com \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.