From: Lucas Seiki Oshiro Date: Fri, 09 Jan 2026 20:31:51 GMT Subject: [PATCH v3 0/2] repo: add --format=default and --keys Message-ID: <20260109211554.90828-2-lucasseikioshiro@gmail.com> In-Reply-To: <20251207190532.67107-1-lucasseikioshiro@gmail.com> Hi! The main change in this version is that git-repo-structure now supports `--format=default`. This way, both git-repo-info and git-repo-structure now can be used with `--format=default`, which resets the output format to the default one (`keyvalue` in repo-info, `table` in repo-structure). I'm also cc'ing Justin to see if he agrees with this change to git-repo-structure. Lucas Seiki Oshiro (2): repo: add a default output format to enum output_format repo: add new flag --keys to git-repo-info Documentation/git-repo.adoc | 30 ++++++++++++++++------ builtin/repo.c | 50 ++++++++++++++++++++++++++++++++++--- t/t1900-repo.sh | 46 ++++++++++++++++++++++++++-------- t/t1901-repo-structure.sh | 22 ++++++++++++++++ 4 files changed, 126 insertions(+), 22 deletions(-) Range-diff against v2: 1: 9eb2549806 ! 1: 97f8eee687 repo: add a default output format to enum output_format @@ Metadata ## Commit message ## repo: add a default output format to enum output_format - Add a `FORMAT_DEFAULT` value to `enum output_format`. Change the initial - value of `format` to `FORMAT_DEFAULT` in cmd_repo_info, indicating that - the initial value hasn't been changed. Also map the string "default" to - this new value in `parse_format_cb`, allowing future patches to add - support to --format=default. + Add "default" as an option for --format in both git-repo-info and + git-repo-structure. Using `--format=default` makes those commands use + their default output format. Signed-off-by: Lucas Seiki Oshiro + ## Documentation/git-repo.adoc ## +@@ Documentation/git-repo.adoc: git-repo - Retrieve information about the repository + SYNOPSIS + -------- + [synopsis] +-git repo info [--format=(keyvalue|nul) | -z] [--all | ...] +-git repo structure [--format=(table|keyvalue|nul) | -z] ++git repo info [--format=(default|keyvalue|nul) | -z] [--all | ...] ++git repo structure [--format=(default|table|keyvalue|nul) | -z] + + DESCRIPTION + ----------- +@@ Documentation/git-repo.adoc: THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE. + + COMMANDS + -------- +-`info [--format=(keyvalue|nul) | -z] [--all | ...]`:: ++`info [--format=(default|keyvalue|nul) | -z] [--all | ...]`:: + Retrieve metadata-related information about the current repository. Only + the requested data will be returned based on their keys (see "INFO KEYS" + section below). +@@ Documentation/git-repo.adoc: requested. The `--all` flag requests the values for all the available keys. + The output format can be chosen through the flag `--format`. Two formats are + supported: + + ++`default`::: ++ synonym for `keyvalue`. ++ + `keyvalue`::: + output key-value pairs one per line using the `=` character as + the delimiter between the key and the value. Values containing "unusual" + characters are quoted as explained for the configuration variable +- `core.quotePath` (see linkgit:git-config[1]). This is the default. ++ `core.quotePath` (see linkgit:git-config[1]). + + `nul`::: + similar to `keyvalue`, but using a newline character as the delimiter +@@ Documentation/git-repo.adoc: supported: + + + `-z` is an alias for `--format=nul`. + +-`structure [--format=(table|keyvalue|nul) | -z]`:: ++`structure [--format=(default|table|keyvalue|nul) | -z]`:: + Retrieve statistics about the current repository structure. The + following kinds of information are reported: + + +@@ Documentation/git-repo.adoc: supported: + The output format can be chosen through the flag `--format`. Three formats are + supported: + + ++`default`::: ++ synonym for `table`. ++ + `table`::: + Outputs repository stats in a human-friendly table. This format may +- change and is not intended for machine parsing. This is the default +- format. ++ change and is not intended for machine parsing. + + `keyvalue`::: + Each line of output contains a key-value pair for a repository stat. + ## builtin/repo.c ## -@@ builtin/repo.c: static const char *const repo_usage[] = { +@@ + #include "utf8.h" + + static const char *const repo_usage[] = { +- "git repo info [--format=(keyvalue|nul) | -z] [--all | ...]", +- "git repo structure [--format=(table|keyvalue|nul) | -z]", ++ "git repo info [--format=(default|keyvalue|nul) | -z] [--all | ...]", ++ "git repo structure [--format=(default|table|keyvalue|nul) | -z]", + NULL + }; + typedef int get_value_fn(struct repository *repo, struct strbuf *buf); enum output_format { @@ builtin/repo.c: static int cmd_repo_info(int argc, const char **argv, const char if (format != FORMAT_KEYVALUE && format != FORMAT_NUL_TERMINATED) die(_("unsupported output format")); +@@ builtin/repo.c: static int cmd_repo_structure(int argc, const char **argv, const char *prefix, + struct stats_table table = { + .rows = STRING_LIST_INIT_DUP, + }; +- enum output_format format = FORMAT_TABLE; ++ enum output_format format = FORMAT_DEFAULT; + struct repo_structure stats = { 0 }; + struct rev_info revs; + int show_progress = -1; +@@ builtin/repo.c: static int cmd_repo_structure(int argc, const char **argv, const char *prefix, + if (argc) + usage(_("too many arguments")); + ++ if (format == FORMAT_DEFAULT) ++ format = FORMAT_TABLE; ++ + repo_init_revisions(repo, &revs, prefix); + + if (show_progress < 0) + + ## t/t1900-repo.sh ## +@@ t/t1900-repo.sh: test_expect_success 'git repo info --all aborts' ' + test_cmp expect actual + ' + ++test_expect_success '--format=default is a synonym for --format=keyvalue' ' ++ git repo info --all --format=keyvalue >expect && ++ git repo info --all --format=default >actual && ++ test_cmp expect actual ++' ++ ++test_expect_success '--format=default resets the format' ' ++ git repo info --all >expect && ++ git repo info --all --format=nul --format=default >actual && ++ test_cmp expect actual ++' ++ + test_done + + ## t/t1901-repo-structure.sh ## +@@ t/t1901-repo-structure.sh: test_expect_success 'progress meter option' ' + ) + ' + ++test_expect_success '--format=default is a synonym for --format=table' ' ++ test_when_finished "rm -rf repo" && ++ git init repo && ++ ( ++ cd repo && ++ git repo structure --format=table >expect && ++ git repo structure --format=default >actual && ++ test_cmp expect actual ++ ) ++' ++ ++test_expect_success '--format=default resets the format' ' ++ test_when_finished "rm -rf repo" && ++ git init repo && ++ ( ++ cd repo && ++ git repo structure >expect && ++ git repo structure --format=nul --format=default >actual && ++ test_cmp expect actual ++ ) ++' ++ + test_done 2: c5b7ba8824 ! 2: 0c7d3bca32 repo: add new flag --keys to git-repo-info @@ Documentation/git-repo.adoc @@ Documentation/git-repo.adoc: SYNOPSIS -------- [synopsis] - git repo info [--format=(keyvalue|nul) | -z] [--all | ...] + git repo info [--format=(default|keyvalue|nul) | -z] [--all | ...] +git repo info --keys [--format=(default|nul) | -z] - git repo structure [--format=(table|keyvalue|nul) | -z] + git repo structure [--format=(default|table|keyvalue|nul) | -z] DESCRIPTION @@ Documentation/git-repo.adoc: supported: @@ Documentation/git-repo.adoc: supported: +`nul`::: + similar to `default`, but using a NUL character after each value. + - `structure [--format=(table|keyvalue|nul) | -z]`:: + `structure [--format=(default|table|keyvalue|nul) | -z]`:: Retrieve statistics about the current repository structure. The following kinds of information are reported: @@ builtin/repo.c @@ static const char *const repo_usage[] = { - "git repo info [--format=(keyvalue|nul) | -z] [--all | ...]", + "git repo info [--format=(default|keyvalue|nul) | -z] [--all | ...]", + "git repo info --keys [--format=(default|nul) | -z]", - "git repo structure [--format=(table|keyvalue|nul) | -z]", + "git repo structure [--format=(default|table|keyvalue|nul) | -z]", NULL }; @@ builtin/repo.c: static int print_all_fields(struct repository *repo, @@ t/t1900-repo.sh: test_expect_success 'git repo info uses the last requested form git repo info --all >actual && test_cmp expect actual ' -@@ t/t1900-repo.sh: test_expect_success 'git repo info --all aborts' ' +@@ t/t1900-repo.sh: test_expect_success '--format=default resets the format' ' test_cmp expect actual ' +test_expect_success 'git repo info --keys --format=nul uses nul-terminated output' ' + git repo info --keys --format=default >default && -+ lf_to_nul expect && ++ lf_to_nul expect && + git repo info --keys --format=nul >actual && + test_cmp expect actual +' @@ t/t1900-repo.sh: test_expect_success 'git repo info --all aborts' ' + test_cmp expect actual_all && + test_cmp expect actual_key +' ++ test_done -- 2.50.1 (Apple Git-155)