diff --git a/gerrit-extension-api/BUCK b/gerrit-extension-api/BUCK index 152292debb..121d236ca7 100644 --- a/gerrit-extension-api/BUCK +++ b/gerrit-extension-api/BUCK @@ -27,6 +27,7 @@ java_library( name = 'lib', exported_deps = [ ':api', + '//lib:guava', '//lib/guice:guice', '//lib/guice:guice-assistedinject', '//lib/guice:guice-servlet', @@ -42,6 +43,7 @@ java_library( '//gerrit-common:annotations', ], provided_deps = [ + '//lib:guava', '//lib/guice:guice', '//lib/guice:guice-assistedinject', ], diff --git a/gerrit-extension-api/BUILD b/gerrit-extension-api/BUILD index fd082f1c0d..4a5cfe3858 100644 --- a/gerrit-extension-api/BUILD +++ b/gerrit-extension-api/BUILD @@ -23,6 +23,7 @@ java_library( name = 'lib', exports = [ ':api', + '//lib:guava', '//lib/guice:guice', '//lib/guice:guice-assistedinject', '//lib/guice:guice-servlet', @@ -37,6 +38,7 @@ java_library( srcs = glob([SRC + '**/*.java']), deps = [ '//gerrit-common:annotations', + '//lib:guava', '//lib/guice:guice', '//lib/guice:guice-assistedinject', ], diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/config/ExternalIncludedIn.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/config/ExternalIncludedIn.java index 072799fab9..d78fa6379f 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/config/ExternalIncludedIn.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/config/ExternalIncludedIn.java @@ -14,16 +14,18 @@ package com.google.gerrit.extensions.config; +import com.google.common.collect.Multimap; import com.google.gerrit.extensions.annotations.ExtensionPoint; import java.util.Collection; -import java.util.List; @ExtensionPoint public interface ExternalIncludedIn { /** - * Returns a list of systems that include the given commit. + * Returns additional entries for IncludedInInfo as multimap where the + * key is the row title and the the values are a list of systems that include + * the given commit (e.g. names of servers on which this commit is deployed). * * The tags and branches in which the commit is included are provided so that * a RevWalk can be avoided when a system runs a certain tag or branch. @@ -33,9 +35,8 @@ public interface ExternalIncludedIn { * included * @param tags the tags that include the commit * @param branches the branches that include the commit - * @return a list of systems that contain the given commit, e.g. names of - * servers on which this commit is deployed + * @return additional entries for IncludedInInfo */ - List getIncludedIn(String project, String commit, + Multimap getIncludedIn(String project, String commit, Collection tags, Collection branches); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java index 37d400cdfa..404fe750aa 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java @@ -14,8 +14,10 @@ package com.google.gerrit.server.change; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import com.google.gerrit.extensions.config.ExternalIncludedIn; -import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.RestReadView; @@ -39,7 +41,6 @@ import org.eclipse.jgit.revwalk.RevWalk; import java.io.IOException; import java.util.Collection; -import java.util.HashMap; import java.util.Map; @Singleton @@ -48,13 +49,13 @@ class IncludedIn implements RestReadView { private final Provider db; private final GitRepositoryManager repoManager; private final PatchSetUtil psUtil; - private final DynamicMap includedIn; + private final DynamicSet includedIn; @Inject IncludedIn(Provider db, GitRepositoryManager repoManager, PatchSetUtil psUtil, - DynamicMap includedIn) { + DynamicSet includedIn) { this.db = db; this.repoManager = repoManager; this.psUtil = psUtil; @@ -80,13 +81,13 @@ class IncludedIn implements RestReadView { } IncludedInResolver.Result d = IncludedInResolver.resolve(r, rw, rev); - Map> external = new HashMap<>(); - for (DynamicMap.Entry i : includedIn) { - external.put(i.getExportName(), - i.getProvider().get().getIncludedIn( - project.get(), rev.name(), d.getTags(), d.getBranches())); + Multimap external = ArrayListMultimap.create(); + for (ExternalIncludedIn ext : includedIn) { + external.putAll(ext.getIncludedIn(project.get(), rev.name(), + d.getTags(), d.getBranches())); } - return new IncludedInInfo(d, (!external.isEmpty() ? external : null)); + return new IncludedInInfo(d, + (!external.isEmpty() ? external.asMap() : null)); } } 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 3ab19bfa31..c6bc09fc3e 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 @@ -342,7 +342,7 @@ public class GerritGlobalModule extends FactoryModule { DynamicMap.mapOf(binder(), DownloadScheme.class); DynamicMap.mapOf(binder(), DownloadCommand.class); DynamicMap.mapOf(binder(), CloneCommand.class); - DynamicMap.mapOf(binder(), ExternalIncludedIn.class); + DynamicSet.setOf(binder(), ExternalIncludedIn.class); DynamicMap.mapOf(binder(), ProjectConfigEntry.class); DynamicSet.setOf(binder(), PatchSetWebLink.class); DynamicSet.setOf(binder(), FileWebLink.class); diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin index 69b8f9f413..d7d303c48f 160000 --- a/plugins/cookbook-plugin +++ b/plugins/cookbook-plugin @@ -1 +1 @@ -Subproject commit 69b8f9f413ce83a71593a4068a3b8e81f684cbad +Subproject commit d7d303c48fdd0c64d822245b9262266d13559991