From 248f97256823854072649b0d30e8efbd70d88424 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 21 Aug 2008 13:57:37 -0700 Subject: [PATCH] Micro-optimize TreeWalk's exitSubtree implementation Rather than recomputing the min over again we can take the hint that the prior min (the one that describes the tree we just left) must be one that matches itself. There may be more than one such case, as a min could be found and match itself and later another min is found. So we fall back into a pathCompare if we identify more than one. Signed-off-by: Shawn O. Pearce Signed-off-by: Robin Rosenberg --- org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java index ac26d3c1..e4d6f312 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java +++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java @@ -722,11 +722,19 @@ public class TreeWalk { } } - private void exitSubtree() throws CorruptObjectException { + private void exitSubtree() { depth--; for (int i = 0; i < trees.length; i++) trees[i] = trees[i].parent; - currentHead = min(); + + AbstractTreeIterator minRef = null; + for (final AbstractTreeIterator t : trees) { + if (t.matches != t) + continue; + if (minRef == null || t.pathCompare(minRef) < 0) + minRef = t; + } + currentHead = minRef; } private CanonicalTreeParser parserFor(final ObjectId id) -- 2.11.4.GIT