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;