commit-graph: propagate topo_levels slab to all chain layers

The topo_levels slab is only propagated to the topmost graph
layer instead of all layers in the chain.  Commits from lower
layers appear to have no generation numbers, so the DFS
re-walks the entire ancestry.

Fix by making topo_levels visible to all layers, not just
the first one.

Signed-off-by: Kristofer Karlsson <krka@spotify.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
Kristofer Karlsson 2026-07-09 15:03:01 +00:00 committed by Junio C Hamano
parent 02d62c33be
commit 8ea36f63d8
2 changed files with 2 additions and 2 deletions

View File

@ -2610,7 +2610,7 @@ int write_commit_graph(struct odb_source *source,

g = prepare_commit_graph(ctx.r);
for (struct commit_graph *chain = g; chain; chain = chain->base_graph)
g->topo_levels = &topo_levels;
chain->topo_levels = &topo_levels;

if (flags & COMMIT_GRAPH_WRITE_BLOOM_FILTERS)
ctx.changed_paths = 1;

View File

@ -718,7 +718,7 @@ test_expect_success 'write generation data chunk when commit-graph chain is repl
)
'

test_expect_failure 'incremental write reads topo levels from all layers' '
test_expect_success 'incremental write reads topo levels from all layers' '
git init topo-from-lower &&
(
cd topo-from-lower &&