Allow plugins to register options for both ssh and restapi commands

Change-Id: I6976dffa98cb822a207a4de4c549486591e849e8
This commit is contained in:
Zac Livingston
2016-05-20 12:38:43 -06:00
parent 054d2b8ead
commit 4f083a841d
8 changed files with 247 additions and 4 deletions

View File

@@ -14,6 +14,8 @@
package com.google.gerrit.sshd;
import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.server.DynamicOptions;
import com.google.gerrit.server.plugins.Plugin;
import com.google.gerrit.server.plugins.ReloadPluginListener;
import com.google.gerrit.server.plugins.StartPluginListener;
@@ -30,10 +32,14 @@ class SshPluginStarterCallback implements StartPluginListener, ReloadPluginListe
private static final Logger log = LoggerFactory.getLogger(SshPluginStarterCallback.class);
private final DispatchCommandProvider root;
private final DynamicMap<DynamicOptions.DynamicBean> dynamicBeans;
@Inject
SshPluginStarterCallback(@CommandName(Commands.ROOT) DispatchCommandProvider root) {
SshPluginStarterCallback(
@CommandName(Commands.ROOT) DispatchCommandProvider root,
DynamicMap<DynamicOptions.DynamicBean> dynamicBeans) {
this.root = root;
this.dynamicBeans = dynamicBeans;
}
@Override
@@ -58,10 +64,19 @@ class SshPluginStarterCallback implements StartPluginListener, ReloadPluginListe
try {
return plugin.getSshInjector().getProvider(key);
} catch (RuntimeException err) {
log.warn(
String.format("Plugin %s did not define its top-level command", plugin.getName()), err);
if (!providesDynamicOptions(plugin)) {
log.warn(
String.format(
"Plugin %s did not define its top-level command nor any DynamicOptions",
plugin.getName()),
err);
}
}
}
return null;
}
private boolean providesDynamicOptions(Plugin plugin) {
return dynamicBeans.plugins().contains(plugin.getName());
}
}