diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java index aef01fbb3..85f726a55 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java @@ -40,6 +40,7 @@ import java.util.Stack; import org.eclipse.jgit.annotations.NonNull; +import org.eclipse.jgit.annotations.Nullable; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; @@ -122,7 +123,14 @@ public Stats write(@NonNull ProgressMonitor monitor, return stats; } - List chunks = createChunks(stats); + BloomFilterChunks bloomFilterChunks = generateChangedPathFilters + ? computeBloomFilterChunks(stats) + : null; + List chunks = new ArrayList<>(); + chunks.addAll(createCoreChunks(hashsz, graphCommits)); + chunks.addAll(createBloomFilterChunkHeaders(bloomFilterChunks)); + chunks = Collections.unmodifiableList(chunks); + long expectedSize = calculateExpectedSize(chunks); long writeCount = 256 + 2 * graphCommits.size() + graphCommits.getExtraEdgeCnt(); @@ -151,7 +159,7 @@ public Stats write(@NonNull ProgressMonitor monitor, return stats; } - private List createChunks(Stats stats) + private static List createCoreChunks(int hashsz, GraphCommits graphCommits) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { List chunks = new ArrayList<>(); @@ -164,9 +172,13 @@ private List createChunks(Stats stats) chunks.add(new ChunkHeader(CHUNK_ID_EXTRA_EDGE_LIST, graphCommits.getExtraEdgeCnt() * 4)); } - if (generateChangedPathFilters) { - BloomFilterChunks bloomFilterChunks = computeBloomFilterChunks( - stats); + return Collections.unmodifiableList(chunks); + } + + private static List createBloomFilterChunkHeaders( + @Nullable BloomFilterChunks bloomFilterChunks) { + List chunks = new ArrayList<>(); + if (bloomFilterChunks != null) { chunks.add(new ChunkHeader(CHUNK_ID_BLOOM_FILTER_INDEX, bloomFilterChunks.index)); chunks.add(new ChunkHeader(CHUNK_ID_BLOOM_FILTER_DATA,