]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ref-filter: 'contents:trailers' show error if `:` is missing
authorHariom Verma <hariom18599@gmail.com>
Fri, 21 Aug 2020 21:06:14 +0000 (21:06 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 21 Aug 2020 21:46:22 +0000 (14:46 -0700)
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>
ref-filter.c
t/t6300-for-each-ref.sh

index 8447cb09be0c2741b5a20426e6c0db104339fa7e..f6200196a3483b450c6dc3f6608029c42e024d2a 100644 (file)
@@ -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;
index 5ee08cf514db8bced0188f8823bc8ff75ed5c69d..ff7313e9c3c5ee705fc221140150238d7b5217e5 100755 (executable)
@@ -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 &&