From 1de20cdaee1f38456a15a3fa289ea421ab5440cd Mon Sep 17 00:00:00 2001 From: Lucas Seiki Oshiro Date: Fri, 9 Jan 2026 17:31:52 -0300 Subject: [PATCH] repo: add a default output format to enum output_format 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 Signed-off-by: Junio C Hamano --- Documentation/git-repo.adoc | 19 ++++++++++++------- builtin/repo.c | 18 ++++++++++++++---- t/t1900-repo.sh | 12 ++++++++++++ t/t1901-repo-structure.sh | 22 ++++++++++++++++++++++ 4 files changed, 60 insertions(+), 11 deletions(-) diff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc index c4a78277df..fc47aef714 100644 --- a/Documentation/git-repo.adoc +++ b/Documentation/git-repo.adoc @@ -8,8 +8,8 @@ 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 ----------- @@ -19,7 +19,7 @@ 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). @@ -30,11 +30,14 @@ 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 @@ -44,7 +47,7 @@ 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: + @@ -54,10 +57,12 @@ 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. diff --git a/builtin/repo.c b/builtin/repo.c index 0dd41b1778..d014b181b7 100644 --- a/builtin/repo.c +++ b/builtin/repo.c @@ -15,14 +15,15 @@ #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 { + FORMAT_DEFAULT, FORMAT_TABLE, FORMAT_KEYVALUE, FORMAT_NUL_TERMINATED, @@ -159,6 +160,8 @@ static int parse_format_cb(const struct option *opt, *format = FORMAT_KEYVALUE; else if (!strcmp(arg, "table")) *format = FORMAT_TABLE; + else if (!strcmp(arg, "default")) + *format = FORMAT_DEFAULT; else die(_("invalid format '%s'"), arg); @@ -168,7 +171,7 @@ static int parse_format_cb(const struct option *opt, static int cmd_repo_info(int argc, const char **argv, const char *prefix, struct repository *repo) { - enum output_format format = FORMAT_KEYVALUE; + enum output_format format = FORMAT_DEFAULT; int all_keys = 0; struct option options[] = { OPT_CALLBACK_F(0, "format", &format, N_("format"), @@ -183,6 +186,10 @@ static int cmd_repo_info(int argc, const char **argv, const char *prefix, }; argc = parse_options(argc, argv, prefix, options, repo_usage, 0); + + if (format == FORMAT_DEFAULT) + format = FORMAT_KEYVALUE; + if (format != FORMAT_KEYVALUE && format != FORMAT_NUL_TERMINATED) die(_("unsupported output format")); @@ -521,7 +528,7 @@ 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; @@ -541,6 +548,9 @@ 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) diff --git a/t/t1900-repo.sh b/t/t1900-repo.sh index 51d55f11a5..e6670f0f58 100755 --- a/t/t1900-repo.sh +++ b/t/t1900-repo.sh @@ -131,4 +131,16 @@ 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 diff --git a/t/t1901-repo-structure.sh b/t/t1901-repo-structure.sh index df7d4ea524..c344d20a11 100755 --- a/t/t1901-repo-structure.sh +++ b/t/t1901-repo-structure.sh @@ -133,4 +133,26 @@ 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