Merge changes I745e780e,Ib9950272
* changes:
Get all projects from ProjectCache instead of GitRepositoryManager
Create SubmoduleSectionParser using assisted injection
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java
index 06d73a8..6e4e2ed 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java
@@ -123,6 +123,7 @@
import com.google.gerrit.server.ssh.SshAddressesModule;
import com.google.gerrit.server.tools.ToolsCatalog;
import com.google.gerrit.server.util.IdGenerator;
+import com.google.gerrit.server.util.SubmoduleSectionParser;
import com.google.gerrit.server.util.ThreadLocalRequestContext;
import com.google.gerrit.server.validators.GroupCreationValidationListener;
import com.google.gerrit.server.validators.HashtagValidationListener;
@@ -294,6 +295,7 @@
factory(MergeValidators.Factory.class);
factory(ProjectConfigValidator.Factory.class);
factory(NotesBranchUtil.Factory.class);
+ factory(SubmoduleSectionParser.Factory.class);
bind(AccountManager.class);
bind(ChangeUserName.CurrentUser.class);
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 e67dd2c..f05a1d4 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
@@ -93,6 +93,7 @@
private final Set<Branch.NameKey> updatedSubscribers;
private final Account account;
private final ChangeHooks changeHooks;
+ private final SubmoduleSectionParser.Factory subSecParserFactory;
@Inject
public SubmoduleOp(@Assisted Branch.NameKey destBranch,
@@ -109,7 +110,8 @@
GitRepositoryManager repoManager,
GitReferenceUpdated gitRefUpdated,
@Nullable @Assisted Account account,
- ChangeHooks changeHooks) {
+ ChangeHooks changeHooks,
+ SubmoduleSectionParser.Factory subSecParserFactory) {
this.destBranch = destBranch;
this.mergeTip = mergeTip;
this.rw = rw;
@@ -124,6 +126,7 @@
this.gitRefUpdated = gitRefUpdated;
this.account = account;
this.changeHooks = changeHooks;
+ this.subSecParserFactory = subSecParserFactory;
updatedSubscribers = new HashSet<>();
}
@@ -168,8 +171,8 @@
final Set<SubmoduleSubscription> oldSubscriptions =
new HashSet<>(schema.submoduleSubscriptions()
.bySuperProject(destBranch).toList());
- final List<SubmoduleSubscription> newSubscriptions =
- new SubmoduleSectionParser(bbc, thisServer, target, repoManager)
+ List<SubmoduleSubscription> newSubscriptions =
+ subSecParserFactory.create(bbc, thisServer, target)
.parseAllSections();
final Set<SubmoduleSubscription> alreadySubscribeds = new HashSet<>();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/util/SubmoduleSectionParser.java b/gerrit-server/src/main/java/com/google/gerrit/server/util/SubmoduleSectionParser.java
index 8970425..45aa31b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/util/SubmoduleSectionParser.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/util/SubmoduleSectionParser.java
@@ -17,7 +17,9 @@
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.SubmoduleSubscription;
-import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.project.ProjectCache;
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
import org.eclipse.jgit.lib.BlobBasedConfig;
import org.eclipse.jgit.lib.Constants;
@@ -45,18 +47,26 @@
* </pre>
*/
public class SubmoduleSectionParser {
+
+ public interface Factory {
+ SubmoduleSectionParser create(BlobBasedConfig bbc, String thisServer,
+ Branch.NameKey superProjectBranch);
+ }
+
+ private final ProjectCache projectCache;
private final BlobBasedConfig bbc;
private final String thisServer;
private final Branch.NameKey superProjectBranch;
- private final GitRepositoryManager repoManager;
- public SubmoduleSectionParser(final BlobBasedConfig bbc,
- final String thisServer, final Branch.NameKey superProjectBranch,
- final GitRepositoryManager repoManager) {
+ @Inject
+ public SubmoduleSectionParser(ProjectCache projectCache,
+ @Assisted BlobBasedConfig bbc,
+ @Assisted String thisServer,
+ @Assisted Branch.NameKey superProjectBranch) {
+ this.projectCache = projectCache;
this.bbc = bbc;
this.thisServer = thisServer;
this.superProjectBranch = superProjectBranch;
- this.repoManager = repoManager;
}
public List<SubmoduleSubscription> parseAllSections() {
@@ -106,12 +116,10 @@
projectName = projectName.substring(0, //
projectName.length() - Constants.DOT_GIT_EXT.length());
}
-
- if (repoManager.list().contains(new Project.NameKey(projectName))) {
- return new SubmoduleSubscription(
- superProjectBranch,
- new Branch.NameKey(new Project.NameKey(projectName), branch),
- path);
+ Project.NameKey projectKey = new Project.NameKey(projectName);
+ if (projectCache.get(projectKey) != null) {
+ return new SubmoduleSubscription(superProjectBranch,
+ new Branch.NameKey(projectKey, branch), path);
}
}
}
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/util/SubmoduleSectionParserTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/util/SubmoduleSectionParserTest.java
index d87888f..2b8f522 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/util/SubmoduleSectionParserTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/util/SubmoduleSectionParserTest.java
@@ -14,6 +14,7 @@
package com.google.gerrit.server.util;
+import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.createStrictMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
@@ -23,7 +24,8 @@
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.SubmoduleSubscription;
-import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.project.ProjectState;
import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
import org.eclipse.jgit.lib.BlobBasedConfig;
@@ -33,16 +35,14 @@
import java.net.URI;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
-import java.util.TreeSet;
public class SubmoduleSectionParserTest extends LocalDiskRepositoryTestCase {
private static final String THIS_SERVER = "localhost";
- private GitRepositoryManager repoManager;
+ private ProjectCache projectCache;
private BlobBasedConfig bbc;
@Override
@@ -50,16 +50,16 @@
public void setUp() throws Exception {
super.setUp();
- repoManager = createStrictMock(GitRepositoryManager.class);
+ projectCache = createStrictMock(ProjectCache.class);
bbc = createStrictMock(BlobBasedConfig.class);
}
private void doReplay() {
- replay(repoManager, bbc);
+ replay(projectCache, bbc);
}
private void doVerify() {
- verify(repoManager, bbc);
+ verify(projectCache, bbc);
}
@Test
@@ -214,13 +214,12 @@
projectNameCandidate.length() - Constants.DOT_GIT_EXT.length());
}
if (projectNameCandidate.equals(reposToBeFound.get(id))) {
- expect(repoManager.list()).andReturn(
- new TreeSet<>(Collections.singletonList(
- new Project.NameKey(projectNameCandidate))));
+ expect(projectCache.get(new Project.NameKey(projectNameCandidate)))
+ .andReturn(createNiceMock(ProjectState.class));
break;
} else {
- expect(repoManager.list()).andReturn(
- new TreeSet<>(Collections.<Project.NameKey> emptyList()));
+ expect(projectCache.get(new Project.NameKey(projectNameCandidate)))
+ .andReturn(null);
}
}
}
@@ -229,8 +228,8 @@
doReplay();
final SubmoduleSectionParser ssp =
- new SubmoduleSectionParser(bbc, THIS_SERVER, superProjectBranch,
- repoManager);
+ new SubmoduleSectionParser(projectCache, bbc, THIS_SERVER,
+ superProjectBranch);
List<SubmoduleSubscription> returnedSubscriptions = ssp.parseAllSections();