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

[PATCH v2 1/1] cat-file: quote-format name in error when using -z

From
Toon Claes <toon@iotcl.com>
Date
Jan 5, 2023, 06:24 UTC
Message-ID
<20230105062447.2943709-2-toon@iotcl.com>
In-Reply-To
<20230105062447.2943709-1-toon@iotcl.com>

Since it's supported to have NUL-delimited input, introduced in db9d67f2e9 (builtin/cat-file.c: support NUL-delimited input with `-z`, 2022-07-22), it's possible to pass paths that contain newlines. This works great when the object is found, but when it's not, the input path is returned in the error message. Because this can contain newlines, the error message might get spread over multiple lines, making it harder to machine-parse this error message.

With this change, the input is quote-formatted in the error message, if needed. This ensures the error message is always on a single line and makes parsing the error more straightforward.

Signed-off-by: Toon Claes <toon@iotcl.com>
---
 builtin/cat-file.c  | 19 +++++++++++++++++++
 t/t1006-cat-file.sh |  8 ++++++++
 2 files changed, 27 insertions(+)
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index b3be58b1fb..6d7d5e2188 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -14,6 +14,7 @@
 #include "tree-walk.h"
 #include "oid-array.h"
 #include "packfile.h"
+#include "quote.h"
 #include "object-store.h"
 #include "promisor-remote.h"
 #include "mailmap.h"
@@ -439,8 +440,17 @@ static void batch_object_write(const char *obj_name,
 						       &data->oid, &data->info,
 						       OBJECT_INFO_LOOKUP_REPLACE);
 		if (ret < 0) {
+			struct strbuf quoted = STRBUF_INIT;
+
+			if (opt->nul_terminated &&
+			    obj_name) {
+				quote_c_style(obj_name, &quoted, NULL, 0);
+				obj_name = quoted.buf;
+			}
+
 			printf("%s missing\n",
 			       obj_name ? obj_name : oid_to_hex(&data->oid));
+			strbuf_release(&quoted);
 			fflush(stdout);
 			return;
 		}
@@ -475,6 +485,13 @@ static void batch_one_object(const char *obj_name,
 	result = get_oid_with_context(the_repository, obj_name,
 				      flags, &data->oid, &ctx);
 	if (result != FOUND) {
+		struct strbuf quoted = STRBUF_INIT;
+
+		if (opt->nul_terminated) {
+			quote_c_style(obj_name, &quoted, NULL, 0);
+			obj_name = quoted.buf;
+		}
+
 		switch (result) {
 		case MISSING_OBJECT:
 			printf("%s missing\n", obj_name);
@@ -499,6 +516,8 @@ static void batch_one_object(const char *obj_name,
 			       result);
 			break;
 		}
+
+		strbuf_release(&quoted);
 		fflush(stdout);
 		return;
 	}
diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh
index 23b8942edb..11344a35bf 100755
--- a/t/t1006-cat-file.sh
+++ b/t/t1006-cat-file.sh
@@ -447,6 +447,14 @@ test_expect_success FUNNYNAMES '--batch-check, -z with newline in input' '
 	test_cmp expect actual
 '

+test_expect_success '--batch-check, -z with newline in non-existent named object' '
+	printf "HEAD:newline${LF}embedded" >in &&
+	git cat-file --batch-check -z <in >actual &&
+
+	printf "\"HEAD:newline\\\\nembedded\" missing\n" >expect &&
+	test_cmp expect actual
+'
+
 batch_command_multiple_info="info $hello_sha1
 info $tree_sha1
 info $commit_sha1
--
2.38.1
Previous: Toon ClaesNext: Toon Claes
Message 15 of 32 in “cat-file: quote-format name in error when using -z”
  1. 0/1 cat-file: quote-format name in error when using -zToon Claes, Dec 9, 2022
  2. 1/1 cat-file: quote-format name in error when using -zToon Claes, Dec 9, 2022
  3. Phillip WoodDec 9, 2022
  4. Junio C HamanoDec 9, 2022
  5. Phillip WoodDec 11, 2022
  6. Junio C HamanoDec 12, 2022
  7. Toon ClaesDec 12, 2022
  8. Junio C HamanoDec 12, 2022
  9. Phillip WoodDec 13, 2022
  10. Junio C HamanoDec 14, 2022
  11. Toon ClaesDec 20, 2022
  12. Phillip WoodDec 20, 2022
  13. Toon ClaesDec 21, 2022
  14. 0/1 cat-file: quote-format name in error when using -zToon Claes, Jan 5, 2023
  15. 1/1 cat-file: quote-format name in error when using -zToon Claes, Jan 5, 2023
  16. 0/1 cat-file: quote-format name in error when using -zToon Claes, Jan 16, 2023
  17. 1/1 cat-file: quote-format name in error when using -zToon Claes, Jan 16, 2023
  18. Phillip WoodJan 17, 2023
  19. 0/2 cat-file: quote-format name in error when using -zToon Claes, Mar 3, 2023
  20. 2/2 cat-file: quote-format name in error when using -zToon Claes, Mar 3, 2023
  21. 1/2 cat-file: extract printing batch error message into functionToon Claes, Mar 3, 2023
  22. Junio C HamanoMar 3, 2023
  23. Junio C HamanoMar 3, 2023
  24. 0/1 cat-file: quote-format name in error when using -zToon Claes, May 10, 2023
  25. 1/1 cat-file: quote-format name in error when using -zToon Claes, May 10, 2023
  26. Junio C HamanoMay 10, 2023
  27. Toon ClaesMay 12, 2023
  28. Junio C HamanoMay 12, 2023
  29. Phillip WoodMay 15, 2023
  30. Junio C HamanoMay 15, 2023
  31. Phillip WoodJun 2, 2023
  32. Junio C HamanoMar 3, 2023

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.