diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java index e250289bd..a58caa924 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java @@ -269,30 +269,23 @@ Collection selectCommits(int expectedCommitCount) // selected commit to fullBitmap. } - // Sort the commits by independent chains in its history, - // yielding better compression when building bitmaps. - List> candidateChain = new ArrayList< - List>(); + // Sort the commits by independent chains in this branch's + // history, yielding better compression when building bitmaps. + List longestAncestorChain = null; for (List chain : chains) { BitmapCommit mostRecentCommit = chain.get(chain.size() - 1); if (fullBitmap.contains(mostRecentCommit)) { - candidateChain.add(chain); - } - } - - List longestAncestorChain; - if (candidateChain.isEmpty()) { - longestAncestorChain = new ArrayList(); - chains.add(longestAncestorChain); - } else { - longestAncestorChain = candidateChain.get(0); - // Append to longest - for (List chain : candidateChain) { - if (chain.size() > longestAncestorChain.size()) { + if (longestAncestorChain == null + || longestAncestorChain.size() < chain.size()) { longestAncestorChain = chain; } } } + + if (longestAncestorChain == null) { + longestAncestorChain = new ArrayList(); + chains.add(longestAncestorChain); + } longestAncestorChain.add(new BitmapCommit( c, !longestAncestorChain.isEmpty(), flags)); writeBitmaps.addBitmap(c, fullBitmap, 0);