diff options
author | Shawn Pearce <spearce@spearce.org> | 2011-02-18 00:21:59 -0500 |
---|---|---|
committer | Code Review <codereview-daemon@eclipse.org> | 2011-02-18 00:21:59 -0500 |
commit | 681739b1c82877424192ace581014ad09bc28acf (patch) | |
tree | e04ec6db296e1995cafffacac092485a4ce3c451 /org.eclipse.jgit | |
parent | bd8944d671a01eb2c97443bb80a6eea6ae300330 (diff) | |
parent | c5863e4d3b885da3ef8f60e2a71be92b8e133894 (diff) | |
download | jgit-681739b1c82877424192ace581014ad09bc28acf.tar.gz jgit-681739b1c82877424192ace581014ad09bc28acf.zip |
Merge "Changed TreeWalk.forPath(...) to work with recursive paths."
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java | 30 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathFilter.java | 10 |
2 files changed, 32 insertions, 8 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java index 93ca33e4c9..75961fc3b3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java @@ -45,7 +45,6 @@ package org.eclipse.jgit.treewalk; import java.io.IOException; -import java.util.Collections; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.IncorrectObjectTypeException; @@ -59,7 +58,7 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevTree; -import org.eclipse.jgit.treewalk.filter.PathFilterGroup; +import org.eclipse.jgit.treewalk.filter.PathFilter; import org.eclipse.jgit.treewalk.filter.TreeFilter; import org.eclipse.jgit.util.RawParseUtils; @@ -114,12 +113,20 @@ public class TreeWalk { public static TreeWalk forPath(final ObjectReader reader, final String path, final AnyObjectId... trees) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { - final TreeWalk r = new TreeWalk(reader); - r.setFilter(PathFilterGroup.createFromStrings(Collections - .singleton(path))); - r.setRecursive(r.getFilter().shouldBeRecursive()); - r.reset(trees); - return r.next() ? r : null; + TreeWalk tw = new TreeWalk(reader); + PathFilter f = PathFilter.create(path); + tw.setFilter(f); + tw.reset(trees); + tw.setRecursive(false); + + while (tw.next()) { + if (f.isDone(tw)) { + return tw; + } else if (tw.isSubtree()) { + tw.enterSubtree(); + } + } + return null; } /** @@ -749,6 +756,13 @@ public class TreeWalk { } /** + * @return The path length of the current entry. + */ + public int getPathLength() { + return currentHead.pathLen; + } + + /** * Test if the supplied path matches the current entry's path. * <p> * This method tests that the supplied path is exactly equal to the current 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 3f83114fd5..c2a0d5db93 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 @@ -116,4 +116,14 @@ public class PathFilter extends TreeFilter { public String toString() { return "PATH(\"" + pathStr + "\")"; } + + /** + * @param walker + * The walk to check against. + * @return {@code true} if the path length of this filter matches the length + * of the current path of the supplied TreeWalk. + */ + public boolean isDone(final TreeWalk walker) { + return pathRaw.length == walker.getPathLength(); + } } |