Merge "Merge branch 'stable-2.11'"
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/AbstractDaemonTest.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/AbstractDaemonTest.java
index a4cbe72..0f9ffc7 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/AbstractDaemonTest.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/AbstractDaemonTest.java
@@ -30,6 +30,7 @@
import com.google.gerrit.extensions.api.changes.ReviewInput;
import com.google.gerrit.extensions.api.changes.RevisionApi;
import com.google.gerrit.extensions.api.projects.ProjectInput;
+import com.google.gerrit.extensions.client.InheritableBoolean;
import com.google.gerrit.extensions.client.ListChangesOption;
import com.google.gerrit.extensions.common.ActionInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
@@ -490,6 +491,15 @@
saveProjectConfig(allProjects, cfg);
}
+ protected void setUseContributorAgreements(InheritableBoolean value)
+ throws Exception {
+ MetaDataUpdate md = metaDataUpdateFactory.create(project);
+ ProjectConfig config = ProjectConfig.read(md);
+ config.getProject().setUseContributorAgreements(value);
+ config.commit(md);
+ projectCache.evict(config.getProject());
+ }
+
protected void deny(String permission, AccountGroup.UUID id, String ref)
throws Exception {
ProjectConfig cfg = projectCache.checkedGet(project).getConfig();
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
index f7f7192..967575a 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
@@ -244,6 +244,8 @@
assertThat(info.project).isEqualTo(in.project);
assertThat(info.branch).isEqualTo(in.branch);
assertThat(info.subject).isEqualTo(in.subject);
+ assertThat(Iterables.getOnlyElement(info.messages).message)
+ .isEqualTo("Uploaded patch set 1.");
}
@Test
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/ChangeEditIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/ChangeEditIT.java
index 1624da2..9fcd931 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/ChangeEditIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/ChangeEditIT.java
@@ -19,6 +19,7 @@
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.apache.http.HttpStatus.SC_FORBIDDEN;
import static org.apache.http.HttpStatus.SC_CONFLICT;
import static org.apache.http.HttpStatus.SC_NOT_FOUND;
import static org.apache.http.HttpStatus.SC_NO_CONTENT;
@@ -35,6 +36,7 @@
import com.google.gerrit.acceptance.TestProjectInput;
import com.google.gerrit.common.data.LabelType;
import com.google.gerrit.extensions.api.changes.ReviewInput;
+import com.google.gerrit.extensions.client.InheritableBoolean;
import com.google.gerrit.extensions.client.ListChangesOption;
import com.google.gerrit.extensions.common.ApprovalInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
@@ -210,6 +212,22 @@
}
@Test
+ public void publishEditRestWithoutCLA() throws Exception {
+ setUseContributorAgreements(InheritableBoolean.TRUE);
+ PatchSet oldCurrentPatchSet = getCurrentPatchSet(changeId);
+ assertThat(modifier.createEdit(change, oldCurrentPatchSet)).isEqualTo(
+ RefUpdate.Result.NEW);
+ assertThat(
+ modifier.modifyFile(editUtil.byChange(change).get(), FILE_NAME,
+ RestSession.newRawInput(CONTENT_NEW))).isEqualTo(RefUpdate.Result.FORCED);
+ RestResponse r = adminSession.post(urlPublish());
+ assertThat(r.getStatusCode()).isEqualTo(SC_FORBIDDEN);
+ setUseContributorAgreements(InheritableBoolean.FALSE);
+ r = adminSession.post(urlPublish());
+ assertThat(r.getStatusCode()).isEqualTo(SC_NO_CONTENT);
+ }
+
+ @Test
public void rebaseEdit() throws Exception {
assertThat(modifier.createEdit(change, ps)).isEqualTo(RefUpdate.Result.NEW);
assertThat(
diff --git a/gerrit-server/BUCK b/gerrit-server/BUCK
index bea53ec..c7bd8c9 100644
--- a/gerrit-server/BUCK
+++ b/gerrit-server/BUCK
@@ -211,6 +211,7 @@
'//gerrit-server/src/main/prolog:common',
'//lib:args4j',
'//lib:grappa',
+ '//lib:guava',
'//lib:gwtorm',
'//lib:truth',
'//lib/bouncycastle:bcprov',
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 3ec18f3..6c0ee3b 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
@@ -32,6 +32,7 @@
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.ChangeMessage;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RefNames;
@@ -207,6 +208,15 @@
changeInserterFactory.create(refControl.getProjectControl(),
change, c);
+ ChangeMessage msg = new ChangeMessage(new ChangeMessage.Key(change.getId(),
+ ChangeUtil.messageUUID(db.get())),
+ me.getAccountId(),
+ ins.getPatchSet().getCreatedOn(),
+ ins.getPatchSet().getId());
+ msg.setMessage(String.format("Uploaded patch set %s.",
+ ins.getPatchSet().getPatchSetId()));
+
+ ins.setMessage(msg);
validateCommit(git, refControl, c, me, ins);
updateRef(git, rw, c, change, ins.getPatchSet());
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishChangeEdit.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishChangeEdit.java
index 5db46ae..b88931e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishChangeEdit.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishChangeEdit.java
@@ -15,6 +15,7 @@
package com.google.gerrit.server.change;
import com.google.common.base.Optional;
+import com.google.gerrit.common.data.Capable;
import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.extensions.restapi.AcceptsPost;
import com.google.gerrit.extensions.restapi.AuthException;
@@ -84,6 +85,12 @@
public Response<?> apply(ChangeResource rsrc, Publish.Input in)
throws AuthException, ResourceConflictException, NoSuchChangeException,
IOException, OrmException {
+ Capable r =
+ rsrc.getControl().getProjectControl().canPushToAtLeastOneRef();
+ if (r != Capable.OK) {
+ throw new AuthException(r.getMessage());
+ }
+
Optional<ChangeEdit> edit = editUtil.byChange(rsrc.getChange());
if (!edit.isPresent()) {
throw new ResourceConflictException(String.format(
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/util/SubmoduleSectionParser.java b/gerrit-server/src/main/java/com/google/gerrit/server/util/SubmoduleSectionParser.java
index 195a3e0..ad2ab90 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/util/SubmoduleSectionParser.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/util/SubmoduleSectionParser.java
@@ -84,6 +84,7 @@
final String url = bbc.getString("submodule", id, "url");
final String path = bbc.getString("submodule", id, "path");
String branch = bbc.getString("submodule", id, "branch");
+ SubmoduleSubscription ss = null;
try {
if (url != null && url.length() > 0 && path != null && path.length() > 0
@@ -116,8 +117,10 @@
}
Project.NameKey projectKey = new Project.NameKey(projectName);
if (projectCache.get(projectKey) != null) {
- return new SubmoduleSubscription(superProjectBranch,
- new Branch.NameKey(projectKey, branch), path);
+ ss = new SubmoduleSubscription(
+ superProjectBranch,
+ new Branch.NameKey(new Project.NameKey(projectName), branch),
+ path);
}
}
}
@@ -126,6 +129,6 @@
// Error in url syntax (in fact it is uri syntax)
}
- return null;
+ return ss;
}
}
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/util/SubmoduleSectionParserTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/util/SubmoduleSectionParserTest.java
index bd672f3..3945da7 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/util/SubmoduleSectionParserTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/util/SubmoduleSectionParserTest.java
@@ -190,6 +190,28 @@
expectedSubscriptions);
}
+ @Test
+ public void testSubmodulesParseWithSubProjectFound() throws Exception {
+ Map<String, SubmoduleSection> sectionsToReturn = new TreeMap<>();
+ sectionsToReturn.put("a/b", new SubmoduleSection(
+ "ssh://localhost/a/b", "a/b", "."));
+
+ Map<String, String> reposToBeFound = new HashMap<>();
+ reposToBeFound.put("a/b", "a/b");
+ reposToBeFound.put("b", "b");
+
+ Branch.NameKey superBranchNameKey =
+ new Branch.NameKey(new Project.NameKey("super-project"),
+ "refs/heads/master");
+
+ Set<SubmoduleSubscription> expectedSubscriptions = Sets.newHashSet();
+ expectedSubscriptions
+ .add(new SubmoduleSubscription(superBranchNameKey, new Branch.NameKey(
+ new Project.NameKey("a/b"), "refs/heads/master"), "a/b"));
+ execute(superBranchNameKey, sectionsToReturn, reposToBeFound,
+ expectedSubscriptions);
+ }
+
private void execute(final Branch.NameKey superProjectBranch,
final Map<String, SubmoduleSection> sectionsToReturn,
final Map<String, String> reposToBeFound,
@@ -217,10 +239,9 @@
projectNameCandidate = projectNameCandidate.substring(0, //
projectNameCandidate.length() - Constants.DOT_GIT_EXT.length());
}
- if (projectNameCandidate.equals(reposToBeFound.get(id))) {
+ if (reposToBeFound.containsValue(projectNameCandidate)) {
expect(projectCache.get(new Project.NameKey(projectNameCandidate)))
.andReturn(createNiceMock(ProjectState.class));
- break;
} else {
expect(projectCache.get(new Project.NameKey(projectNameCandidate)))
.andReturn(null);