Re: [GSoC RFC PATCH v4 2/4] repo: add the field references.format
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Jul 15, 2025, 11:59 UTC
- Message-ID
- <aHZCipKCPIu8mPly@pks.im>
- In-Reply-To
- <20250714235231.10137-3-lucasseikioshiro@gmail.com>
On Mon, Jul 14, 2025 at 08:52:29PM -0300, Lucas Seiki Oshiro wrote:
Show 33 quoted lines
> diff --git a/builtin/repo.c b/builtin/repo.c
> index a1787a3cc5..dcda0d6d61 100644
> --- a/builtin/repo.c
> +++ b/builtin/repo.c
> @@ -1,11 +1,95 @@
> #include "builtin.h"
> #include "parse-options.h"
> +#include "strbuf.h"
> +#include "refs.h"
>
> -static int repo_info(int argc UNUSED,
> - const char **argv UNUSED,
> +typedef void add_field_fn(struct strbuf *buf, struct repository *repo);
> +
> +struct field {
> + const char *key;
> + add_field_fn *add_field_callback;
> +};
> +
> +static void add_string(struct strbuf *buf,
> + const char *key, const char *value)
> +{
> + strbuf_addf(buf, "%s\n%s%c", key, value, '\0');
> +}
> +
> +static void add_references_format(struct strbuf *buf,
> + struct repository *repo)
> +{
> + add_string(buf, "references.format",
> + ref_storage_format_to_name(repo->ref_storage_format));
> +}
> +
> +// repo_info_fields keys should be in lexicographical orderStyle: we don't use '//' comments.
> +static const struct field repo_info_fields[] = {
> + {"references.format", add_references_format},Style: we tend to have a space between curly braces and their inner content.
> +static void print_fields(int argc, const char **argv, struct repository *repo) {Style: the opening brace for functions should be on their own line.
Show 27 quoted lines
> + const char *last = "";
> + struct strbuf buf;
> + strbuf_init(&buf, 256);
> +
> + QSORT(argv, argc, qsort_strcmp);
> +
> + for (int i = 0; i < argc; i++) {
> + add_field_fn *callback;
> + const char *key = argv[i];
> +
> + if (!strcmp(key, last))
> + continue;
> +
> + callback = get_append_callback(key);
> +
> + if (!callback) {
> + error("key %s not found", key);
> + strbuf_release(&buf);
> + exit(1);
> + }
> +
> + callback(&buf, repo);
> + last = key;
> + }
> +
> + fwrite(buf.buf, 1, buf.len, stdout);
> + strbuf_release(&buf);Is there any reason why the callback appends to a buffer instead of printing the data immediately?
Patrick