From 570bba5e7acb08df827655c31045bfe9cde9d856 Mon Sep 17 00:00:00 2001 From: Colby Ranger Date: Thu, 19 Sep 2013 14:33:13 -0700 Subject: [PATCH] Ignore bitmap indexes that do not match the pack checksum If `git gc` creates a new pack with the same file name, the pack checksum may not match that in the .bitmap. Fix the PackFile implementaion to silently ignore invalid bitmap indexes. Fixes Issue https://code.google.com/p/gerrit/issues/detail?id=2131 Change-Id: I378673c00de32385ba90f4b639cb812f9574a216 --- .../jgit/internal/storage/file/PackFile.java | 16 ++++++++-------- 1 file 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 b52d3f70a..5e1e2b1a3 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 { private volatile boolean invalid; + private boolean invalidBitmap; + private byte[] packChecksum; private PackIndex loadedIdx; @@ -1057,19 +1059,17 @@ public class PackFile implements Iterable { } 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; }