From 2a5c87e83efda1a704ea03d9a70f392923c5328b Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 4 Sep 2008 16:42:14 -0700 Subject: [PATCH] Cleanup RevWalk.parseTree semantics When we call parseAny we may have opened the ObjectLoader for the tree we are going after. If that worked we know the object exists in the repository and is certainly recorded as type "tree" so we do not need to open the object a second time before returning to the caller. Signed-off-by: Shawn O. Pearce Signed-off-by: Robin Rosenberg --- .../src/org/spearce/jgit/revwalk/RevWalk.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevWalk.java b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevWalk.java index 243d9b35..e7a79a83 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevWalk.java +++ b/org.spearce.jgit/src/org/spearce/jgit/revwalk/RevWalk.java @@ -639,15 +639,21 @@ public class RevWalk implements Iterable { c = ((RevTag) c).getObject(); parse(c); } - if (c instanceof RevCommit) { - c = ((RevCommit) c).getTree(); - parse(c); - } else if (!(c instanceof RevTree)) + + final RevTree t; + if (c instanceof RevCommit) + t = ((RevCommit) c).getTree(); + else if (!(c instanceof RevTree)) throw new IncorrectObjectTypeException(id.toObjectId(), Constants.TYPE_TREE); - final RevTree t = (RevTree) c; + else + t = (RevTree) c; + + if ((t.flags & PARSED) != 0) + return t; if (db.openObject(t).getType() != Constants.OBJ_TREE) throw new IncorrectObjectTypeException(t, Constants.TYPE_TREE); + t.flags |= PARSED; return t; } @@ -685,10 +691,12 @@ public class RevWalk implements Iterable { } case Constants.OBJ_TREE: { r = new RevTree(ldr.getId()); + r.flags |= PARSED; break; } case Constants.OBJ_BLOB: { r = new RevBlob(ldr.getId()); + r.flags |= PARSED; break; } case Constants.OBJ_TAG: { -- 2.11.4.GIT