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
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/submodule/SubmoduleWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/submodule/SubmoduleWalk.java
index d18f1e1..f037a7c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/submodule/SubmoduleWalk.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/submodule/SubmoduleWalk.java
@@ -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();
+ }
}