summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java13
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapWalker.java22
2 files changed, 32 insertions, 3 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 8fac907270..adc6bf11ab 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
@@ -1591,6 +1591,7 @@ public class PackWriter implements AutoCloseable {
findObjectsToPackUsingBitmaps(bitmapWalker, want, have);
endPhase(countingMonitor);
stats.timeCounting = System.currentTimeMillis() - countingStart;
+ stats.bitmapIndexMisses = bitmapWalker.getCountOfBitmapIndexMisses();
return;
}
}
@@ -2084,6 +2085,8 @@ public class PackWriter implements AutoCloseable {
long totalObjects;
+ long bitmapIndexMisses;
+
long totalDeltas;
long reusedObjects;
@@ -2166,6 +2169,16 @@ public class PackWriter implements AutoCloseable {
}
/**
+ * @return the count of objects that needed to be discovered through an
+ * object walk because they were not found in bitmap indices.
+ *
+ * @since 4.0
+ */
+ public long getBitmapIndexMisses() {
+ return bitmapIndexMisses;
+ }
+
+ /**
* @return total number of deltas output. This may be lower than the
* actual number of deltas if a cached pack was reused.
*/
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapWalker.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapWalker.java
index 63a91cd82d..debb2f2abc 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapWalker.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapWalker.java
@@ -71,6 +71,8 @@ final class PackWriterBitmapWalker {
private final ProgressMonitor pm;
+ private long countOfBitmapIndexMisses;
+
PackWriterBitmapWalker(
ObjectWalk walker, BitmapIndex bitmapIndex, ProgressMonitor pm) {
this.walker = walker;
@@ -78,6 +80,10 @@ final class PackWriterBitmapWalker {
this.pm = (pm == null) ? NullProgressMonitor.INSTANCE : pm;
}
+ long getCountOfBitmapIndexMisses() {
+ return countOfBitmapIndexMisses;
+ }
+
BitmapBuilder findObjects(Set<? extends ObjectId> start, BitmapBuilder seen, boolean ignoreMissingStart)
throws MissingObjectException, IncorrectObjectTypeException,
IOException {
@@ -104,7 +110,8 @@ final class PackWriterBitmapWalker {
}
if (marked) {
- walker.setRevFilter(newRevFilter(seen, bitmapResult));
+ BitmapRevFilter filter = newRevFilter(seen, bitmapResult);
+ walker.setRevFilter(filter);
while (walker.next() != null) {
// Iterate through all of the commits. The BitmapRevFilter does
@@ -117,6 +124,7 @@ final class PackWriterBitmapWalker {
bitmapResult.add(ro, ro.getType());
pm.update(1);
}
+ countOfBitmapIndexMisses += filter.getCountOfLoadedCommits();
}
return bitmapResult;
@@ -126,7 +134,7 @@ final class PackWriterBitmapWalker {
walker.reset();
}
- static RevFilter newRevFilter(
+ static BitmapRevFilter newRevFilter(
final BitmapBuilder seen, final BitmapBuilder bitmapResult) {
if (seen != null) {
return new BitmapRevFilter() {
@@ -146,12 +154,16 @@ final class PackWriterBitmapWalker {
}
static abstract class BitmapRevFilter extends RevFilter {
+ private long countOfLoadedCommits;
+
protected abstract boolean load(RevCommit cmit);
@Override
public final boolean include(RevWalk walker, RevCommit cmit) {
- if (load(cmit))
+ if (load(cmit)) {
+ countOfLoadedCommits++;
return true;
+ }
for (RevCommit p : cmit.getParents())
p.add(RevFlag.SEEN);
return false;
@@ -166,5 +178,9 @@ final class PackWriterBitmapWalker {
public final boolean requiresCommitBody() {
return false;
}
+
+ long getCountOfLoadedCommits() {
+ return countOfLoadedCommits;
+ }
}
}