RevWalk already has an idBuffer field available, which is used by the commit and tree parsers to hold an id they need to probe for in the hash table. We should be using that buffer during tree entry iteration as it avoids object allocation. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- .../src/org/spearce/jgit/revwalk/ObjectWalk.java | 20 ++++++++++++-------- 1 files changed, 12 insertions(+), 8 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/ObjectWalk.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/ObjectWalk.java index 69a20aa..454cb4a 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/ObjectWalk.java +++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/ObjectWalk.java @@ -251,7 +251,8 @@ public RevObject nextObject() throws MissingObjectException, switch (sType) { case Constants.OBJ_BLOB: { - final RevObject o = lookupAny(treeWalk.getObjectId(0), sType); + treeWalk.getObjectId(idBuffer, 0); + final RevObject o = lookupAny(idBuffer, sType); if ((o.flags & SEEN) != 0) continue; o.flags |= SEEN; @@ -262,7 +263,8 @@ public RevObject nextObject() throws MissingObjectException, return o; } case Constants.OBJ_TREE: { - final RevObject o = lookupAny(treeWalk.getObjectId(0), sType); + treeWalk.getObjectId(idBuffer, 0); + final RevObject o = lookupAny(idBuffer, sType); if ((o.flags & SEEN) != 0) continue; o.flags |= SEEN; @@ -276,8 +278,9 @@ public RevObject nextObject() throws MissingObjectException, default: if (FileMode.GITLINK.equals(mode)) continue; + treeWalk.getObjectId(idBuffer, 0); throw new CorruptObjectException("Invalid mode " + mode - + " for " + treeWalk.getObjectId(0).name() + " " + + " for " + idBuffer.name() + " " + treeWalk.getPathString() + " in " + currentTree + "."); } } @@ -390,13 +393,13 @@ private void markTreeUninteresting(final RevTree tree) switch (sType) { case Constants.OBJ_BLOB: { - final ObjectId sid = treeWalk.getObjectId(0); - lookupAny(sid, sType).flags |= UNINTERESTING; + treeWalk.getObjectId(idBuffer, 0); + lookupAny(idBuffer, sType).flags |= UNINTERESTING; continue; } case Constants.OBJ_TREE: { - final ObjectId sid = treeWalk.getObjectId(0); - final RevObject subtree = lookupAny(sid, sType); + treeWalk.getObjectId(idBuffer, 0); + final RevObject subtree = lookupAny(idBuffer, sType); if ((subtree.flags & UNINTERESTING) == 0) { subtree.flags |= UNINTERESTING; treeWalk.enterSubtree(); @@ -406,8 +409,9 @@ private void markTreeUninteresting(final RevTree tree) default: if (FileMode.GITLINK.equals(mode)) continue; + treeWalk.getObjectId(idBuffer, 0); throw new CorruptObjectException("Invalid mode " + mode - + " for " + treeWalk.getObjectId(0).name() + " " + + " for " + idBuffer.name() + " " + treeWalk.getPathString() + " in " + tree + "."); } } -- 1.6.1.rc4.301.g5497a -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html