Subject: Re: [PATCH] t6300: values containing ')' are broken in ref formats

From: Junio C Hamano <[email-masked]>
Date: Tue, 05 Nov 2024 17:18:10 -0800

Kousik Sanagavarapu <[email-masked]> writes:

> Document that values containing ')' in formats are not parsed correctly
> in ref-filter.

The problem is probably lack of a way to quote such a closing
parenthesis.

> However formats having a '(' instead in "value" will parse correctly
> because in a general format string we also mark start of the format by
> making note of '%(' instead of just '('.

So if you wanted to have a two-char sequence '%(' in value, you'd
see a similar problem?  If so, it is not quite a "bug" or "not
parsed correctly"---it is "because there is no way to include
closing ')' in the value (e.g., by quoting), you cannot write such a
string in the value part".

> This raises the question of what can be done to parse ')' in values of
> the format correctly.  It seems to me like a clean solution would
> involve a huge refactoring involving a large portion of ref-filter but I
> maybe wrong.

Yes, so I wouldn't even call the current behaviour "bug".  The
language is merely "limited" and the user cannot express certain
values with it at all.

Having said that, I just tried this

    $ git for-each-ref --format='%28%(refname)%29' refs/heads/master
    (refs/heads/master)

So, if there is anything that needs "fixing", wouldn't it be
documentation?

If I knew (or easily find out from "git for-each-ref --help") that
hex escapes %XX can be used, I wouldn't have written any of what I
said before "Having said that" in this response.