Add a release() method to SubmoduleWalk

We need a way to release the underlying TreeWalk. Also, use this
method to release walks from the static factory methods on error or
when submodules are not found.

Change-Id: I6bedc2db78bcd577aef2cfe6715bb981a26dcfd7
This commit is contained in:
Dave Borowitz 2012-06-14 15:06:09 -07:00
parent 2656ac1b5a
commit 458f64c6ea
1 changed files with 29 additions and 12 deletions

View File

@ -102,12 +102,18 @@ public static SubmoduleWalk forIndex(Repository repository)
public static SubmoduleWalk forPath(Repository repository,
AnyObjectId treeId, String path) throws IOException {
SubmoduleWalk generator = new SubmoduleWalk(repository);
generator.setTree(treeId);
PathFilter filter = PathFilter.create(path);
generator.setFilter(filter);
while (generator.next())
if (filter.isDone(generator.walk))
return generator;
try {
generator.setTree(treeId);
PathFilter filter = PathFilter.create(path);
generator.setFilter(filter);
while (generator.next())
if (filter.isDone(generator.walk))
return generator;
} catch (IOException e) {
generator.release();
throw e;
}
generator.release();
return null;
}
@ -124,12 +130,18 @@ public static SubmoduleWalk forPath(Repository repository,
public static SubmoduleWalk forPath(Repository repository,
AbstractTreeIterator iterator, String path) throws IOException {
SubmoduleWalk generator = new SubmoduleWalk(repository);
generator.setTree(iterator);
PathFilter filter = PathFilter.create(path);
generator.setFilter(filter);
while (generator.next())
if (filter.isDone(generator.walk))
return generator;
try {
generator.setTree(iterator);
PathFilter filter = PathFilter.create(path);
generator.setFilter(filter);
while (generator.next())
if (filter.isDone(generator.walk))
return generator;
} catch (IOException e) {
generator.release();
throw e;
}
generator.release();
return null;
}
@ -511,4 +523,9 @@ public String getRemoteUrl() throws IOException, ConfigInvalidException {
String url = getModulesUrl();
return url != null ? getSubmoduleRemoteUrl(repository, url) : null;
}
/** Release any resources used by this walker's reader. */
public void release() {
walk.release();
}
}