ObjectWalk: Fix reset for non-commit objects
Non-commits are added to a pending queue, but duplicates are removed by checking a flag. During a reset that flag must be stripped off the old roots, otherwise the caller cannot reuse the old roots after the reset. RevWalk already does this correctly for commits, but ObjectWalk failed to handle the non-commit case itself. Change-Id: I99e1832bf204eac5a424fdb04f327792e8cded4a Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
9ffcf2a8b3
commit
c2ab3421a2
|
@ -45,6 +45,8 @@
|
|||
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.jgit.JGitText;
|
||||
import org.eclipse.jgit.errors.CorruptObjectException;
|
||||
|
@ -85,6 +87,8 @@ public class ObjectWalk extends RevWalk {
|
|||
|
||||
private CanonicalTreeParser treeWalk;
|
||||
|
||||
private List<RevObject> rootObjects;
|
||||
|
||||
private BlockObjQueue pendingObjects;
|
||||
|
||||
private RevTree currentTree;
|
||||
|
@ -115,6 +119,7 @@ public ObjectWalk(final Repository repo) {
|
|||
*/
|
||||
public ObjectWalk(ObjectReader or) {
|
||||
super(or);
|
||||
rootObjects = new ArrayList<RevObject>();
|
||||
pendingObjects = new BlockObjQueue();
|
||||
treeWalk = new CanonicalTreeParser();
|
||||
}
|
||||
|
@ -425,6 +430,11 @@ public void dispose() {
|
|||
@Override
|
||||
protected void reset(final int retainFlags) {
|
||||
super.reset(retainFlags);
|
||||
|
||||
for (RevObject obj : rootObjects)
|
||||
obj.flags &= ~IN_PENDING;
|
||||
|
||||
rootObjects = new ArrayList<RevObject>();
|
||||
pendingObjects = new BlockObjQueue();
|
||||
treeWalk = new CanonicalTreeParser();
|
||||
currentTree = null;
|
||||
|
@ -436,6 +446,7 @@ protected void reset(final int retainFlags) {
|
|||
private void addObject(final RevObject o) {
|
||||
if ((o.flags & IN_PENDING) == 0) {
|
||||
o.flags |= IN_PENDING;
|
||||
rootObjects.add(o);
|
||||
pendingObjects.add(o);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue