summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/rest-api-projects.txt111
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/project/GetConfig.java70
2 files changed, 126 insertions, 55 deletions
diff --git a/Documentation/rest-api-projects.txt b/Documentation/rest-api-projects.txt
index f207d430b0..35caac4114 100644
--- a/Documentation/rest-api-projects.txt
+++ b/Documentation/rest-api-projects.txt
@@ -436,10 +436,26 @@ read access to `refs/meta/config`.
)]}'
{
"kind": "gerritcodereview#project_config",
- "use_contributor_agreements": false,
- "use_content_merge": true,
- "use_signed_off_by": false,
- "require_change_id": true,
+ "use_contributor_agreements": {
+ "value": true,
+ "configured_value": "TRUE",
+ "inherited_value": false
+ },
+ "use_content_merge": {
+ "value": true,
+ "configured_value": "INHERIT",
+ "inherited_value": true
+ },
+ "use_signed_off_by": {
+ "value": false,
+ "configured_value": "INHERIT",
+ "inherited_value": false
+ },
+ "require_change_id": {
+ "value": false,
+ "configured_value": "FALSE",
+ "inherited_value": true
+ }
"commentlinks": {}
}
----
@@ -729,6 +745,43 @@ The name of the project.
JSON Entities
-------------
+[[config-info]]
+ConfigInfo
+~~~~~~~~~~
+The `ConfigInfo` entity contains information about the effective project
+configuration.
+
+Fields marked with * are only visible to users who have read access to
+`refs/meta/config`.
+
+[options="header",width="50%",cols="1,6"]
+|======================================
+|Field Name |Description
+|`use_contributor_agreements*`|
+link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
+authors must complete a contributor agreement on the site before
+pushing any commits or changes to this project.
+|`use_content_merge*`|
+link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
+Gerrit will try to perform a 3-way merge of text file content when a
+file has been modified by both the destination branch and the change
+being submitted. This option only takes effect if submit type is not
+FAST_FORWARD_ONLY.
+|`use_signed_off_by*`|
+link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
+each change must contain a Signed-off-by line from either the author or
+the uploader in the commit message.
+|`require_change_id*`|
+link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether a
+valid link:user-changeid.html[Change-Id] footer in any commit uploaded
+for review is required. This does not apply to commits pushed directly
+to a branch or tag.
+|`commentlinks`|
+Comment link configuration for the project. Has the same format as the
+link:config-gerrit.html#_a_id_commentlink_a_section_commentlink[commentlink section]
+of `gerrit.config`.
+|======================================
+
[[dashboard-info]]
DashboardInfo
~~~~~~~~~~~~~
@@ -811,6 +864,23 @@ The ref to which `HEAD` should be set, the `refs/heads` prefix can be
omitted.
|============================
+[[inherited-boolean-info]]
+InheritedBooleanInfo
+~~~~~~~~~~~~~~~~~~~~
+A boolean value that can also be inherited.
+
+[options="header",width="50%",cols="1,^2,4"]
+|================================
+|Field Name ||Description
+|`value` ||
+The effective boolean value.
+|`configured_value` ||
+The configured value, can be `TRUE`, `FALSE` or `INHERITED`.
+|`inherited_value` |optional|
+The boolean value inherited from the parent. +
+Not set if there is no parent.
+|================================
+
[[project-description-input]]
ProjectDescriptionInput
~~~~~~~~~~~~~~~~~~~~~~~
@@ -932,39 +1002,6 @@ statistics of a Git repository.
|`size_of_packed_objects` |Size of packed objects in bytes.
|======================================
-[[config-info]]
-ConfigInfo
-~~~~~~~~~~
-The `ConfigInfo` entity contains information about the effective project
-configuration.
-
-Fields marked with * are only visible to users who have read access to
-`refs/meta/config`.
-
-[options="header",width="50%",cols="1,6"]
-|======================================
-|Field Name |Description
-|`use_contributor_agreements*`|
-If set, authors must complete a contributor agreement on the site
-before pushing any commits or changes to this project.
-|`use_content_merge*`|
-If set, Gerrit will try to perform a 3-way merge of text file content
-when a file has been modified by both the destination branch and the
-change being submitted. This option only takes effect if submit type is
-not FAST_FORWARD_ONLY.
-|`use_signed_off_by*`|
-If set, each change must contain a Signed-off-by line from either the
-author or the uploader in the commit message.
-|`require_change_id*`|
-If set, require a valid link:user-changeid.html[Change-Id] footer in any
-commit uploaded for review. This does not apply to commits pushed
-directly to a branch or tag.
-|`commentlinks`|
-Comment link configuration for the project. Has the same format as the
-link:config-gerrit.html#_a_id_commentlink_a_section_commentlink[commentlink section]
-of `gerrit.config`.
-|======================================
-
GERRIT
------
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/GetConfig.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/GetConfig.java
index 3ae78b931f..cd5e5d7ebe 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/GetConfig.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/GetConfig.java
@@ -14,47 +14,81 @@
package com.google.gerrit.server.project;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.gerrit.extensions.restapi.RestReadView;
+import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.reviewdb.client.Project.InheritableBoolean;
import com.google.gerrit.server.git.GitRepositoryManager;
import java.util.Map;
public class GetConfig implements RestReadView<ProjectResource> {
- public static class ConfigInfo {
- public final String kind = "gerritcodereview#project_config";
-
- public Boolean useContributorAgreements;
- public Boolean useContentMerge;
- public Boolean useSignedOffBy;
- public Boolean requireChangeId;
-
- public Map<String, CommentLinkInfo> commentlinks;
- public ThemeInfo theme;
- }
@Override
public ConfigInfo apply(ProjectResource resource) {
ConfigInfo result = new ConfigInfo();
RefControl refConfig = resource.getControl()
.controlForRef(GitRepositoryManager.REF_CONFIG);
- ProjectState project = resource.getControl().getProjectState();
+ ProjectState state = resource.getControl().getProjectState();
if (refConfig.isVisible()) {
- result.useContributorAgreements = project.isUseContributorAgreements();
- result.useContentMerge = project.isUseContentMerge();
- result.useSignedOffBy = project.isUseSignedOffBy();
- result.requireChangeId = project.isRequireChangeID();
+ InheritedBooleanInfo useContributorAgreements = new InheritedBooleanInfo();
+ InheritedBooleanInfo useSignedOffBy = new InheritedBooleanInfo();
+ InheritedBooleanInfo useContentMerge = new InheritedBooleanInfo();
+ InheritedBooleanInfo requireChangeId = new InheritedBooleanInfo();
+
+ useContributorAgreements.value = state.isUseContributorAgreements();
+ useSignedOffBy.value = state.isUseSignedOffBy();
+ useContentMerge.value = state.isUseContentMerge();
+ requireChangeId.value = state.isRequireChangeID();
+
+ Project p = state.getProject();
+ useContributorAgreements.configuredValue = p.getUseContributorAgreements();
+ useSignedOffBy.configuredValue = p.getUseSignedOffBy();
+ useContentMerge.configuredValue = p.getUseContentMerge();
+ requireChangeId.configuredValue = p.getRequireChangeID();
+
+ ProjectState parentState = Iterables.getFirst(state.parents(), null);
+ if (parentState != null) {
+ useContributorAgreements.inheritedValue = parentState.isUseContributorAgreements();
+ useSignedOffBy.inheritedValue = parentState.isUseSignedOffBy();
+ useContentMerge.inheritedValue = parentState.isUseContentMerge();
+ requireChangeId.inheritedValue = parentState.isRequireChangeID();
+ }
+
+ result.useContributorAgreements = useContributorAgreements;
+ result.useSignedOffBy = useSignedOffBy;
+ result.useContentMerge = useContentMerge;
+ result.requireChangeId = requireChangeId;
}
// commentlinks are visible to anyone, as they are used for linkification
// on the client side.
result.commentlinks = Maps.newLinkedHashMap();
- for (CommentLinkInfo cl : project.getCommentLinks()) {
+ for (CommentLinkInfo cl : state.getCommentLinks()) {
result.commentlinks.put(cl.name, cl);
}
// Themes are visible to anyone, as they are rendered client-side.
- result.theme = project.getTheme();
+ result.theme = state.getTheme();
return result;
}
+
+ public static class ConfigInfo {
+ public final String kind = "gerritcodereview#project_config";
+
+ public InheritedBooleanInfo useContributorAgreements;
+ public InheritedBooleanInfo useContentMerge;
+ public InheritedBooleanInfo useSignedOffBy;
+ public InheritedBooleanInfo requireChangeId;
+
+ public Map<String, CommentLinkInfo> commentlinks;
+ public ThemeInfo theme;
+ }
+
+ public static class InheritedBooleanInfo {
+ public Boolean value;
+ public InheritableBoolean configuredValue;
+ public Boolean inheritedValue;
+ }
}