git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Hariom Verma via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Hariom Verma <hariom18599@gmail.com>
Subject: Re: [PATCH 2/2] ref-filter: 'contents:trailers' show error if `:` is missing
Date: Wed, 19 Aug 2020 10:55:03 -0700	[thread overview]
Message-ID: <xmqqv9hettag.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: <7daf9335a501b99c29e299f72823fcb7e549e748.1597841551.git.gitgitgadget@gmail.com> (Hariom Verma via GitGitGadget's message of "Wed, 19 Aug 2020 12:52:31 +0000")

"Hariom Verma via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Hariom Verma <hariom18599@gmail.com>
>
> The 'contents' atom does not show any error if used with 'trailers'
> atom and semicolon 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>
> Signed-off-by: Hariom Verma <hariom18599@gmail.com>
> ---

Nice spotting.  7a5edbdb (ref-filter.c: parse trailers arguments
with %(contents) atom, 2017-10-01) talks about being deliberate
about the case where skip_prefix(":") does not find a colon after
the "trailers" token, but from the message it is clear that it
expected that the case happens only when "trailers" is at the end of
the string.

The new helper that is overly verbose and may be overkill.

Shouldn't this be clear enough, equivalent and sufficient?

	else if (skip_prefix(arg, "trailers", &arg) &&
		 (!*arg || *arg == ':'))) {
		if (trailers_atom_parser(...);

That is, we not just make sure the string begins with "trailers",
but also make sure it either (1) ends the string (i.e. the token is
just "trailers"), or (2) is followed by a colon ':', before entering
the block to handle "trailers[:anything]".  If we later add a new
atom "trailersonly", that will not be handled here, but elsewhere in
the "else if" cascade.

>  ref-filter.c            | 21 ++++++++++++++++++---
>  t/t6300-for-each-ref.sh |  9 +++++++++
>  2 files changed, 27 insertions(+), 3 deletions(-)
>
> diff --git a/ref-filter.c b/ref-filter.c
> index ba85869755..dc31fbbe51 100644
> --- a/ref-filter.c
> +++ b/ref-filter.c
> @@ -332,6 +332,22 @@ static int trailers_atom_parser(const struct ref_format *format, struct used_ato
>  	return 0;
>  }
>  
> +static int check_format_field(const char *arg, const char *field, const char **option)
> +{
> +	const char *opt;
> +	if (skip_prefix(arg, field, &opt)) {
> +		if (*opt == '\0') {
> +			*option = NULL;
> +			return 1;
> +		}
> +		else if (*opt == ':') {
> +			*option = ++opt;
> +			return 1;
> +		}
> +	}
> +	return 0;
> +}
> +
>  static int contents_atom_parser(const struct ref_format *format, struct used_atom *atom,
>  				const char *arg, struct strbuf *err)
>  {
> @@ -345,9 +361,8 @@ 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 (check_format_field(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;

  reply	other threads:[~2020-08-19 17:55 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-19 12:52 [PATCH 0/2] Fix trailers atom bug and improved tests Hariom Verma via GitGitGadget
2020-08-19 12:52 ` [PATCH 1/2] t6300: unify %(trailers) and %(contents:trailers) tests Hariom Verma via GitGitGadget
2020-08-19 17:31   ` Junio C Hamano
2020-08-21 10:03     ` Hariom verma
2020-08-19 12:52 ` [PATCH 2/2] ref-filter: 'contents:trailers' show error if `:` is missing Hariom Verma via GitGitGadget
2020-08-19 17:55   ` Junio C Hamano [this message]
2020-08-19 19:07     ` Junio C Hamano
2020-08-19 19:39       ` Eric Sunshine
2020-08-19 22:08         ` Junio C Hamano
2020-08-20 17:19           ` Hariom verma
2020-08-21 10:11 ` [PATCH v2 0/2] Fix trailers atom bug and improved tests Hariom Verma via GitGitGadget
2020-08-21 10:11   ` [PATCH v2 1/2] t6300: unify %(trailers) and %(contents:trailers) tests Hariom Verma via GitGitGadget
2020-08-21 10:11   ` [PATCH v2 2/2] ref-filter: 'contents:trailers' show error if `:` is missing Hariom Verma via GitGitGadget
2020-08-21 16:56     ` Eric Sunshine
2020-08-21 19:17       ` Junio C Hamano
2020-08-23 19:25         ` Hariom verma
2020-08-24  3:49           ` Eric Sunshine
2020-08-24 23:32             ` Hariom verma
2020-08-26  6:18               ` Christian Couder
2020-08-26  6:22                 ` Christian Couder
2020-08-26 15:18                 ` Hariom verma
2020-08-21 21:06   ` [PATCH v3 0/4] [GSoC] Fix trailers atom bug and improved tests Hariom Verma via GitGitGadget
2020-08-21 21:06     ` [PATCH v3 1/4] t6300: unify %(trailers) and %(contents:trailers) tests Hariom Verma via GitGitGadget
2020-08-21 21:06     ` [PATCH v3 2/4] ref-filter: 'contents:trailers' show error if `:` is missing Hariom Verma via GitGitGadget
2020-08-21 21:13       ` Eric Sunshine
2020-08-21 16:19         ` Hariom verma
2020-08-21 21:54         ` Junio C Hamano
2020-08-21 21:06     ` [PATCH v3 3/4] pretty.c: refactor trailer logic to `format_set_trailers_options()` Hariom Verma via GitGitGadget
2020-08-21 21:06     ` [PATCH v3 4/4] ref-filter: using pretty.c logic for trailers Hariom Verma via GitGitGadget
2020-08-21 21:56     ` [PATCH v3 0/4] [GSoC] Fix trailers atom bug and improved tests Junio C Hamano
2020-08-22 14:03       ` Hariom verma

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=xmqqv9hettag.fsf@gitster.c.googlers.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=hariom18599@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).