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

[PATCH v3 30/39] builtin/verify-pack: implement an --object-format option

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jul 23, 2020, 01:09 UTC
Message-ID
<20200723010943.2329634-31-sandals@crustytoothpaste.net>
In-Reply-To
<20200723010943.2329634-1-sandals@crustytoothpaste.net>

A recently added test in t5702 started using git verify-pack outside of a repository. While this poses no problems with SHA-1, with SHA-256 we implicitly rely on the setup of the repository to initialize our hash algorithm settings.

Since we're not in a repository here, we need to provide git verify-pack help to set things up properly. git index-pack already knows an --object-format option, so let's accept one as well and pass it down to our git index-pack invocation. Since this argument is optional, let's dynamically determine the proper location to insert it into the array. Finally, let's make t5702 pass the proper argument on down to its git verify-pack caller.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 builtin/verify-pack.c  | 25 +++++++++++++++++--------
 t/t5702-protocol-v2.sh |  2 +-
 2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/builtin/verify-pack.c b/builtin/verify-pack.c
index c2a1a5c504..c4090102a9 100644
--- a/builtin/verify-pack.c
+++ b/builtin/verify-pack.c
@@ -7,21 +7,27 @@
 #define VERIFY_PACK_VERBOSE 01
 #define VERIFY_PACK_STAT_ONLY 02
 
-static int verify_one_pack(const char *path, unsigned int flags)
+static int verify_one_pack(const char *path, unsigned int flags, const char *hash_algo)
 {
 	struct child_process index_pack = CHILD_PROCESS_INIT;
-	const char *argv[] = {"index-pack", NULL, NULL, NULL };
-	struct strbuf arg = STRBUF_INIT;
+	const char *argv[] = {"index-pack", NULL, NULL, NULL, NULL };
+	struct strbuf arg = STRBUF_INIT, hash_arg = STRBUF_INIT;
 	int verbose = flags & VERIFY_PACK_VERBOSE;
 	int stat_only = flags & VERIFY_PACK_STAT_ONLY;
 	int err;
+	int argno = 1;
 
 	if (stat_only)
-		argv[1] = "--verify-stat-only";
+		argv[argno++] = "--verify-stat-only";
 	else if (verbose)
-		argv[1] = "--verify-stat";
+		argv[argno++] = "--verify-stat";
 	else
-		argv[1] = "--verify";
+		argv[argno++] = "--verify";
+
+	if (hash_algo) {
+		strbuf_addf(&hash_arg, "--object-format=%s", hash_algo);
+		argv[argno++] = hash_arg.buf;
+	}
 
 	/*
 	 * In addition to "foo.pack" we accept "foo.idx" and "foo";
@@ -31,7 +37,7 @@ static int verify_one_pack(const char *path, unsigned int flags)
 	if (strbuf_strip_suffix(&arg, ".idx") ||
 	    !ends_with(arg.buf, ".pack"))
 		strbuf_addstr(&arg, ".pack");
-	argv[2] = arg.buf;
+	argv[argno++] = arg.buf;
 
 	index_pack.argv = argv;
 	index_pack.git_cmd = 1;
@@ -60,12 +66,15 @@ int cmd_verify_pack(int argc, const char **argv, const char *prefix)
 {
 	int err = 0;
 	unsigned int flags = 0;
+	const char *object_format = NULL;
 	int i;
 	const struct option verify_pack_options[] = {
 		OPT_BIT('v', "verbose", &flags, N_("verbose"),
 			VERIFY_PACK_VERBOSE),
 		OPT_BIT('s', "stat-only", &flags, N_("show statistics only"),
 			VERIFY_PACK_STAT_ONLY),
+		OPT_STRING(0, "object-format", &object_format, N_("hash"),
+			   N_("specify the hash algorithm to use")),
 		OPT_END()
 	};
 
@@ -75,7 +84,7 @@ int cmd_verify_pack(int argc, const char **argv, const char *prefix)
 	if (argc < 1)
 		usage_with_options(verify_pack_usage, verify_pack_options);
 	for (i = 0; i < argc; i++) {
-		if (verify_one_pack(argv[i], flags))
+		if (verify_one_pack(argv[i], flags, object_format))
 			err = 1;
 	}
 
diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh
index 1b54c35b01..7fc22171e7 100755
--- a/t/t5702-protocol-v2.sh
+++ b/t/t5702-protocol-v2.sh
@@ -829,7 +829,7 @@ test_expect_success 'part of packfile response provided as URI' '
 	# Ensure that my-blob and other-blob are in separate packfiles.
 	for idx in http_child/.git/objects/pack/*.idx
 	do
-		git verify-pack --verbose $idx >out &&
+		git verify-pack --object-format=$(test_oid algo) --verbose $idx >out &&
 		{
 			grep "^[0-9a-f]\{16,\} " out || :
 		} >out.objectlist &&
Previous: brian m. carlsonNext: Eric Sunshine
Message 13 of 52 in “SHA-256, part 3/3”
  1. 00/39 SHA-256, part 3/3brian m. carlson, Jul 23, 2020
  2. 02/39 t1001: use $ZERO_OIDbrian m. carlson, Jul 23, 2020
  3. 03/39 t3305: make hash agnosticbrian m. carlson, Jul 23, 2020
  4. 14/39 t7400: make hash size independentbrian m. carlson, Jul 23, 2020
  5. 05/39 t6100: make hash size independentbrian m. carlson, Jul 23, 2020
  6. 19/39 t8003: make hash size independentbrian m. carlson, Jul 23, 2020
  7. 18/39 t8002: make hash size independentbrian m. carlson, Jul 23, 2020
  8. 22/39 t9300: use $ZERO_OID instead of hard-coded object IDbrian m. carlson, Jul 23, 2020
  9. 23/39 t9301: make hash size independentbrian m. carlson, Jul 23, 2020
  10. 26/39 t9700: make hash size independentbrian m. carlson, Jul 23, 2020
  11. 25/39 t9500: ensure that algorithm info is preserved in configbrian m. carlson, Jul 23, 2020
  12. 24/39 t9350: make hash size independentbrian m. carlson, Jul 23, 2020
  13. 30/39 builtin/verify-pack: implement an --object-format optionbrian m. carlson, Jul 23, 2020
  14. Eric SunshineJul 23, 2020
  15. 31/39 bundle: add new version for use with SHA-256brian m. carlson, Jul 23, 2020
  16. Eric SunshineJul 23, 2020
  17. Eric SunshineJul 23, 2020
  18. brian m. carlsonJul 24, 2020
  19. 38/39 docs: add documentation for extensions.objectFormatbrian m. carlson, Jul 23, 2020
  20. 37/39 ci: run tests with SHA-256brian m. carlson, Jul 23, 2020
  21. 32/39 setup: add support for reading extensions.objectformatbrian m. carlson, Jul 23, 2020
  22. Junio C HamanoJul 23, 2020
  23. brian m. carlsonJul 23, 2020
  24. Junio C HamanoJul 23, 2020
  25. brian m. carlsonJul 25, 2020
  26. 33/39 Enable SHA-256 support by defaultbrian m. carlson, Jul 23, 2020
  27. 39/39 t: remove test_oid_init in testsbrian m. carlson, Jul 23, 2020
  28. 20/39 t8011: make hash size independentbrian m. carlson, Jul 23, 2020
  29. 29/39 http-fetch: set up git directory before parsing pack hashesbrian m. carlson, Jul 23, 2020
  30. 08/39 t6500: specify test values for SHA-256brian m. carlson, Jul 23, 2020
  31. 13/39 t7102: abstract away SHA-1-specific constantsbrian m. carlson, Jul 23, 2020
  32. 11/39 t7063: make hash size independentbrian m. carlson, Jul 23, 2020
  33. 04/39 t3404: prepare 'short SHA-1 collision' tests for SHA-256brian m. carlson, Jul 23, 2020
  34. 06/39 t6101: make hash size independentbrian m. carlson, Jul 23, 2020
  35. 09/39 t6501: avoid hard-coded objectsbrian m. carlson, Jul 23, 2020
  36. 01/39 t: make test-bloom initialize repositorybrian m. carlson, Jul 23, 2020
  37. 12/39 t7201: abstract away SHA-1-specific constantsbrian m. carlson, Jul 23, 2020
  38. 17/39 t7508: use $ZERO_OID instead of hard-coded constantbrian m. carlson, Jul 23, 2020
  39. 10/39 t7003: compute appropriate length constantbrian m. carlson, Jul 23, 2020
  40. 07/39 t6301: make hash size independentbrian m. carlson, Jul 23, 2020
  41. 21/39 t9300: abstract away SHA-1-specific constantsbrian m. carlson, Jul 23, 2020
  42. 16/39 t7506: avoid checking for SHA-1-specific constantsbrian m. carlson, Jul 23, 2020
  43. 15/39 t7405: make hash size independentbrian m. carlson, Jul 23, 2020
  44. 34/39 t: add test_oid option to select hash algorithmbrian m. carlson, Jul 23, 2020
  45. Eric SunshineJul 23, 2020
  46. brian m. carlsonJul 23, 2020
  47. Eric SunshineJul 23, 2020
  48. Junio C HamanoJul 24, 2020
  49. 35/39 t: allow testing different hash algorithms via environmentbrian m. carlson, Jul 23, 2020
  50. 36/39 t: make SHA1 prerequisite depend on default hashbrian m. carlson, Jul 23, 2020
  51. 27/39 t5308: make test work with SHA-256brian m. carlson, Jul 23, 2020
  52. 28/39 t0410: mark test with SHA1 prerequisitebrian m. carlson, Jul 23, 2020

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.