From: Patrick Steinhardt Date: Tue, 17 Feb 2026 09:04:47 GMT Subject: Re: [PATCH v2 03/13] config: make 'git config list --type=' work Message-ID: In-Reply-To: <6d2a48a3b7f61c068392e66933caaf1d78055857.1771026918.git.gitgitgadget@gmail.com> On Fri, Feb 13, 2026 at 11:55:08PM +0000, Derrick Stolee via GitGitGadget wrote: > From: Derrick Stolee > > Previously, the --type= argument to 'git config list' was ignored and > did nothing. Now, we add the use of format_config() to the > show_all_config() function so each key-value pair is attempted to be > parsed. This is our first use of the 'gently' parameter with a nonzero > value. > > When listing multiple values, our initial settings for the output format > is different. Add a new init helper to specify the fact that keys should > be shown and also add the default delimiters as they were unset in some > cases. > > If there is an error in parsing, then the row is not output. It might make sense to document the rationale behind this decision in the commit message. > diff --git a/builtin/config.c b/builtin/config.c > index b4c4228311..4c4c791883 100644 > --- a/builtin/config.c > +++ b/builtin/config.c > @@ -318,21 +318,12 @@ static int show_all_config(const char *key_, const char *value_, > { > const struct config_display_options *opts = cb; > const struct key_value_info *kvi = ctx->kvi; > + struct strbuf formatted = STRBUF_INIT; > > - if (opts->show_origin || opts->show_scope) { > - struct strbuf buf = STRBUF_INIT; > - if (opts->show_scope) > - show_config_scope(opts, kvi, &buf); > - if (opts->show_origin) > - show_config_origin(opts, kvi, &buf); > - /* Use fwrite as "buf" can contain \0's if "end_null" is set. */ > - fwrite(buf.buf, 1, buf.len, stdout); > - strbuf_release(&buf); > - } > - if (!opts->omit_values && value_) > - printf("%s%c%s%c", key_, opts->delim, value_, opts->term); > - else > - printf("%s%c", key_, opts->term); > + if (format_config(opts, &formatted, key_, value_, kvi, 1) >= 0) > + fwrite(formatted.buf, 1, formatted.len, stdout); We could probably use puts(3p) instead, but as we know the length of the data ahead of time it might be more efficient to use fwrite(3p) indeed. Ultimately I guess it doesn't matter much. Patrick