Merge branch 'stable-2.8'
* stable-2.8: PatchListCacheImpl: explicitly check for null revision ChangeField: skip PatchSets with null revisions Rename methods in PluginConfigFactory to be more explicit Explain limitation of storing plugin config in existing config files Change-Id: Id34a619c8979e2d3048244a9fb3d2c03482ca952
This commit is contained in:
@@ -473,6 +473,17 @@ In Gerrit, global configuration is stored in the `gerrit.config` file.
|
||||
If a plugin needs global configuration, this configuration should be
|
||||
stored in a `plugin` subsection in the `gerrit.config` file.
|
||||
|
||||
This approach of storing the plugin configuration is only suitable for
|
||||
plugins that have a simple configuration that only consists of
|
||||
key-value pairs. With this approach it is not possible to have
|
||||
subsections in the plugin configuration. Plugins that require a complex
|
||||
configuration need to store their configuration in their own
|
||||
configuration file where they can make use of subsections. On the other
|
||||
hand storing the plugin configuration in a 'plugin' subsection in the
|
||||
`gerrit.config` file has the advantage that administrators have all
|
||||
configuration parameters in one file, instead of having one
|
||||
configuration file per plugin.
|
||||
|
||||
To avoid conflicts with other plugins, it is recommended that plugins
|
||||
only use the `plugin` subsection with their own name. For example the
|
||||
`helloworld` plugin should store its configuration in the
|
||||
@@ -494,7 +505,7 @@ private com.google.gerrit.server.config.PluginConfigFactory cfg;
|
||||
|
||||
[...]
|
||||
|
||||
String language = cfg.get("helloworld")
|
||||
String language = cfg.getFromGerritConfig("helloworld")
|
||||
.getString("language", "English");
|
||||
----
|
||||
|
||||
@@ -508,6 +519,17 @@ needs configuration on project level (e.g. to enable its functionality
|
||||
only for certain projects), this configuration should be stored in a
|
||||
`plugin` subsection in the project's `project.config` file.
|
||||
|
||||
This approach of storing the plugin configuration is only suitable for
|
||||
plugins that have a simple configuration that only consists of
|
||||
key-value pairs. With this approach it is not possible to have
|
||||
subsections in the plugin configuration. Plugins that require a complex
|
||||
configuration need to store their configuration in their own
|
||||
configuration file where they can make use of subsections. On the other
|
||||
hand storing the plugin configuration in a 'plugin' subsection in the
|
||||
`project.config` file has the advantage that project owners have all
|
||||
configuration parameters in one file, instead of having one
|
||||
configuration file per plugin.
|
||||
|
||||
To avoid conflicts with other plugins, it is recommended that plugins
|
||||
only use the `plugin` subsection with their own name. For example the
|
||||
`helloworld` plugin should store its configuration in the
|
||||
@@ -529,7 +551,7 @@ private com.google.gerrit.server.config.PluginConfigFactory cfg;
|
||||
|
||||
[...]
|
||||
|
||||
boolean enabled = cfg.get(project, "helloworld")
|
||||
boolean enabled = cfg.getFromProjectConfig(project, "helloworld")
|
||||
.getBoolean("enabled", false);
|
||||
----
|
||||
|
||||
@@ -543,7 +565,7 @@ private com.google.gerrit.server.config.PluginConfigFactory cfg;
|
||||
|
||||
[...]
|
||||
|
||||
boolean enabled = cfg.getWithInheritance(project, "helloworld")
|
||||
boolean enabled = cfg.getFromProjectConfigWithInheritance(project, "helloworld")
|
||||
.getBoolean("enabled", false);
|
||||
----
|
||||
|
||||
|
||||
@@ -37,12 +37,49 @@ public class PluginConfigFactory {
|
||||
this.projectStateFactory = projectStateFactory;
|
||||
}
|
||||
|
||||
public PluginConfig get(String pluginName) {
|
||||
/**
|
||||
* Returns the configuration for the specified plugin that is stored in the
|
||||
* 'gerrit.config' file.
|
||||
*
|
||||
* The returned plugin configuration provides access to all parameters of the
|
||||
* 'gerrit.config' file that are set in the 'plugin' subsection of the
|
||||
* specified plugin.
|
||||
*
|
||||
* E.g.:
|
||||
* [plugin "my-plugin"]
|
||||
* myKey = myValue
|
||||
*
|
||||
* @param pluginName the name of the plugin for which the configuration should
|
||||
* be returned
|
||||
* @return the plugin configuration from the 'gerrit.config' file
|
||||
*/
|
||||
public PluginConfig getFromGerritConfig(String pluginName) {
|
||||
return new PluginConfig(pluginName, cfg);
|
||||
}
|
||||
|
||||
public PluginConfig get(Project.NameKey projectName, String pluginName)
|
||||
throws NoSuchProjectException {
|
||||
/**
|
||||
* Returns the configuration for the specified plugin that is stored in the
|
||||
* 'project.config' file of the specified project.
|
||||
*
|
||||
* The returned plugin configuration provides access to all parameters of the
|
||||
* 'project.config' file that are set in the 'plugin' subsection of the
|
||||
* specified plugin.
|
||||
*
|
||||
* E.g.:
|
||||
* [plugin "my-plugin"]
|
||||
* myKey = myValue
|
||||
*
|
||||
* @param projectName the name of the project for which the plugin
|
||||
* configuration should be returned
|
||||
* @param pluginName the name of the plugin for which the configuration should
|
||||
* be returned
|
||||
* @return the plugin configuration from the 'project.config' file of the
|
||||
* specified project
|
||||
* @throws NoSuchProjectException thrown if the specified project does not
|
||||
* exist
|
||||
*/
|
||||
public PluginConfig getFromProjectConfig(Project.NameKey projectName,
|
||||
String pluginName) throws NoSuchProjectException {
|
||||
ProjectState projectState = projectCache.get(projectName);
|
||||
if (projectState == null) {
|
||||
throw new NoSuchProjectException(projectName);
|
||||
@@ -50,8 +87,45 @@ public class PluginConfigFactory {
|
||||
return projectState.getConfig().getPluginConfig(pluginName);
|
||||
}
|
||||
|
||||
public PluginConfig getWithInheritance(Project.NameKey projectName,
|
||||
String pluginName) throws NoSuchProjectException {
|
||||
return get(projectName, pluginName).withInheritance(projectStateFactory);
|
||||
/**
|
||||
* Returns the configuration for the specified plugin that is stored in the
|
||||
* 'project.config' file of the specified project. Parameters which are not
|
||||
* set in the 'project.config' of this project are inherited from the parent
|
||||
* project's 'project.config' files.
|
||||
*
|
||||
* The returned plugin configuration provides access to all parameters of the
|
||||
* 'project.config' file that are set in the 'plugin' subsection of the
|
||||
* specified plugin.
|
||||
*
|
||||
* E.g.:
|
||||
* child project:
|
||||
* [plugin "my-plugin"]
|
||||
* myKey = childValue
|
||||
*
|
||||
* parent project:
|
||||
* [plugin "my-plugin"]
|
||||
* myKey = parentValue
|
||||
* anotherKey = someValue
|
||||
*
|
||||
* return:
|
||||
* [plugin "my-plugin"]
|
||||
* myKey = childValue
|
||||
* anotherKey = someValue
|
||||
*
|
||||
* @param projectName the name of the project for which the plugin
|
||||
* configuration should be returned
|
||||
* @param pluginName the name of the plugin for which the configuration should
|
||||
* be returned
|
||||
* @return the plugin configuration from the 'project.config' file of the
|
||||
* specified project with inherited non-set parameters from the
|
||||
* parent projects
|
||||
* @throws NoSuchProjectException thrown if the specified project does not
|
||||
* exist
|
||||
*/
|
||||
public PluginConfig getFromProjectConfigWithInheritance(
|
||||
Project.NameKey projectName, String pluginName)
|
||||
throws NoSuchProjectException {
|
||||
return getFromProjectConfig(projectName, pluginName).withInheritance(
|
||||
projectStateFactory);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user