From: Lucas Seiki Oshiro Date: Mon, 19 Jan 2026 20:20:18 GMT Subject: [PATCH v4 0/2] repo: add --format=default and --keys Message-ID: <20260119210932.68893-1-lucasseikioshiro@gmail.com> In-Reply-To: <20251207190532.67107-1-lucasseikioshiro@gmail.com> Hello, again! This v4 addresses these two issues: 1. NUL was replaced by _NUL_ in the documentation 2. Now, the default output format of `git repo info --keys` is "lines" and "default" is a synonym for it. I prefer to called it "lines" instead of "newline" (as suggested by Patrick) because I thought that it would be clear to the user 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 | 33 +++++++++++++++++----- builtin/repo.c | 56 ++++++++++++++++++++++++++++++++++--- t/t1900-repo.sh | 54 +++++++++++++++++++++++++++-------- t/t1901-repo-structure.sh | 22 +++++++++++++++ 4 files changed, 143 insertions(+), 22 deletions(-) Range-diff against v3: 1: 97f8eee687 = 1: 7dabd62250 repo: add a default output format to enum output_format 2: 0c7d3bca32 ! 2: fba621fc4f repo: add new flag --keys to git-repo-info @@ Documentation/git-repo.adoc: SYNOPSIS -------- [synopsis] git repo info [--format=(default|keyvalue|nul) | -z] [--all | ...] -+git repo info --keys [--format=(default|nul) | -z] ++git repo info --keys [--format=(default|lines|nul) | -z] git repo structure [--format=(default|table|keyvalue|nul) | -z] DESCRIPTION @@ Documentation/git-repo.adoc: supported: + `-z` is an alias for `--format=nul`. -+`info --keys [--format=(default|nul) | -z]`:: ++`info --keys [--format=(default|lines|nul) | -z]`:: + List all the available keys, one per line. The output format can be chosen + through the flag `--format`. The following formats are supported: ++ +`default`::: ++ synonym for `lines`. ++ ++`lines`::: + output the keys one per line. + +`nul`::: -+ similar to `default`, but using a NUL character after each value. ++ similar to `default`, but using a _NUL_ character after each value. + `structure [--format=(default|table|keyvalue|nul) | -z]`:: Retrieve statistics about the current repository structure. The @@ builtin/repo.c static const char *const repo_usage[] = { "git repo info [--format=(default|keyvalue|nul) | -z] [--all | ...]", -+ "git repo info --keys [--format=(default|nul) | -z]", ++ "git repo info --keys [--format=(default|lines|nul) | -z]", "git repo structure [--format=(default|table|keyvalue|nul) | -z]", NULL }; +@@ builtin/repo.c: enum output_format { + FORMAT_TABLE, + FORMAT_KEYVALUE, + FORMAT_NUL_TERMINATED, ++ FORMAT_LINES + }; + + struct field { @@ builtin/repo.c: static int print_all_fields(struct repository *repo, return 0; } @@ builtin/repo.c: static int print_all_fields(struct repository *repo, +{ + char sep; + ++ if (format == FORMAT_DEFAULT) ++ format = FORMAT_LINES; ++ + switch (format) { -+ case FORMAT_DEFAULT: ++ case FORMAT_LINES: + sep = '\n'; + break; + case FORMAT_NUL_TERMINATED: @@ builtin/repo.c: static int print_all_fields(struct repository *repo, static int parse_format_cb(const struct option *opt, const char *arg, int unset UNUSED) { +@@ builtin/repo.c: static int parse_format_cb(const struct option *opt, + *format = FORMAT_KEYVALUE; + else if (!strcmp(arg, "table")) + *format = FORMAT_TABLE; ++ else if (!strcmp(arg, "lines")) ++ *format = FORMAT_LINES; + else if (!strcmp(arg, "default")) + *format = FORMAT_DEFAULT; + else @@ builtin/repo.c: static int cmd_repo_info(int argc, const char **argv, const char *prefix, { enum output_format format = FORMAT_DEFAULT; @@ t/t1900-repo.sh: test_expect_success '--format=default resets the format' ' + test_cmp expect actual_all && + test_cmp expect actual_key +' ++ ++test_expect_success 'git repo info --keys uses lines as its default output format' ' ++ git repo info --keys --format=lines >expect && ++ git repo info --keys --format=default >actual_explicit && ++ git repo info --keys >actual_implicit && ++ test_cmp expect actual_explicit && ++ test_cmp expect actual_implicit ++' + test_done -- 2.50.1 (Apple Git-155)