Skip to content

Commit

Permalink
commit-graph: prepare commit graph
Browse files Browse the repository at this point in the history
Before checking if the repository has a commit-graph loaded, be sure
to run prepare_commit_graph(). This is necessary because otherwise
the topo_levels slab is not initialized. As we compute topo_levels for
the new commits, we iterate further into the lower layers since the
first visit to each commit looks as though the topo_level is not
populated.

By properly initializing the topo_slab, we fix the previously broken
case of a split commit graph where a base layer has the
generation_data_overflow chunk.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
  • Loading branch information
derrickstolee committed Feb 2, 2021
1 parent 9bccee8 commit 38086c8
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 9 deletions.
10 changes: 2 additions & 8 deletions commit-graph.c
Expand Up @@ -2348,6 +2348,7 @@ int write_commit_graph(struct object_directory *odb,
init_topo_level_slab(&topo_levels);
ctx->topo_levels = &topo_levels;

prepare_commit_graph(ctx->r);
if (ctx->r->objects->commit_graph) {
struct commit_graph *g = ctx->r->objects->commit_graph;

Expand All @@ -2361,7 +2362,6 @@ int write_commit_graph(struct object_directory *odb,
ctx->changed_paths = 1;
if (!(flags & COMMIT_GRAPH_NO_WRITE_BLOOM_FILTERS)) {
struct commit_graph *g;
prepare_commit_graph_one(ctx->r, ctx->odb);

g = ctx->r->objects->commit_graph;

Expand All @@ -2373,10 +2373,7 @@ int write_commit_graph(struct object_directory *odb,
}

if (ctx->split) {
struct commit_graph *g;
prepare_commit_graph(ctx->r);

g = ctx->r->objects->commit_graph;
struct commit_graph *g = ctx->r->objects->commit_graph;

while (g) {
ctx->num_commit_graphs_before++;
Expand All @@ -2400,9 +2397,6 @@ int write_commit_graph(struct object_directory *odb,

ctx->approx_nr_objects = approximate_object_count();

if (ctx->append)
prepare_commit_graph_one(ctx->r, ctx->odb);

if (ctx->append && ctx->r->objects->commit_graph) {
struct commit_graph *g = ctx->r->objects->commit_graph;
for (i = 0; i < g->num_commits; i++) {
Expand Down
2 changes: 1 addition & 1 deletion t/t5318-commit-graph.sh
Expand Up @@ -446,7 +446,7 @@ test_expect_success 'warn on improper hash version' '
)
'

test_expect_failure 'lower layers have overflow chunk' '
test_expect_success 'lower layers have overflow chunk' '
cd "$TRASH_DIRECTORY/full" &&
UNIX_EPOCH_ZERO="@0 +0000" &&
FUTURE_DATE="@2147483646 +0000" &&
Expand Down

0 comments on commit 38086c8

Please sign in to comment.