]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t/helper/test-read-graph: implement `bloom-filters` mode
authorTaylor Blau <me@ttaylorr.com>
Tue, 25 Jun 2024 17:39:44 +0000 (13:39 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 25 Jun 2024 20:52:06 +0000 (13:52 -0700)
Implement a mode of the "read-graph" test helper to dump out the
hexadecimal contents of the Bloom filter(s) contained in a commit-graph.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-read-graph.c

index 3375392f6c4d16f10f575a919dfacdd65e75701f..899b5f41cc64ed804b84ff0e1a95b264535c384c 100644 (file)
@@ -47,10 +47,32 @@ static void dump_graph_info(struct commit_graph *graph)
        printf("\n");
 }
 
-int cmd__read_graph(int argc UNUSED, const char **argv UNUSED)
+static void dump_graph_bloom_filters(struct commit_graph *graph)
+{
+       uint32_t i;
+
+       for (i = 0; i < graph->num_commits + graph->num_commits_in_base; i++) {
+               struct bloom_filter filter = { 0 };
+               size_t j;
+
+               if (load_bloom_filter_from_graph(graph, &filter, i) < 0) {
+                       fprintf(stderr, "missing Bloom filter for graph "
+                               "position %"PRIu32"\n", i);
+                       continue;
+               }
+
+               for (j = 0; j < filter.len; j++)
+                       printf("%02x", filter.data[j]);
+               if (filter.len)
+                       printf("\n");
+       }
+}
+
+int cmd__read_graph(int argc, const char **argv)
 {
        struct commit_graph *graph = NULL;
        struct object_directory *odb;
+       int ret = 0;
 
        setup_git_directory();
        odb = the_repository->objects->odb;
@@ -58,12 +80,22 @@ int cmd__read_graph(int argc UNUSED, const char **argv UNUSED)
        prepare_repo_settings(the_repository);
 
        graph = read_commit_graph_one(the_repository, odb);
-       if (!graph)
-               return 1;
+       if (!graph) {
+               ret = 1;
+               goto done;
+       }
 
-       dump_graph_info(graph);
+       if (argc <= 1)
+               dump_graph_info(graph);
+       else if (!strcmp(argv[1], "bloom-filters"))
+               dump_graph_bloom_filters(graph);
+       else {
+               fprintf(stderr, "unknown sub-command: '%s'\n", argv[1]);
+               ret = 1;
+       }
 
+done:
        UNLEAK(graph);
 
-       return 0;
+       return ret;
 }