git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 5/5] config: make 'git config list --type=<X>' work

From
Patrick Steinhardt <ps@pks.im>
Date
Feb 11, 2026, 12:13 UTC
Message-ID
<aYxyeAQ_-9KXxI-L@pks.im>
In-Reply-To
<e27d52c4a5970f774e324b0a9c0badb0532bf3d4.1770698579.git.gitgitgadget@gmail.com>
On Tue, Feb 10, 2026 at 04:42:59AM +0000, Derrick Stolee via GitGitGadget wrote:
Show 8 quoted lines
> From: Derrick Stolee <stolee@gmail.com>
> 
> Previously, the --type=<X> 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.
> 
> If there is an error in parsing, then the row is not output.

I was a bit surprised at first, but now that I think about it a bit more I think this is sensible behaviour. If I ask for `git config list --type=int`, then I don't want to see any non-int configuration. I wouldn't even expect a warning, as the option essentially works like a filter.

Show 5 quoted lines
> This is a change in behavior! We are starting to respect an option that
> was previously ignored, leading to potential user confusion. This is
> probably still a good option, since the --type argument did not change
> behavior at all previously, so users can get the behavior they expect by
> removing the --type argument or adding the --no-type argument.

Yeah, I fully agree that this is a sensible change in behaviour. It is obviously broken right now, so I would claim that this is simply a bug fix.

> diff --git a/Documentation/git-config.adoc b/Documentation/git-config.adoc
> index ac3b536a15..5300dd4c51 100644
> --- a/Documentation/git-config.adoc
> +++ b/Documentation/git-config.adoc
The synopsis of `git config list` should also be amended.
Show 31 quoted lines
> diff --git a/builtin/config.c b/builtin/config.c
> index e69b26af6a..c83514b4ff 100644
> --- a/builtin/config.c
> +++ b/builtin/config.c
> @@ -363,21 +363,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, 0) >= 0)
> +		fwrite(formatted.buf, 1, formatted.len, stdout);
> +
> +	strbuf_release(&formatted);
>  	return 0;
>  }
>  

I wonder whether there is a good argument to be made here that we should keep the old logic in case no "--type=" parameter was given. In that case, for example the following output would remain the same:

Show 16 quoted lines
> diff --git a/t/t1300-config.sh b/t/t1300-config.sh
> index 9850fcd5b5..b5ce900126 100755
> --- a/t/t1300-config.sh
> +++ b/t/t1300-config.sh
> @@ -2459,9 +2459,10 @@ done
>  
>  cat >.git/config <<-\EOF &&
>  [section]
> -foo = true
> +foo = True
>  number = 10
>  big = 1M
> +path = ~/dir
>  EOF
>  
>  test_expect_success 'identical modern --type specifiers are allowed' '

I'm not really sure whether we want that though. I actually like that this also leads to some code duplication, so maybe this is fine?

Patrick
Previous: Derrick Stolee via GitGitGadgetNext: Derrick Stolee
Message 10 of 58 in “[RFC] Make 'git config list --type=' parse and filter types”
  1. 0/5 [RFC] Make 'git config list --type=' parse and filter typesDerrick Stolee via GitGitGadget, Feb 10, 2026
  2. 1/5 config: move show_all_config()Derrick Stolee via GitGitGadget, Feb 10, 2026
  3. 2/5 parse: add git_parse_maybe_pathname()Derrick Stolee via GitGitGadget, Feb 10, 2026
  4. Patrick SteinhardtFeb 11, 2026
  5. 3/5 config: allow format_config() to filterDerrick Stolee via GitGitGadget, Feb 10, 2026
  6. Junio C HamanoFeb 10, 2026
  7. Derrick StoleeFeb 10, 2026
  8. 4/5 config: create special init for list modeDerrick Stolee via GitGitGadget, Feb 10, 2026
  9. 5/5 config: make 'git config list --type=<X>' workDerrick Stolee via GitGitGadget, Feb 10, 2026
  10. Patrick SteinhardtFeb 11, 2026
  11. Derrick StoleeFeb 11, 2026
  12. Patrick SteinhardtFeb 12, 2026
  13. Junio C HamanoFeb 10, 2026
  14. Derrick StoleeFeb 10, 2026
  15. Patrick SteinhardtFeb 11, 2026
  16. 00/13 Make 'git config list --type=' parse and filter typesDerrick Stolee via GitGitGadget, Feb 13, 2026
  17. 01/13 config: move show_all_config()Derrick Stolee via GitGitGadget, Feb 13, 2026
  18. 02/13 config: add 'gently' parameter to format_config()Derrick Stolee via GitGitGadget, Feb 13, 2026
  19. Patrick SteinhardtFeb 17, 2026
  20. 03/13 config: make 'git config list --type=<X>' workDerrick Stolee via GitGitGadget, Feb 13, 2026
  21. Patrick SteinhardtFeb 17, 2026
  22. Junio C HamanoFeb 17, 2026
  23. Patrick SteinhardtFeb 17, 2026
  24. 04/13 config: format int64s gentlyDerrick Stolee via GitGitGadget, Feb 13, 2026
  25. Junio C HamanoFeb 14, 2026
  26. Patrick SteinhardtFeb 17, 2026
  27. Derrick StoleeFeb 23, 2026
  28. 05/13 config: format bools gentlyDerrick Stolee via GitGitGadget, Feb 13, 2026
  29. 06/13 config: format bools or ints gentlyDerrick Stolee via GitGitGadget, Feb 13, 2026
  30. Patrick SteinhardtFeb 17, 2026
  31. Derrick StoleeFeb 23, 2026
  32. 07/13 config: format bools or strings in helperDerrick Stolee via GitGitGadget, Feb 13, 2026
  33. 08/13 parse: add git_parse_maybe_pathname()Derrick Stolee via GitGitGadget, Feb 13, 2026
  34. 09/13 config: format paths gentlyDerrick Stolee via GitGitGadget, Feb 13, 2026
  35. Patrick SteinhardtFeb 17, 2026
  36. 10/13 config: format expiry dates gentlyDerrick Stolee via GitGitGadget, Feb 13, 2026
  37. 11/13 color: add color_parse_gently()Derrick Stolee via GitGitGadget, Feb 13, 2026
  38. Patrick SteinhardtFeb 17, 2026
  39. Junio C HamanoFeb 17, 2026
  40. Derrick StoleeFeb 23, 2026
  41. Junio C HamanoFeb 23, 2026
  42. 12/13 config: format colors gentlyDerrick Stolee via GitGitGadget, Feb 13, 2026
  43. 13/13 config: restructure format_config()Derrick Stolee via GitGitGadget, Feb 13, 2026
  44. Patrick SteinhardtFeb 17, 2026
  45. 00/13 Make 'git config list --type=' parse and filter typesDerrick Stolee via GitGitGadget, Feb 23, 2026
  46. 01/13 config: move show_all_config()Derrick Stolee via GitGitGadget, Feb 23, 2026
  47. 02/13 config: add 'gently' parameter to format_config()Derrick Stolee via GitGitGadget, Feb 23, 2026
  48. 03/13 config: make 'git config list --type=<X>' workDerrick Stolee via GitGitGadget, Feb 23, 2026
  49. 04/13 config: format int64s gentlyDerrick Stolee via GitGitGadget, Feb 23, 2026
  50. 05/13 config: format bools gentlyDerrick Stolee via GitGitGadget, Feb 23, 2026
  51. 06/13 config: format bools or ints gentlyDerrick Stolee via GitGitGadget, Feb 23, 2026
  52. 07/13 config: format bools or strings in helperDerrick Stolee via GitGitGadget, Feb 23, 2026
  53. 08/13 config: format paths gentlyDerrick Stolee via GitGitGadget, Feb 23, 2026
  54. 09/13 config: format expiry dates quietlyDerrick Stolee via GitGitGadget, Feb 23, 2026
  55. 10/13 color: add color_parse_quietly()Derrick Stolee via GitGitGadget, Feb 23, 2026
  56. 11/13 config: format colors quietlyDerrick Stolee via GitGitGadget, Feb 23, 2026
  57. 12/13 config: restructure format_config()Derrick Stolee via GitGitGadget, Feb 23, 2026
  58. 13/13 config: use an enum for typeDerrick Stolee via GitGitGadget, Feb 23, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.