Subject: Re: [PATCH v5 02/11] ref-filter: make `color` use `ref_formatting_state`

From: Matthieu Moy <[email-masked]>
Date: Mon, 27 Jul 2015 14:47:20 +0200

Karthik Nayak <[email-masked]> writes:

> Make the `color` atom a pseudo atom and ensure that it uses
> `ref_formatting_state`.

Actually, I think this is an incorrect change.

Previously, %(color:...) was taking effect immediately, and after this
patch, it takes effect starting from the next atom.

Try this:

git for-each-ref --format '%(color:red)red %(color:reset)normal'

Before your patch, I get 'red' as red, and 'normal' as normal. After
your patch, I get no color at all, since %(color:...) just stores
information that is never used because I have no real atom.

> --- a/ref-filter.h
> +++ b/ref-filter.h
> @@ -19,11 +19,13 @@
>  struct atom_value {
>  	const char *s;
>  	unsigned long ul; /* used for sorting when not FIELD_STR */
> -	unsigned int pseudo_atom : 1; /*  atoms which aren't placeholders for ref attributes */
> +	unsigned int pseudo_atom : 1, /*  atoms which aren't placeholders for ref attributes */
> +		color : 1;
>  };

As a consequence of the remark above, I think the name and comment of
the field are misleading. There are 3 kinds of atoms:

* Placeholders for ref attributes

* Atoms that take action immediately, but that are not ref attributes
  like %(color)

* Atoms that only act as modifiers for the next atom. Perhaps they could
  be called "prefix atoms" or "modifier atoms".

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/