Browse Source

Make forPath(ObjectReader) variant in TreeWalk

This simplifies the logic for those who already have an ObjectReader
on hand want to reuse it to lookup a single path.

Change-Id: Ief17d6b2a0674ddb34bbc9f43121b756eae960fb
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
stable-0.9
Shawn O. Pearce 15 years ago
parent
commit
80fe789690
  1. 48
      org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java

48
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java

@ -56,8 +56,8 @@ import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.MutableObjectId;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
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.TreeFilter;
@ -84,6 +84,42 @@ import org.eclipse.jgit.util.RawParseUtils;
* permitted, even from concurrent threads.
*/
public class TreeWalk {
/**
* Open a tree walk and filter to exactly one path.
* <p>
* The returned tree walk is already positioned on the requested path, so
* the caller should not need to invoke {@link #next()} unless they are
* looking for a possible directory/file name conflict.
*
* @param reader
* the reader the walker will obtain tree data from.
* @param path
* single path to advance the tree walk instance into.
* @param trees
* one or more trees to walk through, all with the same root.
* @return a new tree walk configured for exactly this one path; null if no
* path was found in any of the trees.
* @throws IOException
* reading a pack file or loose object failed.
* @throws CorruptObjectException
* an tree object could not be read as its data stream did not
* appear to be a tree, or could not be inflated.
* @throws IncorrectObjectTypeException
* an object we expected to be a tree was not a tree.
* @throws MissingObjectException
* a tree object was not found.
*/
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;
}
/**
* Open a tree walk and filter to exactly one path.
* <p>
@ -112,15 +148,11 @@ public class TreeWalk {
public static TreeWalk forPath(final Repository db, final String path,
final AnyObjectId... trees) throws MissingObjectException,
IncorrectObjectTypeException, CorruptObjectException, IOException {
final TreeWalk r = new TreeWalk(db);
ObjectReader reader = db.newObjectReader();
try {
r.setFilter(PathFilterGroup.createFromStrings(Collections
.singleton(path)));
r.setRecursive(r.getFilter().shouldBeRecursive());
r.reset(trees);
return r.next() ? r : null;
return forPath(reader, path, trees);
} finally {
r.release();
reader.release();
}
}

Loading…
Cancel
Save