From d089b4adda8dcb970c3ad675bd681b1e980a3359 Mon Sep 17 00:00:00 2001 From: Changcheng Xiao Date: Thu, 10 Aug 2017 14:05:22 +0200 Subject: [PATCH] Implement 'privateByDefault' option for project.config This change adds an inherited 'privateByDefault' option, which allows project owners to configure a project so that all new changes will be set as private by default. This change also removes the 'privateByDefault' config option from gerrit.config introduced by [1] as it's not necessary any more (enable the 'privateByDefault' in All-Project will be inherited by all other projects). [1] Ie7cdb6f714714 Change-Id: I6fea9f8d55c7a38ac293057681874e9b480341ed --- Documentation/config-gerrit.txt | 10 --- Documentation/config-project-config.txt | 18 +++++ Documentation/rest-api-projects.txt | 3 + .../rest/change/PrivateByDefaultIT.java | 77 ++++++++++++++++--- .../extensions/api/projects/ConfigInfo.java | 1 + .../extensions/api/projects/ConfigInput.java | 1 + .../gerrit/client/admin/AdminConstants.java | 2 + .../client/admin/AdminConstants.properties | 1 + .../client/admin/ProjectInfoScreen.java | 8 ++ .../gerrit/client/projects/ConfigInfo.java | 3 + .../gerrit/client/projects/ProjectApi.java | 8 ++ .../gerrit/reviewdb/client/Project.java | 10 +++ .../gerrit/server/change/CreateChange.java | 3 +- .../gerrit/server/git/ProjectConfig.java | 16 ++++ .../server/git/receive/ReceiveCommits.java | 6 +- .../server/git/receive/ReceiveConfig.java | 2 - .../gerrit/server/project/ConfigInfoImpl.java | 4 + .../gerrit/server/project/ProjectState.java | 4 + .../gerrit/server/project/PutConfig.java | 6 +- 19 files changed, 153 insertions(+), 30 deletions(-) diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt index 71474f5841..2e530c1f81 100644 --- a/Documentation/config-gerrit.txt +++ b/Documentation/config-gerrit.txt @@ -1146,16 +1146,6 @@ Zero or negative values allow robot comments of unlimited size. + The default limit is 1024kB. -[[change.privateByDefault]]change.privateByDefault:: -+ -If set to true, every change created will be private by default. -+ -Note that the newly created change will be public if the `is_private` field in -link:rest-api-changes.html#change-input[ChangeInput] is set to `false` explicitly -or the `remove-private` link:user-upload.html#private[PushOption] is used in the push. -+ -The default is false. - [[changeCleanup]] === Section changeCleanup diff --git a/Documentation/config-project-config.txt b/Documentation/config-project-config.txt index 0183534e72..22f785e25a 100644 --- a/Documentation/config-project-config.txt +++ b/Documentation/config-project-config.txt @@ -199,6 +199,24 @@ the implicit merge check. Default is `INHERIT`, which means that this property is inherited from the parent project. +[[change-section]] +=== Change section + +The change section includes configuration for project-specific change settings: + +[[change.privateByDefault]]change.privateByDefault:: ++ +Controls whether all new changes in the project are set as private by default. ++ +Note that a new change will be public if the `is_private` field in +link:rest-api-changes.html#change-input[ChangeInput] is set to `false` explicitly +when calling the link:rest-api-changes.html#create-change[CreateChange] REST API +or the `remove-private` link:user-upload.html#private[PushOption] is used during +the Git push. ++ +Default is `INHERIT`, which means that this property is inherited from +the parent project. + [[submit-section]] === Submit section diff --git a/Documentation/rest-api-projects.txt b/Documentation/rest-api-projects.txt index 3180eb4d33..54682ed534 100644 --- a/Documentation/rest-api-projects.txt +++ b/Documentation/rest-api-projects.txt @@ -2573,6 +2573,9 @@ signed push validation is required on the project. |`reject_implicit_merges`|optional| link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether implicit merges should be rejected on changes pushed to the project. +|`private_by_default` || +link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether +all new changes are set as private by default. |`max_object_size_limit` || The link:config-gerrit.html#receive.maxObjectSizeLimit[max object size limit] of this project as a link:#max-object-size-limit-info[ diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/PrivateByDefaultIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/PrivateByDefaultIT.java index b880152da7..a10062ca1e 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/PrivateByDefaultIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/PrivateByDefaultIT.java @@ -17,23 +17,39 @@ package com.google.gerrit.acceptance.rest.change; import static com.google.common.truth.Truth.assertThat; import com.google.gerrit.acceptance.AbstractDaemonTest; -import com.google.gerrit.acceptance.GerritConfig; +import com.google.gerrit.acceptance.PushOneCommit; +import com.google.gerrit.extensions.api.projects.ConfigInput; +import com.google.gerrit.extensions.client.InheritableBoolean; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.common.ChangeInput; +import com.google.gerrit.reviewdb.client.Project; +import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository; +import org.eclipse.jgit.junit.TestRepository; +import org.junit.Before; import org.junit.Test; public class PrivateByDefaultIT extends AbstractDaemonTest { + private Project.NameKey project1; + private Project.NameKey project2; + + @Before + public void setUp() throws Exception { + project1 = createProject("project-1"); + project2 = createProject("project-2", project1); + setPrivateByDefault(project1, InheritableBoolean.FALSE); + } + @Test - @GerritConfig(name = "change.privateByDefault", value = "true") public void createChangeWithPrivateByDefaultEnabled() throws Exception { - ChangeInput input = new ChangeInput(project.get(), "master", "empty change"); + setPrivateByDefault(project2, InheritableBoolean.TRUE); + ChangeInput input = new ChangeInput(project2.get(), "master", "empty change"); assertThat(gApi.changes().create(input).get().isPrivate).isEqualTo(true); } @Test - @GerritConfig(name = "change.privateByDefault", value = "true") public void createChangeBypassPrivateByDefaultEnabled() throws Exception { - ChangeInput input = new ChangeInput(project.get(), "master", "empty change"); + setPrivateByDefault(project2, InheritableBoolean.TRUE); + ChangeInput input = new ChangeInput(project2.get(), "master", "empty change"); input.isPrivate = false; assertThat(gApi.changes().create(input).get().isPrivate).isNull(); } @@ -41,25 +57,62 @@ public class PrivateByDefaultIT extends AbstractDaemonTest { @Test public void createChangeWithPrivateByDefaultDisabled() throws Exception { ChangeInfo info = - gApi.changes().create(new ChangeInput(project.get(), "master", "empty change")).get(); + gApi.changes().create(new ChangeInput(project2.get(), "master", "empty change")).get(); assertThat(info.isPrivate).isNull(); } @Test - @GerritConfig(name = "change.privateByDefault", value = "true") - public void pushWithPrivateByDefaultEnabled() throws Exception { - assertThat(createChange().getChange().change().isPrivate()).isEqualTo(true); + public void createChangeWithPrivateByDefaultInherited() throws Exception { + setPrivateByDefault(project1, InheritableBoolean.TRUE); + ChangeInfo info = + gApi.changes().create(new ChangeInput(project2.get(), "master", "empty change")).get(); + assertThat(info.isPrivate).isTrue(); + } + + @Test + public void pushWithPrivateByDefaultEnabled() throws Exception { + setPrivateByDefault(project2, InheritableBoolean.TRUE); + assertThat(createChange(project2).getChange().change().isPrivate()).isEqualTo(true); } @Test - @GerritConfig(name = "change.privateByDefault", value = "true") public void pushBypassPrivateByDefaultEnabled() throws Exception { - assertThat(createChange("refs/for/master%remove-private").getChange().change().isPrivate()) + setPrivateByDefault(project2, InheritableBoolean.TRUE); + assertThat( + createChange(project2, "refs/for/master%remove-private") + .getChange() + .change() + .isPrivate()) .isEqualTo(false); } @Test public void pushWithPrivateByDefaultDisabled() throws Exception { - assertThat(createChange().getChange().change().isPrivate()).isEqualTo(false); + assertThat(createChange(project2).getChange().change().isPrivate()).isEqualTo(false); + } + + @Test + public void pushBypassPrivateByDefaultInherited() throws Exception { + setPrivateByDefault(project1, InheritableBoolean.TRUE); + assertThat(createChange(project2).getChange().change().isPrivate()).isEqualTo(true); + } + + private void setPrivateByDefault(Project.NameKey proj, InheritableBoolean value) + throws Exception { + ConfigInput input = new ConfigInput(); + input.privateByDefault = value; + gApi.projects().name(proj.get()).config(input); + } + + private PushOneCommit.Result createChange(Project.NameKey proj) throws Exception { + return createChange(proj, "refs/for/master"); + } + + private PushOneCommit.Result createChange(Project.NameKey proj, String ref) throws Exception { + TestRepository testRepo = cloneProject(proj); + PushOneCommit push = pushFactory.create(db, admin.getIdent(), testRepo); + PushOneCommit.Result result = push.to(ref); + result.assertOkStatus(); + return result; } } diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ConfigInfo.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ConfigInfo.java index 23c1f8e1e6..443e20648c 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ConfigInfo.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ConfigInfo.java @@ -31,6 +31,7 @@ public class ConfigInfo { public InheritedBooleanInfo enableSignedPush; public InheritedBooleanInfo requireSignedPush; public InheritedBooleanInfo rejectImplicitMerges; + public InheritedBooleanInfo privateByDefault; public InheritedBooleanInfo enableReviewerByEmail; public InheritedBooleanInfo matchAuthorToCommitterDate; public MaxObjectSizeLimitInfo maxObjectSizeLimit; diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ConfigInput.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ConfigInput.java index 65e056b9c3..0c1cec4b8b 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ConfigInput.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ConfigInput.java @@ -29,6 +29,7 @@ public class ConfigInput { public InheritableBoolean enableSignedPush; public InheritableBoolean requireSignedPush; public InheritableBoolean rejectImplicitMerges; + public InheritableBoolean privateByDefault; public InheritableBoolean enableReviewerByEmail; public InheritableBoolean matchAuthorToCommitterDate; public String maxObjectSizeLimit; diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java index 8f5f415bde..2629cec26d 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java @@ -75,6 +75,8 @@ public interface AdminConstants extends Constants { String rejectImplicitMerges(); + String privateByDefault(); + String enableReviewerByEmail(); String matchAuthorToCommitterDate(); diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties index 60cadfb87c..54f5c8b895 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties @@ -29,6 +29,7 @@ enableSignedPush = Enable signed push requireSignedPush = Require signed push requireChangeID = Require Change-Id in commit message rejectImplicitMerges = Reject implicit merges when changes are pushed for review +privateByDefault = Set all new changes private by default headingMaxObjectSizeLimit = Maximum Git object size limit headingGroupOptions = Group Options isVisibleToAll = Make group visible to all registered users. diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java index 0ef8893237..432d3a96d2 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java @@ -86,6 +86,7 @@ public class ProjectInfoScreen extends ProjectScreen { private ListBox enableSignedPush; private ListBox requireSignedPush; private ListBox rejectImplicitMerges; + private ListBox privateByDefault; private ListBox enableReviewerByEmail; private ListBox matchAuthorToCommitterDate; private NpTextBox maxObjectSizeLimit; @@ -192,6 +193,7 @@ public class ProjectInfoScreen extends ProjectScreen { signedOffBy.setEnabled(isOwner); requireChangeID.setEnabled(isOwner); rejectImplicitMerges.setEnabled(isOwner); + privateByDefault.setEnabled(isOwner); maxObjectSizeLimit.setEnabled(isOwner); enableReviewerByEmail.setEnabled(isOwner); matchAuthorToCommitterDate.setEnabled(isOwner); @@ -268,6 +270,10 @@ public class ProjectInfoScreen extends ProjectScreen { saveEnabler.listenTo(rejectImplicitMerges); grid.addHtml(AdminConstants.I.rejectImplicitMerges(), rejectImplicitMerges); + privateByDefault = newInheritedBooleanBox(); + saveEnabler.listenTo(privateByDefault); + grid.addHtml(AdminConstants.I.privateByDefault(), privateByDefault); + enableReviewerByEmail = newInheritedBooleanBox(); saveEnabler.listenTo(enableReviewerByEmail); grid.addHtml(AdminConstants.I.enableReviewerByEmail(), enableReviewerByEmail); @@ -407,6 +413,7 @@ public class ProjectInfoScreen extends ProjectScreen { setBool(requireSignedPush, result.requireSignedPush()); } setBool(rejectImplicitMerges, result.rejectImplicitMerges()); + setBool(privateByDefault, result.privateByDefault()); setBool(enableReviewerByEmail, result.enableReviewerByEmail()); setBool(matchAuthorToCommitterDate, result.matchAuthorToCommitterDate()); setSubmitType(result.submitType()); @@ -679,6 +686,7 @@ public class ProjectInfoScreen extends ProjectScreen { esp, rsp, getBool(rejectImplicitMerges), + getBool(privateByDefault), getBool(enableReviewerByEmail), getBool(matchAuthorToCommitterDate), maxObjectSizeLimit.getText().trim(), diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ConfigInfo.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ConfigInfo.java index c76ec84d91..b8effdf8e7 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ConfigInfo.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ConfigInfo.java @@ -57,6 +57,9 @@ public class ConfigInfo extends JavaScriptObject { public final native InheritedBooleanInfo rejectImplicitMerges() /*-{ return this.reject_implicit_merges; }-*/ ; + public final native InheritedBooleanInfo privateByDefault() + /*-{ return this.private_by_default; }-*/ ; + public final native InheritedBooleanInfo enableReviewerByEmail() /*-{ return this.enable_reviewer_by_email; }-*/ ; diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java index 73cc995ae2..acee47836a 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java @@ -147,6 +147,7 @@ public class ProjectApi { InheritableBoolean enableSignedPush, InheritableBoolean requireSignedPush, InheritableBoolean rejectImplicitMerges, + InheritableBoolean privateByDefault, InheritableBoolean enableReviewerByEmail, InheritableBoolean matchAuthorToCommitterDate, String maxObjectSizeLimit, @@ -168,6 +169,7 @@ public class ProjectApi { in.setRequireSignedPush(requireSignedPush); } in.setRejectImplicitMerges(rejectImplicitMerges); + in.setPrivateByDefault(privateByDefault); in.setMaxObjectSizeLimit(maxObjectSizeLimit); in.setSubmitType(submitType); in.setState(state); @@ -298,6 +300,12 @@ public class ProjectApi { setRequireSignedPushRaw(v.name()); } + final void setPrivateByDefault(InheritableBoolean v) { + setPrivateByDefault(v.name()); + } + + private native void setPrivateByDefault(String v) /*-{ if(v)this.private_by_default=v; }-*/; + final void setEnableReviewerByEmail(InheritableBoolean v) { setEnableReviewerByEmailRaw(v.name()); } diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Project.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Project.java index 96d037fa99..e756ce5476 100644 --- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Project.java +++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Project.java @@ -102,6 +102,7 @@ public final class Project { protected InheritableBoolean requireSignedPush; protected InheritableBoolean rejectImplicitMerges; + protected InheritableBoolean privateByDefault; protected InheritableBoolean enableReviewerByEmail; @@ -120,6 +121,7 @@ public final class Project { createNewChangeForAllNotInTarget = InheritableBoolean.INHERIT; enableSignedPush = InheritableBoolean.INHERIT; requireSignedPush = InheritableBoolean.INHERIT; + privateByDefault = InheritableBoolean.INHERIT; enableReviewerByEmail = InheritableBoolean.INHERIT; matchAuthorToCommitterDate = InheritableBoolean.INHERIT; } @@ -164,6 +166,14 @@ public final class Project { return rejectImplicitMerges; } + public InheritableBoolean getPrivateByDefault() { + return privateByDefault; + } + + public void setPrivateByDefault(InheritableBoolean privateByDefault) { + this.privateByDefault = privateByDefault; + } + public InheritableBoolean getEnableReviewerByEmail() { return enableReviewerByEmail; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateChange.java index 2a0a4128cd..c9827f167e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateChange.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateChange.java @@ -109,7 +109,6 @@ public class CreateChange private final ChangeFinder changeFinder; private final PatchSetUtil psUtil; private final boolean allowDrafts; - private final boolean privateByDefault; private final MergeUtil.Factory mergeUtilFactory; private final SubmitType submitType; private final NotifyUtil notifyUtil; @@ -150,7 +149,6 @@ public class CreateChange this.changeFinder = changeFinder; this.psUtil = psUtil; this.allowDrafts = config.getBoolean("change", "allowDrafts", true); - this.privateByDefault = config.getBoolean("change", "privateByDefault", false); this.submitType = config.getEnum("project", null, "submitType", SubmitType.MERGE_IF_NECESSARY); this.mergeUtilFactory = mergeUtilFactory; this.notifyUtil = notifyUtil; @@ -261,6 +259,7 @@ public class CreateChange c = newCommit(oi, rw, author, mergeTip, commitMessage); } + boolean privateByDefault = rsrc.getProjectState().isPrivateByDefault(); Change.Id changeId = new Change.Id(seq.nextChangeId()); ChangeInserter ins = changeInserterFactory.create(changeId, c, refName); ins.setMessage(String.format("Uploaded patch set %s.", ins.getPatchSetId().get())); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ProjectConfig.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ProjectConfig.java index 91379fd0b3..5ee9c454eb 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ProjectConfig.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ProjectConfig.java @@ -125,6 +125,9 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError. private static final String KEY_REQUIRE_SIGNED_PUSH = "requireSignedPush"; private static final String KEY_REJECT_IMPLICIT_MERGES = "rejectImplicitMerges"; + private static final String CHANGE = "change"; + private static final String KEY_PRIVATE_BY_DEFAULT = "privateByDefault"; + private static final String SUBMIT = "submit"; private static final String KEY_ACTION = "action"; private static final String KEY_MERGE_CONTENT = "mergeContent"; @@ -535,6 +538,10 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError. p.setMaxObjectSizeLimit(rc.getString(RECEIVE, null, KEY_MAX_OBJECT_SIZE_LIMIT)); p.setRejectImplicitMerges( getEnum(rc, RECEIVE, null, KEY_REJECT_IMPLICIT_MERGES, InheritableBoolean.INHERIT)); + + p.setPrivateByDefault( + getEnum(rc, CHANGE, null, KEY_PRIVATE_BY_DEFAULT, InheritableBoolean.INHERIT)); + p.setEnableReviewerByEmail( getEnum(rc, REVIEWER, null, KEY_ENABLE_REVIEWER_BY_EMAIL, InheritableBoolean.INHERIT)); @@ -1106,6 +1113,15 @@ public class ProjectConfig extends VersionedMetaData implements ValidationError. KEY_REJECT_IMPLICIT_MERGES, p.getRejectImplicitMerges(), InheritableBoolean.INHERIT); + + set( + rc, + CHANGE, + null, + KEY_PRIVATE_BY_DEFAULT, + p.getPrivateByDefault(), + InheritableBoolean.INHERIT); + set( rc, REVIEWER, diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveCommits.java index 7f909d4a04..9504d209d7 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveCommits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveCommits.java @@ -2093,14 +2093,14 @@ class ReceiveCommits { } private void setChangeId(int id) { + boolean privateByDefault = projectCache.get(project.getNameKey()).isPrivateByDefault(); + changeId = new Change.Id(id); ins = changeInserterFactory .create(changeId, commit, refName) .setTopic(magicBranch.topic) - .setPrivate( - magicBranch.isPrivate - || (receiveConfig.privateByDefault && !magicBranch.removePrivate)) + .setPrivate(magicBranch.isPrivate || (privateByDefault && !magicBranch.removePrivate)) .setWorkInProgress(magicBranch.workInProgress) // Changes already validated in validateNewCommits. .setValidate(false); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveConfig.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveConfig.java index 39b6d8bb24..7be6dccec6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveConfig.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveConfig.java @@ -28,7 +28,6 @@ class ReceiveConfig { final boolean checkMagicRefs; final boolean checkReferencedObjectsAreReachable; final boolean allowDrafts; - final boolean privateByDefault; private final int systemMaxBatchChanges; private final AccountLimits.Factory limitsFactory; @@ -38,7 +37,6 @@ class ReceiveConfig { checkReferencedObjectsAreReachable = config.getBoolean("receive", null, "checkReferencedObjectsAreReachable", true); allowDrafts = config.getBoolean("change", null, "allowDrafts", true); - privateByDefault = config.getBoolean("change", null, "privateByDefault", false); systemMaxBatchChanges = config.getInt("receive", "maxBatchChanges", 0); this.limitsFactory = limitsFactory; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ConfigInfoImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ConfigInfoImpl.java index 87bea15a4c..34c3287ec3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ConfigInfoImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ConfigInfoImpl.java @@ -58,6 +58,7 @@ public class ConfigInfoImpl extends ConfigInfo { InheritedBooleanInfo enableSignedPush = new InheritedBooleanInfo(); InheritedBooleanInfo requireSignedPush = new InheritedBooleanInfo(); InheritedBooleanInfo rejectImplicitMerges = new InheritedBooleanInfo(); + InheritedBooleanInfo privateByDefault = new InheritedBooleanInfo(); InheritedBooleanInfo enableReviewerByEmail = new InheritedBooleanInfo(); InheritedBooleanInfo matchAuthorToCommitterDate = new InheritedBooleanInfo(); @@ -75,6 +76,7 @@ public class ConfigInfoImpl extends ConfigInfo { enableSignedPush.configuredValue = p.getEnableSignedPush(); requireSignedPush.configuredValue = p.getRequireSignedPush(); rejectImplicitMerges.configuredValue = p.getRejectImplicitMerges(); + privateByDefault.configuredValue = p.getPrivateByDefault(); enableReviewerByEmail.configuredValue = p.getEnableReviewerByEmail(); matchAuthorToCommitterDate.configuredValue = p.getMatchAuthorToCommitterDate(); @@ -88,6 +90,7 @@ public class ConfigInfoImpl extends ConfigInfo { parentState.isCreateNewChangeForAllNotInTarget(); enableSignedPush.inheritedValue = projectState.isEnableSignedPush(); requireSignedPush.inheritedValue = projectState.isRequireSignedPush(); + privateByDefault.inheritedValue = projectState.isPrivateByDefault(); rejectImplicitMerges.inheritedValue = projectState.isRejectImplicitMerges(); enableReviewerByEmail.inheritedValue = projectState.isEnableReviewerByEmail(); matchAuthorToCommitterDate.inheritedValue = projectState.isMatchAuthorToCommitterDate(); @@ -105,6 +108,7 @@ public class ConfigInfoImpl extends ConfigInfo { this.enableSignedPush = enableSignedPush; this.requireSignedPush = requireSignedPush; } + this.privateByDefault = privateByDefault; MaxObjectSizeLimitInfo maxObjectSizeLimit = new MaxObjectSizeLimitInfo(); maxObjectSizeLimit.value = diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java index 6e17b2c170..58421b0ed9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java @@ -394,6 +394,10 @@ public class ProjectState { return getInheritableBoolean(Project::getRejectImplicitMerges); } + public boolean isPrivateByDefault() { + return getInheritableBoolean(Project::getPrivateByDefault); + } + public boolean isEnableReviewerByEmail() { return getInheritableBoolean(Project::getEnableReviewerByEmail); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/PutConfig.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/PutConfig.java index aa4e4883b6..b0fa036bf6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/PutConfig.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/PutConfig.java @@ -147,6 +147,10 @@ public class PutConfig implements RestModifyView { p.setRejectImplicitMerges(input.rejectImplicitMerges); } + if (input.privateByDefault != null) { + p.setPrivateByDefault(input.privateByDefault); + } + if (input.maxObjectSizeLimit != null) { p.setMaxObjectSizeLimit(input.maxObjectSizeLimit); } @@ -258,7 +262,7 @@ public class PutConfig implements RestModifyView { value, v.getKey())); } - //$FALL-THROUGH$ + // $FALL-THROUGH$ case STRING: cfg.setString(v.getKey(), value); break;