aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHariom Verma <hariom18599@gmail.com>2020-08-21 21:06:14 +0000
committerJunio C Hamano <gitster@pobox.com>2020-08-21 14:46:22 -0700
commit2c22e102f8cae598061be509344c6fdaf99c7db7 (patch)
tree1d1734e63ff9fc4518ae61bac9b1d2f5af6ea37e
parenta8e0f50edc8c4203834587541eed842497e83287 (diff)
downloadgit-2c22e102f8cae598061be509344c6fdaf99c7db7.tar.xz
ref-filter: 'contents:trailers' show error if `:` is missing
The 'contents' atom does not show any error if used with 'trailers' atom and colon is missing before trailers arguments. e.g %(contents:trailersonly) works, while it shouldn't. It is definitely not an expected behavior. Let's fix this bug. Mentored-by: Christian Couder <chriscool@tuxfamily.org> Mentored-by: Heba Waly <heba.waly@gmail.com> Helped-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Hariom Verma <hariom18599@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--ref-filter.c8
-rwxr-xr-xt/t6300-for-each-ref.sh8
2 files changed, 13 insertions, 3 deletions
diff --git a/ref-filter.c b/ref-filter.c
index 8447cb09be..f6200196a3 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -342,9 +342,11 @@ static int contents_atom_parser(const struct ref_format *format, struct used_ato
atom->u.contents.option = C_SIG;
else if (!strcmp(arg, "subject"))
atom->u.contents.option = C_SUB;
- else if (skip_prefix(arg, "trailers", &arg)) {
- skip_prefix(arg, ":", &arg);
- if (trailers_atom_parser(format, atom, *arg ? arg : NULL, err))
+ else if (!strcmp(arg, "trailers")) {
+ if (trailers_atom_parser(format, atom, NULL, err))
+ return -1;
+ } else if (skip_prefix(arg, "trailers:", &arg)) {
+ if (trailers_atom_parser(format, atom, arg, err))
return -1;
} else if (skip_prefix(arg, "lines=", &arg)) {
atom->u.contents.option = C_LINES;
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index 5ee08cf514..ff7313e9c3 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -785,6 +785,14 @@ test_expect_success '%(trailers) rejects unknown trailers arguments' '
test_i18ncmp expect actual
'
+test_expect_success 'if arguments, %(contents:trailers) shows error if colon is missing' '
+ cat >expect <<-EOF &&
+ fatal: unrecognized %(contents) argument: trailersonly
+ EOF
+ test_must_fail git for-each-ref --format="%(contents:trailersonly)" 2>actual &&
+ test_i18ncmp 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 &&