From 458f64c6ea94da114cd99243302dfaacc7194d7c Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Thu, 14 Jun 2012 15:06:09 -0700 Subject: [PATCH] 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 --- .../eclipse/jgit/submodule/SubmoduleWalk.java | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) 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 d18f1e1ea..f037a7c52 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(); + } }