From: Patrick Steinhardt <ps@pks.im>
To: Lucas Seiki Oshiro <lucasseikioshiro@gmail.com>
Cc: git@vger.kernel.org, karthik.188@gmail.com
Subject: Re: [PATCH] repo: add --all to git-repo-info
Date: Tue, 16 Sep 2025 10:06:16 +0200 [thread overview]
Message-ID: <aMkaePi90Q6sXuO4@pks.im> (raw)
In-Reply-To: <20250915223618.13093-1-lucasseikioshiro@gmail.com>
On Mon, Sep 15, 2025 at 07:36:17PM -0300, Lucas Seiki Oshiro wrote:
> Add a new flag `--all` to git-repo-info for requesting all the available
> keys. By using this flag, the user can retrieve all the values instead
> of searching what are the desired keys for what they wants.
One thing I wonder is whether we actually need the "--all" flag in the
first place. Right now, when saying `git repo info` without any further
arguments, then the user will be met with complete silence. I don't
really think that this is useful as a default in any way, as it makes it
very difficult for the user to figure out what kind of information
exists in the first place.
So how about we don't introduce a separate flag, but instead detect the
case where the user passed no arguments at all and then print all values
by default? It changes the current behaviour, but on the other hand I
would argue that the current behaviour is not useful in the first place.
And the command is labelled as experimental anyway, so for now we still
can change it.
> diff --git a/builtin/repo.c b/builtin/repo.c
> index bbb0966f2d..906d8a3e12 100644
> --- a/builtin/repo.c
> +++ b/builtin/repo.c
> @@ -77,6 +77,24 @@ static get_value_fn *get_value_fn_for_key(const char *key)
> return found ? found->get_value : NULL;
> }
>
> +static void print_field(enum output_format format, const char *key,
> + struct strbuf *valbuf, struct strbuf *quotbuf)
> +{
> + strbuf_reset(quotbuf);
> +
> + switch (format) {
> + case FORMAT_KEYVALUE:
> + quote_c_style(valbuf->buf, quotbuf, NULL, 0);
> + printf("%s=%s\n", key, quotbuf->buf);
> + break;
> + case FORMAT_NUL_TERMINATED:
> + printf("%s\n%s%c", key, valbuf->buf, '\0');
> + break;
> + default:
> + BUG("not a valid output format: %d", format);
> + }
> +}
> +
> static int print_fields(int argc, const char **argv,
> struct repository *repo,
> enum output_format format)
Changes like this which are preparatory refactorings can also be split
out into separate commits. That makes it easier to see and review such a
change standalone.
> @@ -119,6 +124,26 @@ static int print_fields(int argc, const char **argv,
> return ret;
> }
>
> +static void print_all_fields(struct repository *repo,
> + enum output_format format)
> +{
> + struct strbuf valbuf = STRBUF_INIT;
> + struct strbuf quotbuf = STRBUF_INIT;
> +
> + for (unsigned long i = 0; i < ARRAY_SIZE(repo_info_fields); i++) {
> + struct field field = repo_info_fields[i];
> + get_value_fn *get_value = field.get_value;
> + const char *key = field.key;
Nit: I don't really feel like the `get_value` or `key` variables help
much. I'd just drop those.
> @@ -140,6 +165,7 @@ static int repo_info(int argc, const char **argv, const char *prefix,
> struct repository *repo)
> {
> enum output_format format = FORMAT_KEYVALUE;
> + int all_keys = 0;
> struct option options[] = {
> OPT_CALLBACK_F(0, "format", &format, N_("format"),
> N_("output format"),
> @@ -148,11 +174,17 @@ static int repo_info(int argc, const char **argv, const char *prefix,
> N_("synonym for --format=nul"),
> PARSE_OPT_NONEG | PARSE_OPT_NOARG,
> parse_format_cb),
> + OPT_BOOL(0, "all", &all_keys, N_("return all keys")),
> OPT_END()
> };
>
> argc = parse_options(argc, argv, prefix, options, repo_usage, 0);
>
> + if (all_keys) {
> + print_all_fields(repo, format);
> + return 0;
> + }
Instead of checking for `all_keys` we could check for `if (!argc)` if
you want to follow my suggestion.
> return print_fields(argc, argv, repo, format);
> }
>
> diff --git a/t/t1900-repo.sh b/t/t1900-repo.sh
> index 2beba67889..b1391a47b6 100755
> --- a/t/t1900-repo.sh
> +++ b/t/t1900-repo.sh
> @@ -110,4 +110,10 @@ test_expect_success 'git repo info uses the last requested format' '
> test_cmp expected actual
> '
>
> +test_expect_success 'git repo info --all returns all fields' '
> + git repo info layout.bare layout.shallow object.format references.format >expect &&
> + git repo info --all >actual &&
> + test_cmp expect actual
> +'
This test will obviously need to be adapted every time we add a new
field, which I think is fine. But we should adapt it so that it's easily
extensible without by just adding another line. E.g. like this:
test_expect_success 'git repo info --all returns all fields' '
git repo info \
layout.bare \
layout.shallow \
object.format \
references.format \
>expect &&
git repo info --all >actual &&
test_cmp expect actual
'
This ensures that it's as simple as adding a new line when we add a
specific field without having to rewrite the whole line.
Patrick
next prev parent reply other threads:[~2025-09-16 8:06 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-15 22:36 [PATCH] repo: add --all to git-repo-info Lucas Seiki Oshiro
2025-09-15 23:58 ` Junio C Hamano
2025-09-16 8:06 ` Patrick Steinhardt [this message]
2025-09-16 16:19 ` Junio C Hamano
2025-09-17 5:34 ` Patrick Steinhardt
2025-10-26 22:52 ` [PATCH v3 0/2] " Lucas Seiki Oshiro
2025-10-26 22:52 ` [PATCH v3 1/2] repo: factor out field printing to dedicated function Lucas Seiki Oshiro
2025-10-26 23:53 ` Eric Sunshine
2025-10-26 23:56 ` Eric Sunshine
2025-10-27 14:56 ` Junio C Hamano
2025-10-27 16:09 ` Eric Sunshine
2025-10-26 22:52 ` [PATCH v3 2/2] repo: add --all to git-repo-info Lucas Seiki Oshiro
2025-10-27 0:22 ` Eric Sunshine
2025-10-27 0:24 ` Eric Sunshine
2025-11-17 15:02 ` [PATCH v4 0/2] " Lucas Seiki Oshiro
2025-11-17 15:02 ` [PATCH v4 1/2] repo: factor out field printing to dedicated function Lucas Seiki Oshiro
2025-11-17 18:48 ` Junio C Hamano
2025-11-17 15:02 ` [PATCH v4 2/2] repo: add --all to git-repo-info Lucas Seiki Oshiro
2025-11-17 18:58 ` Junio C Hamano
2025-11-18 20:16 ` Lucas Seiki Oshiro
2025-11-18 21:28 ` Junio C Hamano
2025-11-20 22:50 ` Lucas Seiki Oshiro
2025-11-19 7:32 ` Eric Sunshine
2025-11-19 14:33 ` Junio C Hamano
2025-11-17 18:14 ` [PATCH v4 0/2] " Junio C Hamano
2025-11-18 20:37 ` [PATCH v5 " Lucas Seiki Oshiro
2025-11-18 20:37 ` [PATCH v5 1/2] repo: factor out field printing to dedicated function Lucas Seiki Oshiro
2025-11-18 20:37 ` [PATCH v5 2/2] repo: add --all to git-repo-info Lucas Seiki Oshiro
2025-11-18 21:34 ` [PATCH v5 0/2] " Junio C Hamano
2025-11-19 7:35 ` Eric Sunshine
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=aMkaePi90Q6sXuO4@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=karthik.188@gmail.com \
--cc=lucasseikioshiro@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).