зеркало из https://github.com/microsoft/git.git
commit-graph: prepare commit graph
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> Reviewed-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
fde55b0906
Коммит
bc50d6c91f
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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++;
|
||||
|
@ -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++) {
|
||||
|
|
|
@ -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" &&
|
||||
|
|
Загрузка…
Ссылка в новой задаче