diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/ObjectWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/ObjectWalk.java index fd578da33..8f0dd9beb 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/ObjectWalk.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/ObjectWalk.java @@ -385,15 +385,15 @@ public RevObject nextObject() throws MissingObjectException, obj = new RevTree(idBuffer); obj.flags = SEEN; objects.add(obj); - return enterTree(obj); + return pushTree(obj); } if (!(obj instanceof RevTree)) throw new IncorrectObjectTypeException(obj, OBJ_TREE); obj.flags = flags = obj.flags | SEEN; if ((flags & UNINTERESTING) == 0) - return enterTree(obj); + return pushTree(obj); if (boundary) - return enterTree(obj); + return pushTree(obj); continue; case TYPE_GITLINK: @@ -426,23 +426,17 @@ public RevObject nextObject() throws MissingObjectException, o.flags = flags; if ((flags & UNINTERESTING) == 0 | boundary) { if (o instanceof RevTree) { - tv = newTreeVisit(o); - tv.parent = null; - currVisit = tv; + // The previous while loop should have exhausted the stack + // of trees. + assert currVisit == null; + + pushTree(o); } return o; } } } - private RevObject enterTree(RevObject obj) throws MissingObjectException, - IncorrectObjectTypeException, IOException { - TreeVisit tv = newTreeVisit(obj); - tv.parent = currVisit; - currVisit = tv; - return obj; - } - private static int findObjectId(byte[] buf, int ptr) { // Skip over the mode and name until the NUL before the ObjectId // can be located. Skip the NUL as the function returns. @@ -768,7 +762,7 @@ private void markTreeUninteresting(RevTree tree) } } - private TreeVisit newTreeVisit(RevObject obj) throws LargeObjectException, + private RevObject pushTree(RevObject obj) throws LargeObjectException, MissingObjectException, IncorrectObjectTypeException, IOException { TreeVisit tv = freeVisit; if (tv != null) { @@ -782,7 +776,10 @@ private TreeVisit newTreeVisit(RevObject obj) throws LargeObjectException, } tv.obj = obj; tv.buf = reader.open(obj, OBJ_TREE).getCachedBytes(); - return tv; + tv.parent = currVisit; + currVisit = tv; + + return obj; } private void releaseTreeVisit(TreeVisit tv) {