From: Derrick Stolee via GitGitGadget Date: Tue, 10 Feb 2026 04:42:54 GMT Subject: [PATCH 0/5] [RFC] Make 'git config list --type=' parse and filter types Message-ID: I started down this road based on feedback on my 'git config-batch' RFC [1]. [1] https://lore.kernel.org/git/pull.2033.git.1770214803.gitgitgadget@gmail.com/ I had described my intention to use 'git config-batch' as a single process to load multiple config values one-by-one. Brian mentioned that 'git config list -z' would probably suffice, so I started experimenting in that direction [2]. [2] https://github.com/git-ecosystem/git-credential-manager/compare/main...derrickstolee:config-list However, I ran into a problem: the most critical performance bottleneck is related to path-formatted config values that are queried with 'git config get --type=path -z'. It wasn't hard to update things to lazily load the full list of config values by type [3], but I then noticed a big problem! [3] https://github.com/git-ecosystem/git-credential-manager/commit/d403c8e24ce6f37da920cce23842dd5a6cf6481d Problem: 'git config list' doesn't respect --type=! This boils down to the fact that the iterator function show_all_config() doesn't call format_config(), which includes the type-parsing code. This wasn't super trivial to update: 1. format_config() uses git_config_parse_*() methods, which die() on a bad parse. 2. The path parsing code didn't have a gentle version. 3. The two paths ('git config list' and 'git config --list') needed to standardize their display options to work with format_config(). 4. Finally, we need to filter out key-value pairs that don't match the given type. This is marked as an RFC because I need to add some more tests and because this is a behavior change! If there are any tools currently passing the --type= argument to git config list then they will have a change of behavior with this series. It's an easy workaround: drop the --type argument or add --no-type to go back to the previous behavior. Thanks for any and all feedback, -Stolee Derrick Stolee (5): config: move show_all_config() parse: add git_parse_maybe_pathname() config: allow format_config() to filter config: create special init for list mode config: make 'git config list --type=' work Documentation/git-config.adoc | 3 + builtin/config.c | 130 ++++++++++++++++++++++++---------- config.c | 14 +--- parse.c | 24 +++++++ parse.h | 2 + t/t1300-config.sh | 26 ++++++- 6 files changed, 147 insertions(+), 52 deletions(-) base-commit: 67ad42147a7acc2af6074753ebd03d904476118f Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2044%2Fderrickstolee%2Fconfig-list-type-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2044/derrickstolee/config-list-type-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/2044 -- gitgitgadget