summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java16
1 files changed, 8 insertions, 8 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java
index b52d3f70a4..5e1e2b1a38 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java
@@ -121,6 +121,8 @@ public class PackFile implements Iterable<PackIndex.MutableEntry> {
private volatile boolean invalid;
+ private boolean invalidBitmap;
+
private byte[] packChecksum;
private PackIndex loadedIdx;
@@ -1057,19 +1059,17 @@ public class PackFile implements Iterable<PackIndex.MutableEntry> {
}
synchronized PackBitmapIndex getBitmapIndex() throws IOException {
- if (invalid)
+ if (invalid || invalidBitmap)
return null;
if (bitmapIdx == null && hasExt(BITMAP_INDEX)) {
final PackBitmapIndex idx = PackBitmapIndex.open(
extFile(BITMAP_INDEX), idx(), getReverseIdx());
- if (packChecksum == null)
- packChecksum = idx.packChecksum;
- else if (!Arrays.equals(packChecksum, idx.packChecksum))
- throw new PackMismatchException(
- JGitText.get().packChecksumMismatch);
-
- bitmapIdx = idx;
+ // At this point, idx() will have set packChecksum.
+ if (Arrays.equals(packChecksum, idx.packChecksum))
+ bitmapIdx = idx;
+ else
+ invalidBitmap = true;
}
return bitmapIdx;
}