From 87d81a730134186f86797c40934ecdfd9e1e9074 Mon Sep 17 00:00:00 2001 From: Zhen Chen Date: Wed, 15 Feb 2017 15:35:20 -0800 Subject: [PATCH] Add missing skip garbage pack logic in DfsReader * Missing garbage pack check in getObjectSize(AnyObjectId, int) * Missing `last` pack check in has(AnyObjectId) and open(AnyObjectId, int) Change-Id: Idd1b9dd8db34c92d7da546fef1936ec9b2728718 Signed-off-by: Zhen Chen --- .../eclipse/jgit/internal/storage/dfs/DfsReader.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java index 3593c6101..3baf118d4 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java @@ -189,7 +189,9 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs { @Override public boolean has(AnyObjectId objectId) throws IOException { - if (last != null && last.hasObject(this, objectId)) + if (last != null + && !skipGarbagePack(last) + && last.hasObject(this, objectId)) return true; PackList packList = db.getPackList(); if (hasImpl(packList, objectId)) { @@ -218,7 +220,7 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs { throws MissingObjectException, IncorrectObjectTypeException, IOException { ObjectLoader ldr; - if (last != null) { + if (last != null && !skipGarbagePack(last)) { ldr = last.get(this, objectId); if (ldr != null) { return checkType(ldr, objectId, typeHint); @@ -486,7 +488,7 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs { public long getObjectSize(AnyObjectId objectId, int typeHint) throws MissingObjectException, IncorrectObjectTypeException, IOException { - if (last != null) { + if (last != null && !skipGarbagePack(last)) { long sz = last.getObjectSize(this, objectId); if (0 <= sz) { return sz; @@ -515,7 +517,7 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs { private long getObjectSizeImpl(PackList packList, AnyObjectId objectId) throws IOException { for (DfsPackFile pack : packList.packs) { - if (pack == last) { + if (pack == last || skipGarbagePack(pack)) { continue; } long sz = pack.getObjectSize(this, objectId);