From 75eb6a147ffa8089e48d409f0215a16c755305e7 Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Thu, 27 Dec 2012 09:29:44 -0800 Subject: [PATCH] Stop PathFilter after walking all matching paths 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 --- .../src/org/eclipse/jgit/treewalk/filter/PathFilter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathFilter.java index d85ea8cc5d..365a820981 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathFilter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathFilter.java @@ -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 -- 2.39.5