git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[JGIT PATCH 2/7] Cleanup RevWalk.parseTree semantics

From
Shawn O. Pearce <spearce@spearce.org>
Date
Sep 4, 2008, 23:42 UTC
Message-ID
<1220571739-4219-3-git-send-email-spearce@spearce.org>
In-Reply-To
<1220571739-4219-2-git-send-email-spearce@spearce.org>

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 <spearce@spearce.org>
---
 .../src/org/spearce/jgit/revwalk/RevWalk.java      |   18 +++++++++++++-----
 1 files 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 243d9b3..5a29dcf 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 RevTree parseTree(final AnyObjectId id)
 			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 RevObject parseAny(final AnyObjectId id)
 			}
 			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: {
-- 
1.6.0.1.319.g9f32b
Previous: Shawn O. PearceNext: Shawn O. Pearce
Message 3 of 8 in “Misc. RevWalk, bundle transport improvements”
  1. 0/7 Misc. RevWalk, bundle transport improvementsShawn O. Pearce, Sep 4, 2008
  2. 1/7 Cleanup RevWalk.parseCommit, parseTree to not throw ClassCastExceptionShawn O. Pearce, Sep 4, 2008
  3. 2/7 Cleanup RevWalk.parseTree semanticsShawn O. Pearce, Sep 4, 2008
  4. 3/7 Fix potential NullPointerException in RevWalk.parseTreeShawn O. Pearce, Sep 4, 2008
  5. 4/7 Add prerequisite verification to the bundle transportShawn O. Pearce, Sep 4, 2008
  6. 5/7 Include URIish in bundle transport within any TransportExceptionsShawn O. Pearce, Sep 4, 2008
  7. 6/7 Refactor TransportBundle to not be dependent on FileInputStreamShawn O. Pearce, Sep 4, 2008
  8. 7/7 Refactor bundle transport to permit streaming from applicationShawn O. Pearce, Sep 4, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.