Browse Source

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 <czhen@google.com>
stable-4.7
Zhen Chen 8 years ago
parent
commit
87d81a7301
  1. 10
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java

10
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 @Override
public boolean has(AnyObjectId objectId) throws IOException { 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; return true;
PackList packList = db.getPackList(); PackList packList = db.getPackList();
if (hasImpl(packList, objectId)) { if (hasImpl(packList, objectId)) {
@ -218,7 +220,7 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs {
throws MissingObjectException, IncorrectObjectTypeException, throws MissingObjectException, IncorrectObjectTypeException,
IOException { IOException {
ObjectLoader ldr; ObjectLoader ldr;
if (last != null) { if (last != null && !skipGarbagePack(last)) {
ldr = last.get(this, objectId); ldr = last.get(this, objectId);
if (ldr != null) { if (ldr != null) {
return checkType(ldr, objectId, typeHint); return checkType(ldr, objectId, typeHint);
@ -486,7 +488,7 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs {
public long getObjectSize(AnyObjectId objectId, int typeHint) public long getObjectSize(AnyObjectId objectId, int typeHint)
throws MissingObjectException, IncorrectObjectTypeException, throws MissingObjectException, IncorrectObjectTypeException,
IOException { IOException {
if (last != null) { if (last != null && !skipGarbagePack(last)) {
long sz = last.getObjectSize(this, objectId); long sz = last.getObjectSize(this, objectId);
if (0 <= sz) { if (0 <= sz) {
return sz; return sz;
@ -515,7 +517,7 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs {
private long getObjectSizeImpl(PackList packList, AnyObjectId objectId) private long getObjectSizeImpl(PackList packList, AnyObjectId objectId)
throws IOException { throws IOException {
for (DfsPackFile pack : packList.packs) { for (DfsPackFile pack : packList.packs) {
if (pack == last) { if (pack == last || skipGarbagePack(pack)) {
continue; continue;
} }
long sz = pack.getObjectSize(this, objectId); long sz = pack.getObjectSize(this, objectId);

Loading…
Cancel
Save