Re: [PATCH v4 6/6] for-each-ref: avoid color leakage
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 18, 2013, 21:55 UTC
- Message-ID
- <xmqqwqk59xyz.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <1384796353-18701-7-git-send-email-artagnon@gmail.com>
Ramkumar Ramachandra <artagnon@gmail.com> writes:
Show 23 quoted lines
> To make sure that an invocation like the following doesn't leak color,
>
> $ git for-each-ref --format='%(subject)%(color:green)'
>
> auto-reset at the end of the format string when the last color token
> seen in the format string isn't a color-reset.
>
> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
> ---
> builtin/for-each-ref.c | 29 +++++++++++++++++++++++++----
> t/t6300-for-each-ref.sh | 2 +-
> 2 files changed, 26 insertions(+), 5 deletions(-)
>
> diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
> index 2ff4e54..04e35ba 100644
> --- a/builtin/for-each-ref.c
> +++ b/builtin/for-each-ref.c
> @@ -23,6 +23,7 @@ typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
> struct atom_value {
> const char *s;
> unsigned long ul; /* used for sorting when not FIELD_STR */
> + int color : 2; /* 1 indicates color, 2 indicates color-reset */
> };Hmph. It looks wasteful to have this information in atom_value.
Isn't a new single bit in "struct refinfo" all you need to keep track of, to see the last %(color:something) you ever saw is for a color that is not reset?