summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorShawn Pearce <spearce@spearce.org>2011-02-18 00:21:59 -0500
committerCode Review <codereview-daemon@eclipse.org>2011-02-18 00:21:59 -0500
commit681739b1c82877424192ace581014ad09bc28acf (patch)
treee04ec6db296e1995cafffacac092485a4ce3c451 /org.eclipse.jgit
parentbd8944d671a01eb2c97443bb80a6eea6ae300330 (diff)
parentc5863e4d3b885da3ef8f60e2a71be92b8e133894 (diff)
downloadjgit-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.java30
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathFilter.java10
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();
+ }
}