Subject: Re: [PATCH 08/15] [GSOC] ref-filter: add cat_file_mode in struct ref_format

From: Ævar Arnfjörð Bjarmason <[email-masked]>
Date: Fri, 02 Jul 2021 15:32:38 +0200

On Thu, Jul 01 2021, ZheNing Hu via GitGitGadget wrote:

> From: ZheNing Hu <[email-masked]>
>
> Add `cat_file_mode` member in struct `ref_format`, when
> `cat-file --batch` use ref-filter logic later, it can help
> us reject atoms in verify_ref_format() which cat-file cannot
> use, e.g. `%(refname)`, `%(push)`, `%(upstream)`...
>
> Mentored-by: Christian Couder <[email-masked]>
> Mentored-by: Hariom Verma <[email-masked]>
> Signed-off-by: ZheNing Hu <[email-masked]>
> ---
>  ref-filter.c | 11 +++++++++--
>  ref-filter.h |  1 +
>  2 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/ref-filter.c b/ref-filter.c
> index 731e596eaa6..45122959eef 100644
> --- a/ref-filter.c
> +++ b/ref-filter.c
> @@ -1021,8 +1021,15 @@ int verify_ref_format(struct ref_format *format)
>  		if (at < 0)
>  			die("%s", err.buf);
>  
> -		if (used_atom[at].atom_type == ATOM_REST)
> -			die("this command reject atom %%(%.*s)", (int)(ep - sp - 2), sp + 2);
> +		if ((!format->cat_file_mode && used_atom[at].atom_type == ATOM_REST) ||
> +		    (format->cat_file_mode && (used_atom[at].atom_type == ATOM_FLAG ||
> +					       used_atom[at].atom_type == ATOM_HEAD ||
> +					       used_atom[at].atom_type == ATOM_PUSH ||
> +					       used_atom[at].atom_type == ATOM_REFNAME ||
> +					       used_atom[at].atom_type == ATOM_SYMREF ||
> +					       used_atom[at].atom_type == ATOM_UPSTREAM ||
> +					       used_atom[at].atom_type == ATOM_WORKTREEPATH)))
> +			die(_("this command reject atom %%(%.*s)"), (int)(ep - sp - 2), sp + 2);

Maybe it was brought up already, but those ATOM_* are mostly continuous
where they're declared, Maybe worth making it so having a comment like:

    /* These need to be in order, used in verify_ref_format */

And then just doing:

    used_atom[at].atom_type >= FIRST_OF_THOSE &&
    used_atom[at].atom_type >= LAST_OF_THOSE

Maybe it's too magical and peeking under the hood of an enum...