t/helper/test-read-graph: implement bloom-filters mode

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>
This commit is contained in:
Taylor Blau
2023-08-01 11:41:39 -07:00
committed by Junio C Hamano
parent 739b46a89f
commit fbc8cb081c

View 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,24 @@ 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;
}