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

[PATCH 01/11] multi-pack-index: add 'verify' verb

From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Date
Sep 5, 2018, 14:46 UTC
Message-ID
<8dc38afe2b4d73e940daf9a0ff7f9c0a38802d95.1536158789.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.34.git.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>

The multi-pack-index builtin writes multi-pack-index files, and uses a 'write' verb to do so. Add a 'verify' verb that checks this file matches the contents of the pack-indexes it replaces.

The current implementation is a no-op, but will be extended in small increments in later commits.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
---
 Documentation/git-multi-pack-index.txt | 10 ++++++++++
 builtin/multi-pack-index.c             |  4 +++-
 midx.c                                 | 13 +++++++++++++
 midx.h                                 |  1 +
 t/t5319-multi-pack-index.sh            |  8 ++++++++
 5 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-multi-pack-index.txt b/Documentation/git-multi-pack-index.txt
index 1f97e79912..f7778a2c85 100644
--- a/Documentation/git-multi-pack-index.txt
+++ b/Documentation/git-multi-pack-index.txt
@@ -27,6 +27,10 @@ write::
 	When given as the verb, write a new MIDX file to
 	`<dir>/packs/multi-pack-index`.
 
+verify::
+	When given as the verb, verify the contents of the MIDX file
+	at `<dir>/packs/multi-pack-index`.
+
 
 EXAMPLES
 --------
@@ -43,6 +47,12 @@ $ git multi-pack-index write
 $ git multi-pack-index --object-dir <alt> write
 -----------------------------------------------
 
+* Verify the MIDX file for the packfiles in the current .git folder.
++
+-----------------------------------------------
+$ git multi-pack-index verify
+-----------------------------------------------
+
 
 SEE ALSO
 --------
diff --git a/builtin/multi-pack-index.c b/builtin/multi-pack-index.c
index 2633efd95d..7d567dafbc 100644
--- a/builtin/multi-pack-index.c
+++ b/builtin/multi-pack-index.c
@@ -5,7 +5,7 @@
 #include "midx.h"
 
 static char const * const builtin_multi_pack_index_usage[] = {
-	N_("git multi-pack-index [--object-dir=<dir>] write"),
+	N_("git multi-pack-index [--object-dir=<dir>] [write|verify]"),
 	NULL
 };
 
@@ -42,6 +42,8 @@ int cmd_multi_pack_index(int argc, const char **argv,
 
 	if (!strcmp(argv[0], "write"))
 		return write_midx_file(opts.object_dir);
+	if (!strcmp(argv[0], "verify"))
+		return verify_midx_file(opts.object_dir);
 
 	die(_("unrecognized verb: %s"), argv[0]);
 }
diff --git a/midx.c b/midx.c
index f3e8dbc108..b253bed517 100644
--- a/midx.c
+++ b/midx.c
@@ -928,3 +928,16 @@ void clear_midx_file(const char *object_dir)
 
 	free(midx);
 }
+
+int verify_midx_error;
+
+int verify_midx_file(const char *object_dir)
+{
+	struct multi_pack_index *m = load_multi_pack_index(object_dir, 1);
+	verify_midx_error = 0;
+
+	if (!m)
+		return 0;
+
+	return verify_midx_error;
+}
diff --git a/midx.h b/midx.h
index a210f1af2a..ce80b91c68 100644
--- a/midx.h
+++ b/midx.h
@@ -43,5 +43,6 @@ int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, i
 
 int write_midx_file(const char *object_dir);
 void clear_midx_file(const char *object_dir);
+int verify_midx_file(const char *object_dir);
 
 #endif
diff --git a/t/t5319-multi-pack-index.sh b/t/t5319-multi-pack-index.sh
index 6f56b38674..1c4e0e6d31 100755
--- a/t/t5319-multi-pack-index.sh
+++ b/t/t5319-multi-pack-index.sh
@@ -150,6 +150,10 @@ test_expect_success 'write midx with twelve packs' '
 
 compare_results_with_midx "twelve packs"
 
+test_expect_success 'verify multi-pack-index success' '
+	git multi-pack-index verify --object-dir=$objdir
+'
+
 test_expect_success 'repack removes multi-pack-index' '
 	test_path_is_file $objdir/pack/multi-pack-index &&
 	git repack -adf &&
@@ -214,4 +218,8 @@ test_expect_success 'force some 64-bit offsets with pack-objects' '
 	midx_read_expect 1 63 5 objects64 " large-offsets"
 '
 
+test_expect_success 'verify multi-pack-index with 64-bit offsets' '
+	git multi-pack-index verify --object-dir=objects64
+'
+
 test_done
-- 
gitgitgadget
Previous: Derrick Stolee via GitGitGadgetNext: Eric Sunshine
Message 2 of 34 in “Add 'git multi-pack-index verify' command”
  1. 00/11 Add 'git multi-pack-index verify' commandDerrick Stolee via GitGitGadget, Sep 5, 2018
  2. 01/11 multi-pack-index: add 'verify' verbDerrick Stolee via GitGitGadget, Sep 5, 2018
  3. Eric SunshineSep 5, 2018
  4. Derrick StoleeSep 5, 2018
  5. 02/11 multi-pack-index: verify bad headerDerrick Stolee via GitGitGadget, Sep 5, 2018
  6. Eric SunshineSep 7, 2018
  7. 04/11 multi-pack-index: verify packname orderDerrick Stolee via GitGitGadget, Sep 5, 2018
  8. Stefan BellerSep 5, 2018
  9. Derrick StoleeSep 5, 2018
  10. Stefan BellerSep 5, 2018
  11. Derrick StoleeSep 5, 2018
  12. 05/11 multi-pack-index: verify missing packDerrick Stolee via GitGitGadget, Sep 5, 2018
  13. 06/11 multi-pack-index: verify oid fanout orderDerrick Stolee via GitGitGadget, Sep 5, 2018
  14. 07/11 multi-pack-index: verify oid lookup orderDerrick Stolee via GitGitGadget, Sep 5, 2018
  15. 08/11 multi-pack-index: fix 32-bit vs 64-bit size checkDerrick Stolee via GitGitGadget, Sep 5, 2018
  16. 03/11 multi-pack-index: verify corrupt chunk lookup tableDerrick Stolee via GitGitGadget, Sep 5, 2018
  17. 09/11 multi-pack-index: verify object offsetsDerrick Stolee via GitGitGadget, Sep 5, 2018
  18. Eric SunshineSep 7, 2018
  19. Derrick StoleeSep 7, 2018
  20. 10/11 multi-pack-index: report progress during 'verify'Derrick Stolee via GitGitGadget, Sep 5, 2018
  21. 11/11 fsck: verify multi-pack-indexDerrick Stolee via GitGitGadget, Sep 5, 2018
  22. 00/11 Add 'git multi-pack-index verify' commandDerrick Stolee via GitGitGadget, Sep 13, 2018
  23. 02/11 multi-pack-index: verify bad headerDerrick Stolee via GitGitGadget, Sep 13, 2018
  24. 03/11 multi-pack-index: verify corrupt chunk lookup tableDerrick Stolee via GitGitGadget, Sep 13, 2018
  25. 04/11 multi-pack-index: verify packname orderDerrick Stolee via GitGitGadget, Sep 13, 2018
  26. 05/11 multi-pack-index: verify missing packDerrick Stolee via GitGitGadget, Sep 13, 2018
  27. 06/11 multi-pack-index: verify oid fanout orderDerrick Stolee via GitGitGadget, Sep 13, 2018
  28. 07/11 multi-pack-index: verify oid lookup orderDerrick Stolee via GitGitGadget, Sep 13, 2018
  29. 08/11 multi-pack-index: fix 32-bit vs 64-bit size checkDerrick Stolee via GitGitGadget, Sep 13, 2018
  30. 09/11 multi-pack-index: verify object offsetsDerrick Stolee via GitGitGadget, Sep 13, 2018
  31. 10/11 multi-pack-index: report progress during 'verify'Derrick Stolee via GitGitGadget, Sep 13, 2018
  32. Ævar Arnfjörð BjarmasonSep 13, 2018
  33. 11/11 fsck: verify multi-pack-indexDerrick Stolee via GitGitGadget, Sep 13, 2018
  34. 01/11 multi-pack-index: add 'verify' verbDerrick Stolee via GitGitGadget, Sep 13, 2018

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.