From: Lucas Seiki Oshiro Date: Sat, 14 Feb 2026 00:35:14 GMT Subject: [PATCH v6 0/2] repo: add --keys and rename "keyvalue" to "lines" Message-ID: <20260214005818.37349-1-lucasseikioshiro@gmail.com> In-Reply-To: <20251207190532.67107-1-lucasseikioshiro@gmail.com> Hi! This v6 addresses these issues raised by Patrick: - It renames `FORMAT_LINES` to `FORMAT_NEWLINE_TERMINATED` - Change the commit messsage of the first patch (I'm using Patrick's suggestion) - It capitalizes the new paragraphs There was a discussion about the name of the new format ("lines" vs "newline") [1]. Personally I prefer "lines" instead of "newline" because I understand the --format flag expects a format name (e.g. `table`, `lines`) instead of the delimiter, being `nul` only a short form of "nul-terminated". But, of course, I'm open to other opinions about it :-). Thanks [1] aXhiHAFNFxgsXa0S@pks.im Lucas Seiki Oshiro (2): repo: rename the output format "keyvalue" to "lines" repo: add new flag --keys to git-repo-info Documentation/git-repo.adoc | 32 +++++++++++++++-------- builtin/repo.c | 51 ++++++++++++++++++++++++++++++------- t/t1900-repo.sh | 44 ++++++++++++++++++++++---------- t/t1901-repo-structure.sh | 4 +-- 4 files changed, 97 insertions(+), 34 deletions(-) Range-diff against v5: 1: f5448ce915 ! 1: 6f5b4a577e repo: rename "keyvalue" to "lines" @@ Metadata Author: Lucas Seiki Oshiro ## Commit message ## - repo: rename "keyvalue" to "lines" + repo: rename the output format "keyvalue" to "lines" - The output format name "keyvalue" isn't so descriptive. Rename it to - "lines", since it describes better the syntax of the output format and - it isn't tied to key-value pairs. + Both subcommands in git-repo(1) accept the "keyvalue" format. This + format is newline-delimited, where the key is separated from the + value with an equals sign. + The name of this option is suboptimal though, as it is both too + limiting while at the same time not really indicating what it + actually does: + + - There is no mention of the format being newline-delimited, which + is the key differentiator to the "nul" format. + + - Both "nul" and "keyvalue" have a key and a value, so the latter + is not exactly giving any hint what makes it so special. + + - "keyvalue" requires there to be, well, a key and a value, but we + want to add additional output that is only going to be newline + delimited. + + Taken together, "keyvalue" is kind of a bad name for this output + format. + + Luckily, the git-repo(1) command is still rather new and marked as + experimental, so things aren't cast into stone yet. Rename the + format to "lines" instead to better indicate that the major + difference is that we'll get newline-delimited output. This new name + will also be a better fit for a subsequent extension in git-repo(1). + + Helped-by: Patrick Steinhardt Signed-off-by: Lucas Seiki Oshiro ## Documentation/git-repo.adoc ## @@ builtin/repo.c: typedef int get_value_fn(struct repository *repo, struct strbuf enum output_format { FORMAT_TABLE, - FORMAT_KEYVALUE, -+ FORMAT_LINES, ++ FORMAT_NEWLINE_TERMINATED, FORMAT_NUL_TERMINATED, }; @@ builtin/repo.c: static void print_field(enum output_format format, const char *k { switch (format) { - case FORMAT_KEYVALUE: -+ case FORMAT_LINES: ++ case FORMAT_NEWLINE_TERMINATED: printf("%s=", key); quote_c_style(value, NULL, stdout, 0); putchar('\n'); @@ builtin/repo.c: static int parse_format_cb(const struct option *opt, - else if (!strcmp(arg, "keyvalue")) - *format = FORMAT_KEYVALUE; + else if (!strcmp(arg, "lines")) -+ *format = FORMAT_LINES; ++ *format = FORMAT_NEWLINE_TERMINATED; else if (!strcmp(arg, "table")) *format = FORMAT_TABLE; else @@ builtin/repo.c: static int parse_format_cb(const struct option *opt, struct repository *repo) { - enum output_format format = FORMAT_KEYVALUE; -+ enum output_format format = FORMAT_LINES; ++ enum output_format format = FORMAT_NEWLINE_TERMINATED; int all_keys = 0; struct option options[] = { OPT_CALLBACK_F(0, "format", &format, N_("format"), @@ builtin/repo.c: static int cmd_repo_info(int argc, const char **argv, const char argc = parse_options(argc, argv, prefix, options, repo_usage, 0); - if (format != FORMAT_KEYVALUE && format != FORMAT_NUL_TERMINATED) + -+ if (format != FORMAT_LINES && format != FORMAT_NUL_TERMINATED) ++ if (format != FORMAT_NEWLINE_TERMINATED && format != FORMAT_NUL_TERMINATED) die(_("unsupported output format")); if (all_keys && argc) @@ builtin/repo.c: static int cmd_repo_structure(int argc, const char **argv, const stats_table_print_structure(&table); break; - case FORMAT_KEYVALUE: -+ case FORMAT_LINES: ++ case FORMAT_NEWLINE_TERMINATED: structure_keyvalue_print(&stats, '=', '\n'); break; case FORMAT_NUL_TERMINATED: 2: 16bc72afe1 ! 2: 53503e1433 repo: add new flag --keys to git-repo-info @@ Documentation/git-repo.adoc: supported: + through the flag `--format`. The following formats are supported: ++ +`lines`::: -+ output the keys one per line. This is the default. ++ Output the keys one per line. This is the default. + +`nul`::: -+ similar to `lines`, but using a _NUL_ character after each value. ++ Similar to `lines`, but using a _NUL_ character after each value. + `structure [--format=(table|lines|nul) | -z]`:: Retrieve statistics about the current repository structure. The @@ builtin/repo.c: static int print_all_fields(struct repository *repo, + char sep; + + switch (format) { -+ case FORMAT_LINES: ++ case FORMAT_NEWLINE_TERMINATED: + sep = '\n'; + break; + case FORMAT_NUL_TERMINATED: @@ builtin/repo.c: static int print_all_fields(struct repository *repo, { @@ builtin/repo.c: static int cmd_repo_info(int argc, const char **argv, const char *prefix, { - enum output_format format = FORMAT_LINES; + enum output_format format = FORMAT_NEWLINE_TERMINATED; int all_keys = 0; + int show_keys = 0; struct option options[] = { @@ builtin/repo.c: static int cmd_repo_info(int argc, const char **argv, const char + if (show_keys) + return print_keys(format); + - if (format != FORMAT_LINES && format != FORMAT_NUL_TERMINATED) + if (format != FORMAT_NEWLINE_TERMINATED && format != FORMAT_NUL_TERMINATED) die(_("unsupported output format")); -- 2.50.1 (Apple Git-155)