All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com,
	"brian m. carlson" <sandals@crustytoothpaste.net>,
	"Phillip Wood" <phillip.wood123@gmail.com>,
	"Kristoffer Haugsbakk" <kristofferhaugsbakk@fastmail.com>,
	"Jean-Noël Avila" <jn.avila@free.fr>,
	"Derrick Stolee" <stolee@gmail.com>
Subject: [PATCH 0/5] [RFC] Make 'git config list --type=' parse and filter types
Date: Tue, 10 Feb 2026 04:42:54 +0000	[thread overview]
Message-ID: <pull.2044.git.1770698579.gitgitgadget@gmail.com> (raw)

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=<X>!

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=<X> 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=<X>' 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

             reply	other threads:[~2026-02-10  4:43 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-10  4:42 Derrick Stolee via GitGitGadget [this message]
2026-02-10  4:42 ` [PATCH 1/5] config: move show_all_config() Derrick Stolee via GitGitGadget
2026-02-10  4:42 ` [PATCH 2/5] parse: add git_parse_maybe_pathname() Derrick Stolee via GitGitGadget
2026-02-11 12:13   ` Patrick Steinhardt
2026-02-10  4:42 ` [PATCH 3/5] config: allow format_config() to filter Derrick Stolee via GitGitGadget
2026-02-10  5:04   ` Junio C Hamano
2026-02-10 18:12     ` Derrick Stolee
2026-02-10  4:42 ` [PATCH 4/5] config: create special init for list mode Derrick Stolee via GitGitGadget
2026-02-10  4:42 ` [PATCH 5/5] config: make 'git config list --type=<X>' work Derrick Stolee via GitGitGadget
2026-02-11 12:13   ` Patrick Steinhardt
2026-02-11 17:49     ` Derrick Stolee
2026-02-12  6:39       ` Patrick Steinhardt
2026-02-10  4:59 ` [PATCH 0/5] [RFC] Make 'git config list --type=' parse and filter types Junio C Hamano
2026-02-10 18:18   ` Derrick Stolee
2026-02-11 12:13 ` Patrick Steinhardt
2026-02-13 23:55 ` [PATCH v2 00/13] " Derrick Stolee via GitGitGadget
2026-02-13 23:55   ` [PATCH v2 01/13] config: move show_all_config() Derrick Stolee via GitGitGadget
2026-02-13 23:55   ` [PATCH v2 02/13] config: add 'gently' parameter to format_config() Derrick Stolee via GitGitGadget
2026-02-17  9:04     ` Patrick Steinhardt
2026-02-13 23:55   ` [PATCH v2 03/13] config: make 'git config list --type=<X>' work Derrick Stolee via GitGitGadget
2026-02-17  9:04     ` Patrick Steinhardt
2026-02-17 16:11       ` Junio C Hamano
2026-02-17 16:13         ` Patrick Steinhardt
2026-02-13 23:55   ` [PATCH v2 04/13] config: format int64s gently Derrick Stolee via GitGitGadget
2026-02-14  0:42     ` Junio C Hamano
2026-02-17  9:05     ` Patrick Steinhardt
2026-02-23  3:41       ` Derrick Stolee
2026-02-13 23:55   ` [PATCH v2 05/13] config: format bools gently Derrick Stolee via GitGitGadget
2026-02-13 23:55   ` [PATCH v2 06/13] config: format bools or ints gently Derrick Stolee via GitGitGadget
2026-02-17  9:05     ` Patrick Steinhardt
2026-02-23  3:25       ` Derrick Stolee
2026-02-13 23:55   ` [PATCH v2 07/13] config: format bools or strings in helper Derrick Stolee via GitGitGadget
2026-02-13 23:55   ` [PATCH v2 08/13] parse: add git_parse_maybe_pathname() Derrick Stolee via GitGitGadget
2026-02-13 23:55   ` [PATCH v2 09/13] config: format paths gently Derrick Stolee via GitGitGadget
2026-02-17  9:05     ` Patrick Steinhardt
2026-02-13 23:55   ` [PATCH v2 10/13] config: format expiry dates gently Derrick Stolee via GitGitGadget
2026-02-13 23:55   ` [PATCH v2 11/13] color: add color_parse_gently() Derrick Stolee via GitGitGadget
2026-02-17  9:05     ` Patrick Steinhardt
2026-02-17 16:20       ` Junio C Hamano
2026-02-23  2:12         ` Derrick Stolee
2026-02-23  5:03           ` Junio C Hamano
2026-02-13 23:55   ` [PATCH v2 12/13] config: format colors gently Derrick Stolee via GitGitGadget
2026-02-13 23:55   ` [PATCH v2 13/13] config: restructure format_config() Derrick Stolee via GitGitGadget
2026-02-17  9:05     ` Patrick Steinhardt
2026-02-23 12:26   ` [PATCH v3 00/13] Make 'git config list --type=' parse and filter types Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 01/13] config: move show_all_config() Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 02/13] config: add 'gently' parameter to format_config() Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 03/13] config: make 'git config list --type=<X>' work Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 04/13] config: format int64s gently Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 05/13] config: format bools gently Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 06/13] config: format bools or ints gently Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 07/13] config: format bools or strings in helper Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 08/13] config: format paths gently Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 09/13] config: format expiry dates quietly Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 10/13] color: add color_parse_quietly() Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 11/13] config: format colors quietly Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 12/13] config: restructure format_config() Derrick Stolee via GitGitGadget
2026-02-23 12:26     ` [PATCH v3 13/13] config: use an enum for type Derrick Stolee via GitGitGadget

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=pull.2044.git.1770698579.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jn.avila@free.fr \
    --cc=kristofferhaugsbakk@fastmail.com \
    --cc=phillip.wood123@gmail.com \
    --cc=sandals@crustytoothpaste.net \
    --cc=stolee@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.