Refactor MergeOpRepoManager#openRepo to return the OpenRepo

Most of the time, when the openRepo method is called, the next step is
to get the OpenRepo by calling a separate method getRepo, which is no
longer needed if the openRepo method returns the OpenRepo.

Change-Id: I7d19d34e8fa0e4687f2418678dc37915185116d9
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModules.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModules.java
index e0c72c6..a5cb18d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModules.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModules.java
@@ -64,12 +64,12 @@
     this.submissionId = orm.getSubmissionId();
     Project.NameKey project = branch.getParentKey();
     logDebug("Loading .gitmodules of {} for project {}", branch, project);
+    OpenRepo or;
     try {
-      orm.openRepo(project, false);
+      or = orm.openRepo(project, false);
     } catch (NoSuchProjectException e) {
       throw new IOException(e);
     }
-    OpenRepo or = orm.getRepo(project);
 
     ObjectId id = or.repo.resolve(branch.get());
     if (id == null) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOpRepoManager.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOpRepoManager.java
index 2bfe5b7..33e4c66 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOpRepoManager.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOpRepoManager.java
@@ -185,16 +185,17 @@
     return or;
   }
 
-  public void openRepo(Project.NameKey project, boolean abortIfOpen)
+  public OpenRepo openRepo(Project.NameKey project, boolean abortIfOpen)
       throws NoSuchProjectException, IOException {
     if (abortIfOpen) {
       checkState(!openRepos.containsKey(project),
           "repo already opened: %s", project);
-    } else {
-      if (openRepos.containsKey(project)) {
-        return;
-      }
     }
+
+    if (openRepos.containsKey(project)) {
+      return openRepos.get(project);
+    }
+
     ProjectState projectState = projectCache.get(project);
     if (projectState == null) {
       throw new NoSuchProjectException(project);
@@ -203,6 +204,7 @@
       OpenRepo or =
           new OpenRepo(repoManager.openRepository(project), projectState);
       openRepos.put(project, or);
+      return or;
     } catch (RepositoryNotFoundException e) {
       throw new NoSuchProjectException(project);
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
index f016da7..3e34a8d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
@@ -227,14 +227,15 @@
       if (r.matchSource(src.get())) {
         if (r.getDestination() == null) {
           // no need to care for wildcard, as we matched already
+          OpenRepo or;
           try {
-            orm.openRepo(s.getProject(), false);
+            or = orm.openRepo(s.getProject(), false);
           } catch (NoSuchProjectException e) {
             // A project listed a non existent project to be allowed
             // to subscribe to it. Allow this for now.
             continue;
           }
-          OpenRepo or = orm.getRepo(s.getProject());
+
           for (Ref ref : or.repo.getRefDatabase().getRefs(
               RefNames.REFS_HEADS).values()) {
             ret.add(new Branch.NameKey(s.getProject(), ref.getName()));
@@ -269,8 +270,7 @@
       for (Branch.NameKey targetBranch : branches) {
         Project.NameKey targetProject = targetBranch.getParentKey();
         try {
-          orm.openRepo(targetProject, false);
-          OpenRepo or = orm.getRepo(targetProject);
+          OpenRepo or = orm.openRepo(targetProject, false);
           ObjectId id = or.repo.resolve(targetBranch.get());
           if (id == null) {
             logDebug("The branch " + targetBranch + " doesn't exist.");
@@ -307,9 +307,9 @@
         if (dst.containsKey(project)) {
           superProjects.add(project);
           // get a new BatchUpdate for the super project
-          orm.openRepo(project, false);
+          OpenRepo or = orm.openRepo(project, false);
           for (Branch.NameKey branch : dst.get(project)) {
-            addOp(orm.getRepo(project).getUpdate(), branch);
+            addOp(or.getUpdate(), branch);
           }
         }
       }
@@ -325,12 +325,12 @@
    */
   public CodeReviewCommit composeGitlinksCommit(final Branch.NameKey subscriber)
       throws IOException, SubmoduleException {
+    OpenRepo or;
     try {
-      orm.openRepo(subscriber.getParentKey(), false);
+      or = orm.openRepo(subscriber.getParentKey(), false);
     } catch (NoSuchProjectException | IOException e) {
       throw new SubmoduleException("Cannot access superproject", e);
     }
-    OpenRepo or = orm.getRepo(subscriber.getParentKey());
 
     CodeReviewCommit currentCommit;
     Ref r = or.repo.exactRef(subscriber.get());
@@ -383,12 +383,12 @@
   public CodeReviewCommit composeGitlinksCommit(
       final Branch.NameKey subscriber, CodeReviewCommit currentCommit)
       throws IOException, SubmoduleException {
+    OpenRepo or;
     try {
-      orm.openRepo(subscriber.getParentKey(), false);
+      or = orm.openRepo(subscriber.getParentKey(), false);
     } catch (NoSuchProjectException | IOException e) {
       throw new SubmoduleException("Cannot access superproject", e);
     }
-    OpenRepo or = orm.getRepo(subscriber.getParentKey());
 
     StringBuilder msgbuf = new StringBuilder("");
     DirCache dc = readTree(or.rw, currentCommit);
@@ -423,12 +423,12 @@
   private RevCommit updateSubmodule(DirCache dc, DirCacheEditor ed,
       StringBuilder msgbuf, final SubmoduleSubscription s)
       throws SubmoduleException, IOException {
+    OpenRepo subOr;
     try {
-      orm.openRepo(s.getSubmodule().getParentKey(), false);
+      subOr = orm.openRepo(s.getSubmodule().getParentKey(), false);
     } catch (NoSuchProjectException | IOException e) {
       throw new SubmoduleException("Cannot access submodule", e);
     }
-    OpenRepo subOr = orm.getRepo(s.getSubmodule().getParentKey());
 
     DirCacheEntry dce = dc.getEntry(s.getPath());
     RevCommit oldCommit = null;