summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit/src')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java21
1 files changed, 18 insertions, 3 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java
index d4981236ad..d3e1990a92 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java
@@ -45,6 +45,7 @@ package org.eclipse.jgit.internal.storage.file;
import java.util.Collections;
import java.util.Iterator;
+import java.util.NoSuchElementException;
import javaewah.EWAHCompressedBitmap;
import javaewah.IntIterator;
@@ -142,13 +143,24 @@ public class PackBitmapIndexRemapper extends PackBitmapIndex
final Iterator<StoredBitmap> it = oldPackIndex.getBitmaps().iterator();
return new Iterator<Entry>() {
+ private Entry entry;
+
public boolean hasNext() {
- return it.hasNext();
+ while (entry == null && it.hasNext()) {
+ StoredBitmap sb = it.next();
+ if (newPackIndex.findPosition(sb) != -1)
+ entry = new Entry(sb, sb.getFlags());
+ }
+ return entry != null;
}
public Entry next() {
- StoredBitmap sb = it.next();
- return new Entry(sb, sb.getFlags());
+ if (!hasNext())
+ throw new NoSuchElementException();
+
+ Entry res = entry;
+ entry = null;
+ return res;
}
public void remove() {
@@ -171,6 +183,9 @@ public class PackBitmapIndexRemapper extends PackBitmapIndex
if (oldBitmap == null)
return null;
+ if (newPackIndex.findPosition(objectId) == -1)
+ return null;
+
inflated.clear();
for (IntIterator i = oldBitmap.getBitmap().intIterator(); i.hasNext();)
inflated.set(prevToNewMapping[i.next()]);