]> source.dussan.org Git - jgit.git/commitdiff
Stop PathFilter after walking all matching paths 88/9388/1
authorDave Borowitz <dborowitz@google.com>
Thu, 27 Dec 2012 17:29:44 +0000 (09:29 -0800)
committerDave Borowitz <dborowitz@google.com>
Thu, 27 Dec 2012 20:24:50 +0000 (12:24 -0800)
After the current path of the TreeWalk is no longer a prefix of the
PathFilter's path, there can be no more matching entries, but TreeWalk
will happily keep walking the rest of a (potentially very large and
recursive) tree unless StopWalkException is thrown. So, throw
StopWalkException from PathFilter.include() at the earliest
opportunity.

Change-Id: If6c4f395a3d5ed5b71bf68de23be9f2b0620e7f1

org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathFilter.java

index d85ea8cc5dee83a85e570527a73bd910677cd83c..365a820981d673e1555b527cf0d59ed7e79cafd7 100644 (file)
@@ -44,6 +44,7 @@
 
 package org.eclipse.jgit.treewalk.filter;
 
+import org.eclipse.jgit.errors.StopWalkException;
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.treewalk.TreeWalk;
@@ -97,7 +98,10 @@ public class PathFilter extends TreeFilter {
 
        @Override
        public boolean include(final TreeWalk walker) {
-               return walker.isPathPrefix(pathRaw, pathRaw.length) == 0;
+               int cmp = walker.isPathPrefix(pathRaw, pathRaw.length);
+               if (cmp > 0)
+                       throw StopWalkException.INSTANCE;
+               return cmp == 0;
        }
 
        @Override