]> git.ipfire.org Git - thirdparty/git.git/commitdiff
repo: add a default output format to enum output_format
authorLucas Seiki Oshiro <lucasseikioshiro@gmail.com>
Fri, 9 Jan 2026 20:31:52 +0000 (17:31 -0300)
committerJunio C Hamano <gitster@pobox.com>
Sat, 10 Jan 2026 06:59:25 +0000 (22:59 -0800)
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 <lucasseikioshiro@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-repo.adoc
builtin/repo.c
t/t1900-repo.sh
t/t1901-repo-structure.sh

index c4a78277df61c0c48549ab072d37e73b3211a49b..fc47aef71493648de5df8153564e3914804a3ecb 100644 (file)
@@ -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:
 +
@@ -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.
index 0dd41b17783ed113a4c2e0ff36a8b67eb7b962e5..d014b181b7089def1d50beb206f2eaf73db266ca 100644 (file)
 #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,
@@ -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)
index 51d55f11a5ed664bc5927b12677f56ad76f32070..e6670f0f58573e76d4a007934d7eade3daa44591 100755 (executable)
@@ -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
index df7d4ea52485da137b6b0a5359fb3ccc3b10c786..c344d20a11619ba0a8f55a59ea820b9c51a6b324 100755 (executable)
@@ -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