[PATCH v4 1/2] repo: add a default output format to enum output_format
From: Lucas Seiki Oshiro <hidden>
Date: 2026-01-19 21:09:48
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
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 <redacted> --- 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 7d70270dfa..fa0e6600af 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 | <key>...] -git repo structure [--format=(table|keyvalue|nul) | -z] +git repo info [--format=(default|keyvalue|nul) | -z] [--all | <key>...] +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 | <key>...]`:: +`info [--format=(default|keyvalue|nul) | -z] [--all | <key>...]`:: 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: +
@@ -56,10 +59,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 0ea045abc1..306d3fa2df 100644
--- a/builtin/repo.c
+++ b/builtin/repo.c@@ -17,14 +17,15 @@ #include "utf8.h" static const char *const repo_usage[] = { - "git repo info [--format=(keyvalue|nul) | -z] [--all | <key>...]", - "git repo structure [--format=(table|keyvalue|nul) | -z]", + "git repo info [--format=(default|keyvalue|nul) | -z] [--all | <key>...]", + "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,
@@ -161,6 +162,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);
@@ -170,7 +173,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"),
@@ -185,6 +188,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"));
@@ -638,7 +645,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;
@@ -658,6 +665,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 <key> 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 17ff164b05..9c5054c8db 100755
--- a/t/t1901-repo-structure.sh
+++ b/t/t1901-repo-structure.sh@@ -181,4 +181,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
--
2.50.1 (Apple Git-155)