Wrap Repository and associated resources with try-with-resource

The lack of use of try-with-resource pattern caused the leak
of Repository and associated wrapper objects left open.
After the introduction of the Repository objects leak detector
in Gerrit master with I3037064 the tests were failing because
of the leaks left behind.

Wrap all the Repository objects created directly or indirectly
through one of its container objects and make sure that all tests
are executed without leaks.

Change-Id: Ia20fb505b3d8c9db04b8b50e16a9a3d41bba5d96
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
index 91f018f..0c1c40b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
@@ -41,26 +41,28 @@
   }
 
   public void lock(Project.NameKey key) throws IOException, ConfigInvalidException {
-    MetaDataUpdate md = metaDataUpdateFactory.create(key);
+    try (MetaDataUpdate md = metaDataUpdateFactory.create(key)) {
 
-    ProjectConfig projectConfig = projectConfigFactory.read(md);
-    projectConfig.updateProject(project -> project.setState(ProjectState.READ_ONLY));
+      ProjectConfig projectConfig = projectConfigFactory.read(md);
+      projectConfig.updateProject(project -> project.setState(ProjectState.READ_ONLY));
 
-    md.setMessage(String.format("Lock project while renaming the project %s\n", key.get()));
-    projectConfig.commit(md);
-    Project p = projectConfig.getProject();
-    projectCache.evict(p.getNameKey());
+      md.setMessage(String.format("Lock project while renaming the project %s\n", key.get()));
+      projectConfig.commit(md);
+      Project p = projectConfig.getProject();
+      projectCache.evict(p.getNameKey());
+    }
   }
 
   public void unlock(Project.NameKey key) throws IOException, ConfigInvalidException {
-    MetaDataUpdate md = metaDataUpdateFactory.create(key);
+    try (MetaDataUpdate md = metaDataUpdateFactory.create(key)) {
 
-    ProjectConfig projectConfig = projectConfigFactory.read(md);
-    projectConfig.updateProject(project -> project.setState(ProjectState.ACTIVE));
+      ProjectConfig projectConfig = projectConfigFactory.read(md);
+      projectConfig.updateProject(project -> project.setState(ProjectState.ACTIVE));
 
-    md.setMessage(String.format("Unlock project after renaming the project to %s\n", key.get()));
-    projectConfig.commit(md);
-    Project p = projectConfig.getProject();
-    projectCache.evict(p.getNameKey());
+      md.setMessage(String.format("Unlock project after renaming the project to %s\n", key.get()));
+      projectConfig.commit(md);
+      Project p = projectConfig.getProject();
+      projectCache.evict(p.getNameKey());
+    }
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
index d2c5b18..710030f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
@@ -43,6 +43,7 @@
 import java.util.Set;
 import java.util.stream.Stream;
 import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.lib.Repository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,13 +75,14 @@
     this.oldProjectKey = oldProjectKey;
 
     List<Change.Id> changeIds = new ArrayList<>();
-    Stream<ChangeNotesResult> changes =
-        schemaFactory.scan(repoManager.openRepository(oldProjectKey), oldProjectKey);
-    Iterator<ChangeNotesResult> iterator = changes.iterator();
-    while (iterator.hasNext()) {
-      ChangeNotesResult change = iterator.next();
-      Change.Id changeId = change.id();
-      changeIds.add(changeId);
+    try (Repository repo = repoManager.openRepository(oldProjectKey)) {
+      Stream<ChangeNotesResult> changes = schemaFactory.scan(repo, oldProjectKey);
+      Iterator<ChangeNotesResult> iterator = changes.iterator();
+      while (iterator.hasNext()) {
+        ChangeNotesResult change = iterator.next();
+        Change.Id changeId = change.id();
+        changeIds.add(changeId);
+      }
     }
     log.debug(
         "Number of changes in noteDb related to project {} are {}",
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/fs/FilesystemRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/fs/FilesystemRenameHandler.java
index a1ea2b1..aeff091 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/fs/FilesystemRenameHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/fs/FilesystemRenameHandler.java
@@ -48,11 +48,12 @@
   public void rename(
       Project.NameKey oldProjectKey, Project.NameKey newProjectKey, Optional<ProgressMonitor> opm)
       throws IOException, RepositoryNotFoundException {
-    Repository repository = repoManager.openRepository(oldProjectKey);
-    File repoFile = repository.getDirectory();
-    RepositoryCache.close(repository);
-    opm.ifPresent(pm -> pm.beginTask("Renaming git repository"));
-    renameGitRepository(repoFile, newProjectKey, oldProjectKey);
+    try (Repository repository = repoManager.openRepository(oldProjectKey)) {
+      File repoFile = repository.getDirectory();
+      RepositoryCache.close(repository);
+      opm.ifPresent(pm -> pm.beginTask("Renaming git repository"));
+      renameGitRepository(repoFile, newProjectKey, oldProjectKey);
+    }
   }
 
   private void renameGitRepository(