diff options
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java | 16 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java | 25 |
2 files changed, 39 insertions, 2 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java index 6e02b36ccb..7427598257 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java @@ -68,6 +68,7 @@ import org.eclipse.jgit.lib.AsyncObjectSizeQueue; import org.eclipse.jgit.lib.BatchingProgressMonitor; import org.eclipse.jgit.lib.BitmapIndex; import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder; +import org.eclipse.jgit.lib.BitmapIndex.BitmapLookupListener; import org.eclipse.jgit.lib.BitmapObject; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.NullProgressMonitor; @@ -2029,8 +2030,19 @@ public class PackWriter implements AutoCloseable { if (!shallowPack && useBitmaps) { BitmapIndex bitmapIndex = reader.getBitmapIndex(); if (bitmapIndex != null) { - BitmapWalker bitmapWalker = new BitmapWalker( - walker, bitmapIndex, countingMonitor); + bitmapIndex.addBitmapLookupListener(new BitmapLookupListener() { + @Override + public void onBitmapFound(AnyObjectId oid) { + stats.objectsWithBitmapsFound.add(oid); + } + + @Override + public void onBitmapNotFound(AnyObjectId oid) { + // Nothing to do + } + }); + BitmapWalker bitmapWalker = new BitmapWalker(walker, + bitmapIndex, countingMonitor); findObjectsToPackUsingBitmaps(bitmapWalker, want, have); endPhase(countingMonitor); stats.timeCounting = System.currentTimeMillis() - countingStart; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java index 64a1eb2e1a..7c8ed24330 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java @@ -48,13 +48,16 @@ import static org.eclipse.jgit.lib.Constants.OBJ_TAG; import static org.eclipse.jgit.lib.Constants.OBJ_TREE; import java.text.MessageFormat; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.storage.pack.CachedPack; +import org.eclipse.jgit.lib.AnyObjectId; import org.eclipse.jgit.lib.ObjectId; /** @@ -232,6 +235,16 @@ public class PackStatistics { /** Commits with no parents. */ public Set<ObjectId> rootCommits; + /** + * Set of objects with bitmap hit when finding objects to pack. + * + * The size of this set plus {@link #bitmapIndexMisses} should be the + * walked size of the graph + * + * @since 6.9 + */ + public Set<AnyObjectId> objectsWithBitmapsFound = new HashSet<>(); + /** If a shallow pack, the depth in commits. */ public int depth; @@ -433,6 +446,18 @@ public class PackStatistics { } /** + * Get unmodifiable collection of objects walked in the request that had a + * bitmap. + * + * @return ummodifiable collection of objects that had a bitmap attached + * + * @since 6.9 + */ + public Set<AnyObjectId> getObjectsWithBitmapsFound() { + return Collections.unmodifiableSet(statistics.objectsWithBitmapsFound); + } + + /** * Get unmodifiable list of the cached packs that were reused in the output * * @return unmodifiable list of the cached packs that were reused in the |