From: Phillip Wood <phillip.wood123@gmail•com>
To: Lucas Seiki Oshiro <lucasseikioshiro@gmail•com>, git@vger•kernel.org
Cc: ps@pks•im, karthik.188@gmail•com, ben.knoble@gmail•com,
gitster@pobox•com, phillip.wood@dunelm•org.uk
Subject: Re: [GSoC RFC PATCH v3 0/5] repo-info: add new command for retrieving repository info
Date: Tue, 8 Jul 2025 11:11:58 +0100 [thread overview]
Message-ID: <c1f871ec-96a0-4dbc-b84b-4add36bec682@gmail.com> (raw)
In-Reply-To: <20250706231938.16113-1-lucasseikioshiro@gmail.com>
Hi Lucas
On 07/07/2025 00:19, Lucas Seiki Oshiro wrote:
> Hi!
>
> This is the third version of the patchset introducing the new Git command
> called `repo-info`, which will return repository information currently stored
> under git-rev-parse using machine-readable formats.
> The main changes since v2 are:
>
> - Documentation for git-repo-info has been added.
> - The `--allow-empty` flag was removed. In this version, repo-info no longer
> returns a default set of data when called without parameters. However, an
> `--all` flag is planned for a future version.
> - The `plaintext` format was replaced by a null-terminated format, following
> the syntax of `git config --list -z`.
These all look like good changes. Looking through this series I do think
that it would be more readable and maintainable if you adopted the table
drive approach suggested by Junio. That way we would avoid the nested
switch statements and each piece of information only needs to be
retrieved once rather that having to retrieve it separately for the JSON
and plaintext output. Below is a sketch of might look. Each key is
handled by a callback and we have a table that maps key names to
callbacks. For the json output we use one json writer per category to
build output for each category.
Best Wishes
Phillip
enum format {
FORMAT_JSON,
FORMAT_PLAINTEXT,
};
enum category {
CATEGORY_LAYOUT,
};
static const char *category_name[] = {
[CATEGORY_LAYOUT] = "layout",
}
struct context {
struct json_writer *writer[ARRAY_SIZE(category_name)];
enum format format;
};
static struct ensure_writer(struct context ctx, enum category cat)
{
struct json_writer *writer = ctx.writer[cat];
if (!writer) {
writer = xmalloc(sizeof(*writer));
jw_init(writer);
jw_object_begin(writer, 1);
ctx->writer[cat] = writer;
}
return writer;
}
static void handle_layout_bare(struct context ctx)
{
int bare = ...;
if (ctx->format == FORMAT_JSON) {
struct json_writer *writer =
ensure_writer(ctx, CATEGORY_LAYOUT);
jw_object_bool(writer, "layout.bare", bare);
} else {
printf("%s\n%s\c", "layout.bare", bare ? "true", "false", '\0');
}
}
static int cmd_repo_info(int argc, const char **argv, sturct repo *r)
{
struct context = { 0 };
struct {
const char *key;
void (*cb)(struct *ctx);
} handler = {
{ "layout.bare", handle_layout_bare, },
};
/* parse options */
for (int i = 0; i < argc; i++) {
/* TODO use bsearch()? */
for (size_t j = 0; j < ARRAY_SIZE(handler); j++) {
if (!strcmp(argv[i], handler[j].key) {
handler[j].cb(&ctx);
break;
}
}
}
if (ctx->format == JSON) {
struct json_writer writer = JSON_WRITER_INIT;
jw_object_begin(&writer, 1);
for (size_t i = 0; i < ARRAY_SIZE(category); i++) {
if (ctx.writer[i]) {
jw_object_end(ctx.writer[i]);
jw_object_sub_obj(&writer,
category_name[i],
ctx.writer[i]);
}
}
jw_object_end(&writer);
fputs(writer.buf.buf);
}
context_release(&ctx);
return 0;
}
next prev parent reply other threads:[~2025-07-08 10:12 UTC|newest]
Thread overview: 226+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-10 15:21 [GSoC RFC PATCH 0/5] repo-info: add new command for retrieving repository info Lucas Seiki Oshiro
2025-06-10 15:21 ` [GSoC RFC PATCH 1/5] repo-info: declare the repo-info command Lucas Seiki Oshiro
2025-06-11 8:59 ` Karthik Nayak
2025-06-10 15:21 ` [GSoC RFC PATCH 2/5] repo-info: add the --format flag Lucas Seiki Oshiro
2025-06-11 9:30 ` Karthik Nayak
2025-06-12 17:56 ` Lucas Seiki Oshiro
2025-06-13 7:31 ` Karthik Nayak
2025-06-10 15:21 ` [GSoC RFC PATCH 3/5] repo-info: add the field references.format Lucas Seiki Oshiro
2025-06-11 12:59 ` Karthik Nayak
2025-06-12 15:01 ` Junio C Hamano
2025-06-10 15:21 ` [GSoC RFC PATCH 4/5] repo-info: add field layout.bare Lucas Seiki Oshiro
2025-06-11 13:13 ` Karthik Nayak
2025-06-12 19:39 ` Lucas Seiki Oshiro
2025-06-12 19:53 ` Junio C Hamano
2025-06-10 15:21 ` [GSoC RFC PATCH 5/5] repo-info: add field layout.shallow Lucas Seiki Oshiro
2025-06-10 16:39 ` [GSoC RFC PATCH 0/5] repo-info: add new command for retrieving repository info Kristoffer Haugsbakk
2025-06-10 16:40 ` Junio C Hamano
2025-06-12 20:25 ` Lucas Seiki Oshiro
2025-06-12 21:01 ` Junio C Hamano
2025-06-16 22:19 ` Lucas Seiki Oshiro
2025-06-16 22:40 ` Junio C Hamano
2025-06-19 1:44 ` Lucas Seiki Oshiro
2025-06-11 13:17 ` Karthik Nayak
2025-06-19 22:57 ` [GSoC RFC PATCH v2 0/7] " Lucas Seiki Oshiro
2025-06-19 22:57 ` [GSoC RFC PATCH v2 1/7] repo-info: declare the repo-info command Lucas Seiki Oshiro
2025-06-20 7:36 ` Karthik Nayak
2025-06-20 23:55 ` Junio C Hamano
2025-06-23 9:19 ` Karthik Nayak
2025-06-23 19:04 ` Lucas Seiki Oshiro
2025-06-20 7:56 ` Karthik Nayak
2025-06-24 14:03 ` Phillip Wood
2025-07-03 11:31 ` Patrick Steinhardt
2025-07-04 21:40 ` Lucas Seiki Oshiro
2025-07-07 6:01 ` Patrick Steinhardt
2025-07-09 20:05 ` Justin Tobler
2025-06-19 22:57 ` [GSoC RFC PATCH v2 2/7] repo-info: add the --format flag Lucas Seiki Oshiro
2025-06-20 8:06 ` Karthik Nayak
2025-06-20 21:31 ` Junio C Hamano
2025-07-03 11:31 ` Patrick Steinhardt
2025-06-19 22:57 ` [GSoC RFC PATCH v2 3/7] repo-info: add plaintext as an output format Lucas Seiki Oshiro
2025-06-20 21:37 ` Junio C Hamano
2025-07-03 11:32 ` Patrick Steinhardt
2025-06-19 22:57 ` [GSoC RFC PATCH v2 4/7] repo-info: add the --allow-empty flag Lucas Seiki Oshiro
2025-06-20 9:54 ` Karthik Nayak
2025-06-23 2:39 ` Lucas Seiki Oshiro
2025-06-20 21:39 ` Junio C Hamano
2025-06-23 9:26 ` Karthik Nayak
2025-06-23 20:28 ` Lucas Seiki Oshiro
2025-06-19 22:57 ` [GSoC RFC PATCH v2 5/7] repo-info: add the field references.format Lucas Seiki Oshiro
2025-06-20 22:26 ` Junio C Hamano
2025-06-24 14:03 ` Phillip Wood
2025-06-24 15:25 ` Junio C Hamano
2025-06-25 8:40 ` Phillip Wood
2025-07-03 11:32 ` Patrick Steinhardt
2025-07-04 21:11 ` Lucas Seiki Oshiro
2025-06-19 22:57 ` [GSoC RFC PATCH v2 6/7] repo-info: add field layout.bare Lucas Seiki Oshiro
2025-07-03 11:32 ` Patrick Steinhardt
2025-07-03 14:14 ` Lucas Seiki Oshiro
2025-07-04 8:32 ` Phillip Wood
2025-06-19 22:57 ` [GSoC RFC PATCH v2 7/7] repo-info: add field layout.shallow Lucas Seiki Oshiro
2025-06-23 13:42 ` [GSoC RFC PATCH v2 0/7] repo-info: add new command for retrieving repository info Phillip Wood
2025-06-23 18:49 ` Lucas Seiki Oshiro
2025-06-24 13:03 ` Phillip Wood
2025-06-24 13:43 ` Junio C Hamano
2025-07-01 22:18 ` Lucas Seiki Oshiro
2025-07-02 9:10 ` phillip.wood123
2025-07-06 23:19 ` [GSoC RFC PATCH v3 0/5] " Lucas Seiki Oshiro
2025-07-06 23:19 ` [GSoC RFC PATCH v3 1/5] repo-info: declare the repo-info command Lucas Seiki Oshiro
2025-07-06 23:19 ` [GSoC RFC PATCH v3 2/5] repo-info: add the --format flag Lucas Seiki Oshiro
2025-07-06 23:19 ` [GSoC RFC PATCH v3 3/5] repo-info: add the field references.format Lucas Seiki Oshiro
2025-07-06 23:19 ` [GSoC RFC PATCH v3 4/5] repo-info: add field layout.bare Lucas Seiki Oshiro
2025-07-06 23:19 ` [GSoC RFC PATCH v3 5/5] repo-info: add field layout.shallow Lucas Seiki Oshiro
2025-07-08 10:11 ` Phillip Wood [this message]
2025-07-08 19:27 ` [GSoC RFC PATCH v3 0/5] repo-info: add new command for retrieving repository info Lucas Seiki Oshiro
2025-07-10 13:15 ` Phillip Wood
2025-07-11 17:13 ` Lucas Seiki Oshiro
2025-07-11 17:37 ` Justin Tobler
2025-07-14 23:52 ` [GSoC RFC PATCH v4 0/4] repo: " Lucas Seiki Oshiro
2025-07-14 23:52 ` [GSoC RFC PATCH v4 1/4] repo: declare the repo command Lucas Seiki Oshiro
2025-07-15 11:52 ` Karthik Nayak
2025-07-15 11:59 ` Patrick Steinhardt
2025-07-15 18:38 ` Justin Tobler
2025-07-20 19:51 ` Lucas Seiki Oshiro
2025-07-15 18:19 ` Justin Tobler
2025-07-14 23:52 ` [GSoC RFC PATCH v4 2/4] repo: add the field references.format Lucas Seiki Oshiro
2025-07-15 11:59 ` Patrick Steinhardt
2025-07-18 19:13 ` Lucas Seiki Oshiro
2025-07-15 12:23 ` Karthik Nayak
2025-07-15 19:15 ` Justin Tobler
2025-07-16 5:38 ` Patrick Steinhardt
2025-07-16 14:04 ` Justin Tobler
2025-07-17 13:03 ` Patrick Steinhardt
2025-07-17 16:06 ` Justin Tobler
2025-07-18 20:26 ` Lucas Seiki Oshiro
2025-07-21 14:41 ` Justin Tobler
2025-07-14 23:52 ` [GSoC RFC PATCH v4 3/4] repo: add field layout.bare Lucas Seiki Oshiro
2025-07-14 23:52 ` [GSoC RFC PATCH v4 4/4] repo: add field layout.shallow Lucas Seiki Oshiro
2025-07-15 10:34 ` [GSoC RFC PATCH v4 0/4] repo: add new command for retrieving repository info Oswald Buddenhagen
2025-07-15 11:58 ` Patrick Steinhardt
2025-07-15 12:20 ` Oswald Buddenhagen
2025-07-15 19:36 ` Justin Tobler
2025-07-15 16:49 ` Junio C Hamano
2025-07-17 10:25 ` Oswald Buddenhagen
2025-07-17 10:42 ` Patrick Steinhardt
2025-07-16 20:20 ` Junio C Hamano
2025-07-16 20:33 ` Junio C Hamano
2025-07-21 22:05 ` Lucas Seiki Oshiro
2025-07-22 0:28 ` [GSoC PATCH v5 0/5] " Lucas Seiki Oshiro
2025-07-22 0:28 ` [GSoC PATCH v5 1/5] repo: declare the repo command Lucas Seiki Oshiro
2025-07-22 9:03 ` Karthik Nayak
2025-07-22 15:21 ` Junio C Hamano
2025-07-23 16:28 ` Lucas Seiki Oshiro
2025-07-23 17:48 ` Junio C Hamano
2025-07-24 6:22 ` Patrick Steinhardt
2025-07-24 16:06 ` Junio C Hamano
2025-07-25 5:10 ` Patrick Steinhardt
2025-07-26 21:54 ` Lucas Seiki Oshiro
2025-07-28 17:56 ` Junio C Hamano
2025-07-23 15:49 ` Lucas Seiki Oshiro
2025-07-23 20:03 ` Jean-Noël AVILA
2025-07-22 0:28 ` [GSoC PATCH v5 2/5] repo: add the field references.format Lucas Seiki Oshiro
2025-07-22 9:16 ` Karthik Nayak
2025-07-22 19:25 ` Justin Tobler
2025-07-23 14:53 ` Phillip Wood
2025-07-23 17:44 ` Lucas Seiki Oshiro
2025-07-23 18:26 ` Lucas Seiki Oshiro
2025-07-24 6:22 ` Patrick Steinhardt
2025-07-22 0:28 ` [GSoC PATCH v5 3/5] repo: add field layout.bare Lucas Seiki Oshiro
2025-07-22 0:28 ` [GSoC PATCH v5 4/5] repo: add field layout.shallow Lucas Seiki Oshiro
2025-07-22 0:28 ` [GSoC PATCH v5 5/5] repo: add the --format flag Lucas Seiki Oshiro
2025-07-22 9:26 ` Karthik Nayak
2025-07-24 6:22 ` Patrick Steinhardt
2025-07-27 17:51 ` [GSoC PATCH v5 0/5] repo: add new command for retrieving repository info Lucas Seiki Oshiro
2025-07-27 17:51 ` [GSoC PATCH v5 1/5] repo: declare the repo command Lucas Seiki Oshiro
2025-07-27 20:20 ` Eric Sunshine
2025-07-27 17:51 ` [GSoC PATCH v5 2/5] repo: add the field references.format Lucas Seiki Oshiro
2025-07-27 21:16 ` Eric Sunshine
2025-07-31 19:39 ` Lucas Seiki Oshiro
2025-07-29 9:35 ` Patrick Steinhardt
2025-07-31 19:49 ` Lucas Seiki Oshiro
2025-07-27 17:51 ` [GSoC PATCH v5 3/5] repo: add field layout.bare Lucas Seiki Oshiro
2025-07-27 17:51 ` [GSoC PATCH v5 4/5] repo: add field layout.shallow Lucas Seiki Oshiro
2025-07-27 21:45 ` Eric Sunshine
2025-07-27 17:51 ` [GSoC PATCH v5 5/5] repo: add the --format flag Lucas Seiki Oshiro
2025-07-27 22:02 ` Eric Sunshine
2025-07-29 0:15 ` Ben Knoble
2025-07-29 0:27 ` Eric Sunshine
2025-07-29 0:38 ` Ben Knoble
2025-07-29 0:39 ` Eric Sunshine
2025-07-31 23:01 ` Lucas Seiki Oshiro
2025-07-31 23:15 ` Lucas Seiki Oshiro
2025-07-27 20:11 ` [GSoC PATCH v5 0/5] repo: add new command for retrieving repository info Eric Sunshine
2025-07-29 9:35 ` Patrick Steinhardt
2025-07-30 15:26 ` Lucas Seiki Oshiro
2025-08-01 13:11 ` [GSoC PATCH v7 " Lucas Seiki Oshiro
2025-08-01 13:11 ` [GSoC PATCH v7 1/5] repo: declare the repo command Lucas Seiki Oshiro
2025-08-01 13:11 ` [GSoC PATCH v7 2/5] repo: add the field references.format Lucas Seiki Oshiro
2025-08-01 20:59 ` Eric Sunshine
2025-08-03 21:47 ` Lucas Seiki Oshiro
2025-08-01 13:11 ` [GSoC PATCH v7 3/5] repo: add the field layout.bare Lucas Seiki Oshiro
2025-08-01 21:21 ` Eric Sunshine
2025-08-03 22:54 ` Lucas Seiki Oshiro
2025-08-03 23:06 ` Eric Sunshine
2025-08-05 12:50 ` Patrick Steinhardt
2025-08-01 13:11 ` [GSoC PATCH v7 4/5] repo: add the field layout.shallow Lucas Seiki Oshiro
2025-08-05 12:50 ` Patrick Steinhardt
2025-08-01 13:11 ` [GSoC PATCH v7 5/5] repo: add the --format flag Lucas Seiki Oshiro
2025-08-01 19:25 ` Junio C Hamano
2025-08-01 20:27 ` Jean-Noël AVILA
2025-08-01 21:50 ` Eric Sunshine
2025-08-05 12:50 ` Patrick Steinhardt
2025-08-05 12:50 ` [GSoC PATCH v7 0/5] repo: add new command for retrieving repository info Patrick Steinhardt
2025-08-06 19:55 ` [GSoC PATCH v8 " Lucas Seiki Oshiro
2025-08-06 19:55 ` [GSoC PATCH v8 1/5] repo: declare the repo command Lucas Seiki Oshiro
2025-08-06 19:55 ` [GSoC PATCH v8 2/5] repo: add the field references.format Lucas Seiki Oshiro
2025-08-07 7:43 ` Karthik Nayak
2025-08-06 19:55 ` [GSoC PATCH v8 3/5] repo: add the field layout.bare Lucas Seiki Oshiro
2025-08-07 5:20 ` Patrick Steinhardt
2025-08-06 19:55 ` [GSoC PATCH v8 4/5] repo: add the field layout.shallow Lucas Seiki Oshiro
2025-08-06 19:55 ` [GSoC PATCH v8 5/5] repo: add the --format flag Lucas Seiki Oshiro
2025-08-07 5:20 ` Patrick Steinhardt
2025-08-07 15:44 ` Junio C Hamano
2025-08-06 22:38 ` [GSoC PATCH v8 0/5] repo: add new command for retrieving repository info Junio C Hamano
2025-08-07 7:48 ` Karthik Nayak
2025-08-07 15:02 ` [GSoC PATCH v9 " Lucas Seiki Oshiro
2025-08-07 15:02 ` [GSoC PATCH v9 1/5] repo: declare the repo command Lucas Seiki Oshiro
2025-08-07 15:02 ` [GSoC PATCH v9 2/5] repo: add the field references.format Lucas Seiki Oshiro
2025-08-11 5:12 ` Eric Sunshine
2025-08-11 14:41 ` Phillip Wood
2025-08-11 15:44 ` Junio C Hamano
2025-08-13 21:18 ` Lucas Seiki Oshiro
2025-08-13 21:46 ` Eric Sunshine
2025-08-13 22:24 ` Lucas Seiki Oshiro
2025-08-14 13:58 ` Phillip Wood
2025-08-07 15:02 ` [GSoC PATCH v9 3/5] repo: add the field layout.bare Lucas Seiki Oshiro
2025-08-11 5:21 ` Eric Sunshine
2025-08-14 18:22 ` Lucas Seiki Oshiro
2025-08-14 18:32 ` Eric Sunshine
2025-08-14 18:51 ` Junio C Hamano
2025-08-14 22:05 ` Eric Sunshine
2025-08-15 1:20 ` Junio C Hamano
2025-08-14 22:18 ` Lucas Seiki Oshiro
2025-08-14 23:41 ` Eric Sunshine
2025-08-07 15:02 ` [GSoC PATCH v9 4/5] repo: add the field layout.shallow Lucas Seiki Oshiro
2025-08-07 15:02 ` [GSoC PATCH v9 5/5] repo: add the --format flag Lucas Seiki Oshiro
2025-08-11 5:44 ` Eric Sunshine
2025-08-08 5:45 ` [GSoC PATCH v9 0/5] repo: add new command for retrieving repository info Patrick Steinhardt
2025-08-08 15:02 ` Junio C Hamano
2025-08-08 9:20 ` Karthik Nayak
2025-08-15 13:55 ` [GSoC PATCH v10 0/5] repo: declare the repo command Lucas Seiki Oshiro
2025-08-15 13:55 ` [GSoC PATCH v10 1/5] " Lucas Seiki Oshiro
2025-08-15 13:55 ` [GSoC PATCH v10 2/5] repo: add the field references.format Lucas Seiki Oshiro
2025-08-15 18:40 ` Junio C Hamano
2025-08-15 19:12 ` Lucas Seiki Oshiro
2025-08-15 13:55 ` [GSoC PATCH v10 3/5] repo: add the field layout.bare Lucas Seiki Oshiro
2025-08-15 13:55 ` [GSoC PATCH v10 4/5] repo: add the field layout.shallow Lucas Seiki Oshiro
2025-08-15 19:36 ` Junio C Hamano
2025-08-15 13:55 ` [GSoC PATCH v10 5/5] repo: add the --format flag Lucas Seiki Oshiro
2025-08-15 19:23 ` Junio C Hamano
2025-08-16 22:45 ` [GSoC PATCH v11 0/5] repo: declare the repo command Lucas Seiki Oshiro
2025-08-16 22:45 ` [GSoC PATCH v11 1/5] " Lucas Seiki Oshiro
2025-08-16 22:46 ` [GSoC PATCH v11 2/5] repo: add the field references.format Lucas Seiki Oshiro
2025-08-16 22:46 ` [GSoC PATCH v11 3/5] repo: add the field layout.bare Lucas Seiki Oshiro
2025-08-16 22:46 ` [GSoC PATCH v11 4/5] repo: add the field layout.shallow Lucas Seiki Oshiro
2025-08-16 22:46 ` [GSoC PATCH v11 5/5] repo: add the --format flag Lucas Seiki Oshiro
2025-08-17 16:21 ` [GSoC PATCH v11 0/5] repo: declare the repo command Junio C Hamano
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=c1f871ec-96a0-4dbc-b84b-4add36bec682@gmail.com \
--to=phillip.wood123@gmail$(echo .)com \
--cc=ben.knoble@gmail$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
--cc=karthik.188@gmail$(echo .)com \
--cc=lucasseikioshiro@gmail$(echo .)com \
--cc=phillip.wood@dunelm$(echo .)org.uk \
--cc=ps@pks$(echo .)im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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