git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v6 1/2] repo: rename the output format "keyvalue" to "lines"

From
Lucas Seiki Oshiro <lucasseikioshiro@gmail.com>
Date
Feb 14, 2026, 00:35 UTC
Message-ID
<20260214005818.37349-2-lucasseikioshiro@gmail.com>
In-Reply-To
<20260214005818.37349-1-lucasseikioshiro@gmail.com>

Both subcommands in git-repo(1) accept the "keyvalue" format. This format is newline-delimited, where the key is separated from the value with an equals sign.

The name of this option is suboptimal though, as it is both too limiting while at the same time not really indicating what it actually does:

  - There is no mention of the format being newline-delimited, which
    is the key differentiator to the "nul" format.
  - Both "nul" and "keyvalue" have a key and a value, so the latter
    is not exactly giving any hint what makes it so special.
  - "keyvalue" requires there to be, well, a key and a value, but we
    want to add additional output that is only going to be newline
    delimited.

Taken together, "keyvalue" is kind of a bad name for this output format.

Luckily, the git-repo(1) command is still rather new and marked as experimental, so things aren't cast into stone yet. Rename the format to "lines" instead to better indicate that the major difference is that we'll get newline-delimited output. This new name will also be a better fit for a subsequent extension in git-repo(1).

Helped-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Lucas Seiki Oshiro <lucasseikioshiro@gmail.com>
---
 Documentation/git-repo.adoc | 21 +++++++++++----------
 builtin/repo.c              | 19 ++++++++++---------
 t/t1900-repo.sh             |  4 ++--
 t/t1901-repo-structure.sh   |  4 ++--
 4 files changed, 25 insertions(+), 23 deletions(-)
diff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc
index 7d70270dfa..693e1bbced 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=(lines|nul) | -z] [--all | <key>...]
+git repo structure [--format=(table|lines|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=(lines|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,21 +30,22 @@ 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:
 +
-`keyvalue`:::
+
+`lines`:::
 	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.
 
 `nul`:::
-	similar to `keyvalue`, but using a newline character as the delimiter
+	similar to `lines`, but using a newline character as the delimiter
 	between the key and the value and using a NUL character after each value.
 	This format is better suited for being parsed by another applications than
-	`keyvalue`. Unlike in the `keyvalue` format, the values are never quoted.
+	`lines`. Unlike in the `lines` format, the values are never quoted.
 +
 `-z` is an alias for `--format=nul`.
 
-`structure [--format=(table|keyvalue|nul) | -z]`::
+`structure [--format=(table|lines|nul) | -z]`::
 	Retrieve statistics about the current repository structure. The
 	following kinds of information are reported:
 +
@@ -61,17 +62,17 @@ supported:
 	change and is not intended for machine parsing. This is the default
 	format.
 
-`keyvalue`:::
+`lines`:::
 	Each line of output contains a key-value pair for a repository stat.
 	The '=' character is used to delimit 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]).
 
 `nul`:::
-	Similar to `keyvalue`, but uses a NUL character to delimit between
+	Similar to `lines`, but uses a NUL character to delimit between
 	key-value pairs instead of a newline. Also uses a newline character as
 	the delimiter between the key and value instead of '='. Unlike the
-	`keyvalue` format, values containing "unusual" characters are never
+	`lines` format, values containing "unusual" characters are never
 	quoted.
 +
 `-z` is an alias for `--format=nul`.
diff --git a/builtin/repo.c b/builtin/repo.c
index 0ea045abc1..23c5ee88b0 100644
--- a/builtin/repo.c
+++ b/builtin/repo.c
@@ -17,8 +17,8 @@
 #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=(lines|nul) | -z] [--all | <key>...]",
+	"git repo structure [--format=(table|lines|nul) | -z]",
 	NULL
 };
 
@@ -26,7 +26,7 @@ typedef int get_value_fn(struct repository *repo, struct strbuf *buf);
 
 enum output_format {
 	FORMAT_TABLE,
-	FORMAT_KEYVALUE,
+	FORMAT_NEWLINE_TERMINATED,
 	FORMAT_NUL_TERMINATED,
 };
 
@@ -91,7 +91,7 @@ static void print_field(enum output_format format, const char *key,
 			const char *value)
 {
 	switch (format) {
-	case FORMAT_KEYVALUE:
+	case FORMAT_NEWLINE_TERMINATED:
 		printf("%s=", key);
 		quote_c_style(value, NULL, stdout, 0);
 		putchar('\n');
@@ -157,8 +157,8 @@ static int parse_format_cb(const struct option *opt,
 		*format = FORMAT_NUL_TERMINATED;
 	else if (!strcmp(arg, "nul"))
 		*format = FORMAT_NUL_TERMINATED;
-	else if (!strcmp(arg, "keyvalue"))
-		*format = FORMAT_KEYVALUE;
+	else if (!strcmp(arg, "lines"))
+		*format = FORMAT_NEWLINE_TERMINATED;
 	else if (!strcmp(arg, "table"))
 		*format = FORMAT_TABLE;
 	else
@@ -170,7 +170,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_NEWLINE_TERMINATED;
 	int all_keys = 0;
 	struct option options[] = {
 		OPT_CALLBACK_F(0, "format", &format, N_("format"),
@@ -185,7 +185,8 @@ 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_KEYVALUE && format != FORMAT_NUL_TERMINATED)
+
+	if (format != FORMAT_NEWLINE_TERMINATED && format != FORMAT_NUL_TERMINATED)
 		die(_("unsupported output format"));
 
 	if (all_keys && argc)
@@ -671,7 +672,7 @@ static int cmd_repo_structure(int argc, const char **argv, const char *prefix,
 		stats_table_setup_structure(&table, &stats);
 		stats_table_print_structure(&table);
 		break;
-	case FORMAT_KEYVALUE:
+	case FORMAT_NEWLINE_TERMINATED:
 		structure_keyvalue_print(&stats, '=', '\n');
 		break;
 	case FORMAT_NUL_TERMINATED:
diff --git a/t/t1900-repo.sh b/t/t1900-repo.sh
index 51d55f11a5..4155211e5d 100755
--- a/t/t1900-repo.sh
+++ b/t/t1900-repo.sh
@@ -34,7 +34,7 @@ test_repo_info () {
 		eval "$init_command $repo_name"
 	'
 
-	test_expect_success "keyvalue: $label" '
+	test_expect_success "lines: $label" '
 		echo "$key=$expected_value" > expect &&
 		git -C "$repo_name" repo info "$key" >actual &&
 		test_cmp expect actual
@@ -115,7 +115,7 @@ test_expect_success '-z uses nul-terminated format' '
 
 test_expect_success 'git repo info uses the last requested format' '
 	echo "layout.bare=false" >expected &&
-	git repo info --format=nul -z --format=keyvalue layout.bare >actual &&
+	git repo info --format=nul -z --format=lines layout.bare >actual &&
 	test_cmp expected actual
 '
 
diff --git a/t/t1901-repo-structure.sh b/t/t1901-repo-structure.sh
index 17ff164b05..a6f2591d9a 100755
--- a/t/t1901-repo-structure.sh
+++ b/t/t1901-repo-structure.sh
@@ -113,7 +113,7 @@ test_expect_success SHA1 'repository with references and objects' '
 	)
 '
 
-test_expect_success SHA1 'keyvalue and nul format' '
+test_expect_success SHA1 'lines and nul format' '
 	test_when_finished "rm -rf repo" &&
 	git init repo &&
 	(
@@ -140,7 +140,7 @@ test_expect_success SHA1 'keyvalue and nul format' '
 		objects.tags.disk_size=$(object_type_disk_usage tag)
 		EOF
 
-		git repo structure --format=keyvalue >out 2>err &&
+		git repo structure --format=lines >out 2>err &&
 
 		test_cmp expect out &&
 		test_line_count = 0 err &&
-- 
2.50.1 (Apple Git-155)
Previous: Lucas Seiki OshiroNext: Lucas Seiki Oshiro
Message 37 of 40 in “repo: add new flag --keys to git-repo-info”
  1. repo: add new flag --keys to git-repo-infoLucas Seiki Oshiro, Dec 7, 2025
  2. Junio C HamanoDec 7, 2025
  3. Lucas Seiki OshiroDec 8, 2025
  4. Patrick SteinhardtDec 8, 2025
  5. 0/2 repo: add new flag --keys to git-repo-infoLucas Seiki Oshiro, Dec 9, 2025
  6. 1/2 repo: add a default output format to enum output_formatLucas Seiki Oshiro, Dec 9, 2025
  7. Patrick SteinhardtJan 5, 2026
  8. Lucas Seiki OshiroJan 7, 2026
  9. Patrick SteinhardtJan 8, 2026
  10. 2/2 repo: add new flag --keys to git-repo-infoLucas Seiki Oshiro, Dec 9, 2025
  11. Patrick SteinhardtJan 5, 2026
  12. Lucas Seiki OshiroJan 5, 2026
  13. Patrick SteinhardtJan 5, 2026
  14. 0/2 repo: add --format=default and --keysLucas Seiki Oshiro, Jan 9, 2026
  15. Junio C HamanoJan 10, 2026
  16. Junio C HamanoJan 10, 2026
  17. 1/2 repo: add a default output format to enum output_formatLucas Seiki Oshiro, Jan 9, 2026
  18. 2/2 repo: add new flag --keys to git-repo-infoLucas Seiki Oshiro, Jan 9, 2026
  19. Jean-Noël AVILAJan 10, 2026
  20. Lucas Seiki OshiroJan 10, 2026
  21. Patrick SteinhardtJan 12, 2026
  22. 0/2 repo: add --format=default and --keysLucas Seiki Oshiro, Jan 19, 2026
  23. 1/2 repo: add a default output format to enum output_formatLucas Seiki Oshiro, Jan 19, 2026
  24. 2/2 repo: add new flag --keys to git-repo-infoLucas Seiki Oshiro, Jan 19, 2026
  25. Patrick SteinhardtJan 20, 2026
  26. Lucas Seiki OshiroJan 20, 2026
  27. Patrick SteinhardtJan 21, 2026
  28. Lucas Seiki OshiroJan 21, 2026
  29. Junio C HamanoJan 20, 2026
  30. 0/2 repo: add --keys and rename "keyvalue" to "lines"Lucas Seiki Oshiro, Jan 23, 2026
  31. 1/2 repo: rename "keyvalue" to "lines"Lucas Seiki Oshiro, Jan 23, 2026
  32. Patrick SteinhardtJan 27, 2026
  33. 2/2 repo: add new flag --keys to git-repo-infoLucas Seiki Oshiro, Jan 23, 2026
  34. Patrick SteinhardtJan 27, 2026
  35. Lucas Seiki OshiroJan 27, 2026
  36. 0/2 repo: add --keys and rename "keyvalue" to "lines"Lucas Seiki Oshiro, Feb 14, 2026
  37. 1/2 repo: rename the output format "keyvalue" to "lines"Lucas Seiki Oshiro, Feb 14, 2026
  38. 2/2 repo: add new flag --keys to git-repo-infoLucas Seiki Oshiro, Feb 14, 2026
  39. Junio C HamanoFeb 14, 2026
  40. Patrick SteinhardtFeb 16, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.