Subject: Re: [PATCH 2/5] [GSOC] ref-filter: add %(raw) atom

From: Ævar Arnfjörð Bjarmason <[email-masked]>
Date: Thu, 22 Jul 2021 10:06:21 +0200

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

> [..] add a new member in
> `struct atom_value`: `s_size`, which can record raw object size, it
> can help us add raw object data to the buffer or compare two buffers
> which contain raw object data.

I didn't look in detail, just one nit/comment, no need to re-roll for this:

>  struct atom_value {
>  	const char *s;
> +	size_t s_size;
>  	int (*handler)(struct atom_value *atomv, struct ref_formatting_state *state,
>  		       struct strbuf *err);
>  	uintmax_t value; /* used for sorting when not FIELD_STR */
>  	struct used_atom *atom;
>  };
>  
> +#define ATOM_VALUE_S_SIZE_INIT (-1)
> +

This and then later doing (this appears to be the only initialization?):

>  	if (format->need_color_reset_at_eol) {
>  		struct atom_value resetv;
> +		resetv.s_size = ATOM_VALUE_S_SIZE_INIT;
>  		resetv.s = GIT_COLOR_RESET;
>  		if (append_atom(&resetv, &state, error_buf)) {
>  			pop_stack_element(&state.stack);

Is a rather unusual pattern, more typical would be:

	struct atom_value { .... }
	#define ATOM_VALUE_INIT { \
		.s_size = -1, \
	}

Then:

	struct atom_value resetv = ATOM_VALUE_INIT;

You could keep that "#define ATOM_VALUE_S_SIZE_INIT (-1)" to check the
init value, personally I think it's just fine to hardcode the -1 literal
and do "size < 0" checks, which we us as convention in a lot of other
places for "not initialized".