The ObjectWalker in PackWriterBitmapWalker needs to be reset whenever it starts a new walk. Move this responsibility from the caller to the method when the new walk starts. Change-Id: Ib66003be1b5bdc80f46b9bbbb17d45e616714912 Signed-off-by: Zhen Chen <czhen@google.com>tags/v4.8.0.201705170830-rc1
throws MissingObjectException, IncorrectObjectTypeException, | throws MissingObjectException, IncorrectObjectTypeException, | ||||
IOException { | IOException { | ||||
BitmapBuilder haveBitmap = bitmapWalker.findObjects(have, null, true); | BitmapBuilder haveBitmap = bitmapWalker.findObjects(have, null, true); | ||||
bitmapWalker.reset(); | |||||
BitmapBuilder wantBitmap = bitmapWalker.findObjects(want, haveBitmap, | BitmapBuilder wantBitmap = bitmapWalker.findObjects(want, haveBitmap, | ||||
false); | false); | ||||
BitmapBuilder needBitmap = wantBitmap.andNot(haveBitmap); | BitmapBuilder needBitmap = wantBitmap.andNot(haveBitmap); | ||||
PackWriterBitmapWalker walker = bitmapPreparer.newBitmapWalker(); | PackWriterBitmapWalker walker = bitmapPreparer.newBitmapWalker(); | ||||
AnyObjectId last = null; | AnyObjectId last = null; | ||||
for (PackWriterBitmapPreparer.BitmapCommit cmit : selectedCommits) { | for (PackWriterBitmapPreparer.BitmapCommit cmit : selectedCommits) { | ||||
if (cmit.isReuseWalker()) | |||||
walker.reset(); | |||||
else | |||||
if (!cmit.isReuseWalker()) { | |||||
walker = bitmapPreparer.newBitmapWalker(); | walker = bitmapPreparer.newBitmapWalker(); | ||||
} | |||||
BitmapBuilder bitmap = walker.findObjects( | BitmapBuilder bitmap = walker.findObjects( | ||||
Collections.singleton(cmit), null, false); | Collections.singleton(cmit), null, false); | ||||
return countOfBitmapIndexMisses; | return countOfBitmapIndexMisses; | ||||
} | } | ||||
BitmapBuilder findObjects(Iterable<? extends ObjectId> start, BitmapBuilder seen, boolean ignoreMissing) | |||||
BitmapBuilder findObjects(Iterable<? extends ObjectId> start, BitmapBuilder seen, | |||||
boolean ignoreMissing) | |||||
throws MissingObjectException, IncorrectObjectTypeException, | throws MissingObjectException, IncorrectObjectTypeException, | ||||
IOException { | IOException { | ||||
if (!ignoreMissing) { | if (!ignoreMissing) { | ||||
return result; | return result; | ||||
} | } | ||||
private BitmapBuilder findObjectsWalk(Iterable<? extends ObjectId> start, BitmapBuilder seen, boolean ignoreMissingStart) | |||||
private BitmapBuilder findObjectsWalk(Iterable<? extends ObjectId> start, BitmapBuilder seen, | |||||
boolean ignoreMissingStart) | |||||
throws MissingObjectException, IncorrectObjectTypeException, | throws MissingObjectException, IncorrectObjectTypeException, | ||||
IOException { | IOException { | ||||
walker.reset(); | |||||
final BitmapBuilder bitmapResult = bitmapIndex.newBitmapBuilder(); | final BitmapBuilder bitmapResult = bitmapIndex.newBitmapBuilder(); | ||||
for (ObjectId obj : start) { | for (ObjectId obj : start) { | ||||
return bitmapResult; | return bitmapResult; | ||||
} | } | ||||
void reset() { | |||||
walker.reset(); | |||||
} | |||||
/** | /** | ||||
* A RevFilter that adds the visited commits to {@code bitmap} as a side | * A RevFilter that adds the visited commits to {@code bitmap} as a side | ||||
* effect. | * effect. |