Use auto-closable RevWalk, TreeWalk and Repository Change-Id: Iaa1f28626b010cd17d05cf464b1350b9df7909f3
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java index 5b05218..c4036d0 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
@@ -109,38 +109,30 @@ @Override public Resource load(String strKey) throws Exception { XDocResourceKey key = XDocResourceKey.fromString(strKey); - try { + try (Repository repo = repoManager.openRepository(key.getProject())) { FormatterProvider formatter = getFormatter(key.getFormatter()); - Repository repo = repoManager.openRepository(key.getProject()); - try { - RevWalk rw = new RevWalk(repo); - try { - String html = null; - if (key.getRevId() != null) { - html = loadHtml(formatter, repo, rw, key, key.getRevId()); - } - - if (key.getDiffMode() != DiffMode.NO_DIFF) { - String htmlB = - loadHtml(formatter, repo, rw, key, checkRevId(key.getRevIdB())); - if (html == null && htmlB == null) { - throw new ResourceNotFoundException(); - } - html = diffHtml(html, htmlB, key.getDiffMode()); - } else { - if (html == null) { - throw new ResourceNotFoundException(); - } - } - - RevCommit commit = rw.parseCommit( - MoreObjects.firstNonNull(key.getRevIdB(), key.getRevId())); - return getAsHtmlResource(html, commit.getCommitTime()); - } finally { - rw.release(); + try (RevWalk rw = new RevWalk(repo)) { + String html = null; + if (key.getRevId() != null) { + html = loadHtml(formatter, repo, rw, key, key.getRevId()); } - } finally { - repo.close(); + + if (key.getDiffMode() != DiffMode.NO_DIFF) { + String htmlB = + loadHtml(formatter, repo, rw, key, checkRevId(key.getRevIdB())); + if (html == null && htmlB == null) { + throw new ResourceNotFoundException(); + } + html = diffHtml(html, htmlB, key.getDiffMode()); + } else { + if (html == null) { + throw new ResourceNotFoundException(); + } + } + + RevCommit commit = rw.parseCommit( + MoreObjects.firstNonNull(key.getRevIdB(), key.getRevId())); + return getAsHtmlResource(html, commit.getCommitTime()); } } catch (ResourceNotFoundException e) { return Resource.NOT_FOUND; @@ -171,8 +163,7 @@ ResourceNotFoundException, MethodNotAllowedException, GitAPIException { RevCommit commit = rw.parseCommit(revId); RevTree tree = commit.getTree(); - TreeWalk tw = new TreeWalk(repo); - try { + try (TreeWalk tw = new TreeWalk(repo)) { tw.addTree(tree); tw.setRecursive(true); tw.setFilter(PathFilter.create(key.getResource())); @@ -183,8 +174,6 @@ ObjectLoader loader = repo.open(objectId); return getHtml(formatter, repo, loader, key.getProject(), key.getResource(), revId); - } finally { - tw.release(); } } @@ -314,11 +303,8 @@ private static String getAbbrRevId(Repository repo, ObjectId revId) throws IOException { - ObjectReader reader = repo.newObjectReader(); - try { + try (ObjectReader reader = repo.newObjectReader()) { return reader.abbreviate(revId).name(); - } finally { - reader.release(); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java index 3863da9..f62389b 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java
@@ -198,12 +198,10 @@ ObjectId id = diffMode == DiffMode.NO_DIFF || diffMode == DiffMode.SIDEBYSIDE_A ? revId : revIdB; - RevWalk rw = new RevWalk(repo); - try { + try (RevWalk rw = new RevWalk(repo)) { RevCommit commit = rw.parseCommit(id); RevTree tree = commit.getTree(); - TreeWalk tw = new TreeWalk(repo); - try { + try (TreeWalk tw = new TreeWalk(repo)) { tw.addTree(tree); tw.setRecursive(true); tw.setFilter(PathFilter.create(file)); @@ -222,13 +220,9 @@ .setContentType(mimeType.toString()) .setCharacterEncoding(UTF_8.name()) .setLastModified(commit.getCommitTime()); - } finally { - tw.release(); } } catch (IOException e) { return Resource.NOT_FOUND; - } finally { - rw.release(); } } @@ -329,14 +323,11 @@ private void validateCanReadCommit(Repository repo, ProjectControl projectControl, ObjectId revId) throws ResourceNotFoundException, IOException { - RevWalk rw = new RevWalk(repo); - try { + try (RevWalk rw = new RevWalk(repo)) { RevCommit commit = rw.parseCommit(revId); if (!projectControl.canReadCommit(db.get(), rw, commit)) { throw new ResourceNotFoundException(); } - } finally { - rw.release(); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java index 514a51b..4e2993b 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
@@ -304,38 +304,27 @@ * @return the file content, <code>null</code> if the file doesn't exist */ public String getMetaConfigFile(String projectName, String fileName) { - try { - Repository repo = - repoManager.openRepository(new Project.NameKey(projectName)); - try { - RevWalk rw = new RevWalk(repo); - try { - ObjectId id = repo.resolve(RefNames.REFS_CONFIG); - if (id == null) { + try (Repository repo = repoManager.openRepository( + new Project.NameKey(projectName))) { + try (RevWalk rw = new RevWalk(repo)) { + ObjectId id = repo.resolve(RefNames.REFS_CONFIG); + if (id == null) { + return null; + } + RevCommit commit = rw.parseCommit(id); + RevTree tree = commit.getTree(); + try (TreeWalk tw = new TreeWalk(repo)) { + tw.addTree(tree); + tw.setRecursive(true); + tw.setFilter(PathFilter.create(pluginName + "/" + fileName)); + if (!tw.next()) { return null; } - RevCommit commit = rw.parseCommit(id); - RevTree tree = commit.getTree(); - TreeWalk tw = new TreeWalk(repo); - try { - tw.addTree(tree); - tw.setRecursive(true); - tw.setFilter(PathFilter.create(pluginName + "/" + fileName)); - if (!tw.next()) { - return null; - } - ObjectId objectId = tw.getObjectId(0); - ObjectLoader loader = repo.open(objectId); - byte[] raw = loader.getBytes(Integer.MAX_VALUE); - return new String(raw, UTF_8); - } finally { - tw.release(); - } - } finally { - rw.release(); + ObjectId objectId = tw.getObjectId(0); + ObjectLoader loader = repo.open(objectId); + byte[] raw = loader.getBytes(Integer.MAX_VALUE); + return new String(raw, UTF_8); } - } finally { - repo.close(); } } catch (IOException e) { return null;