Re: [PATCH 3/5] pretty format %(trailers): add a "keyonly"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Dec 5, 2020 at 2:39 AM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote:
>
> Add support for a "keyonly". This allows for easier parsing out of the
> key and value. Before if you didn't want to make assumptions about how
> the key was formatted. You'd need to parse it out as e.g.:
>
>     --pretty=format:'%H%x00%(trailers:separator=%x00%x00)' \
>                        '%x00%(trailers:separator=%x00%x00,valueonly)'
>
> And then proceed to deduce keys by looking at those two and
> subtracting the value plus the hardcoded ": " separator from the
> non-valueonly %(trailers) line. Now it's possible to simply do:
>
>     --pretty=format:'%H%x00%(trailers:separator=%x00%x00,keyonly)' \
>                     '%x00%(trailers:separator=%x00%x00,valueonly)'
>
> Which at least reduces it to a state machine where you get N keys and
> correlate them with N values. Even better would be to have a way to
> change the ": " delimiter to something easily machine-readable (a key
> might contain ": " too). A follow-up change will add support for that.

Well explained.

> diff --git a/trailer.c b/trailer.c
> index b00b35ea0eb..40f31e4dfc2 100644
> --- a/trailer.c
> +++ b/trailer.c
> @@ -1233,8 +1233,11 @@ static void format_trailer_info(struct strbuf *out,
>                                 if (opts->separator && out->len != origlen)
>                                         strbuf_addbuf(out, opts->separator);
>                                 if (!opts->value_only)
> -                                       strbuf_addf(out, "%s: ", tok.buf);
> -                               strbuf_addbuf(out, &val);
> +                                       strbuf_addstr(out, tok.buf);

Maybe `strbuf_addbuf(out, &tok);`

> +                               if (!opts->key_only && !opts->value_only)
> +                                       strbuf_addstr(out, ": ");
> +                               if (!opts->key_only)
> +                                       strbuf_addbuf(out, &val);

The above is probably correct, but it feels strange to write the key
after the separator and the value, and that the key is in a variable
called "val".




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux