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>
tags/v4.7.0.201704051617-r
Zhen Chen 7 years ago
parent
commit
87d81a7301

+ 6
- 4
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java View File

@@ -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);

Loading…
Cancel
Save