Merge branch 'stable-2.11'
* stable-2.11: Add "Uploaded patch set 1" message for the UI changes Disallow publish change edit when user has not signed CLA Subscribe to proper project when nested projects exist SideBySide: Fix Render=Slow to disable on huge files Prefer JavaScript clipboard API if available Hide hasFlash inside of UserAgent.Flash.isInstalled Remove PluginSafeDialogBox, PluginSafePopupPanel Replace vanilla parboiled with grappa library Update Guice to version 4.0 Change-Id: I2cd443f9edb755cf69cdf055f26d4936a838a49e
This commit is contained in:
@@ -30,6 +30,7 @@ import com.google.gerrit.extensions.api.GerritApi;
|
||||
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 @@ public abstract class AbstractDaemonTest {
|
||||
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();
|
||||
|
@@ -244,6 +244,8 @@ public class ChangeIT extends AbstractDaemonTest {
|
||||
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
|
||||
|
@@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
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.RestSession;
|
||||
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;
|
||||
@@ -209,6 +211,22 @@ public class ChangeEditIT extends AbstractDaemonTest {
|
||||
assertThat(edit.isPresent()).isFalse();
|
||||
}
|
||||
|
||||
@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);
|
||||
|
@@ -211,6 +211,7 @@ java_test(
|
||||
'//gerrit-server/src/main/prolog:common',
|
||||
'//lib:args4j',
|
||||
'//lib:grappa',
|
||||
'//lib:guava',
|
||||
'//lib:gwtorm',
|
||||
'//lib:truth',
|
||||
'//lib/bouncycastle:bcprov',
|
||||
|
@@ -32,6 +32,7 @@ import com.google.gerrit.extensions.restapi.TopLevelResource;
|
||||
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 @@ public class CreateChange implements
|
||||
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());
|
||||
|
||||
|
@@ -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 class PublishChangeEdit implements
|
||||
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(
|
||||
|
@@ -84,6 +84,7 @@ public class SubmoduleSectionParser {
|
||||
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 @@ public class SubmoduleSectionParser {
|
||||
}
|
||||
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 @@ public class SubmoduleSectionParser {
|
||||
// Error in url syntax (in fact it is uri syntax)
|
||||
}
|
||||
|
||||
return null;
|
||||
return ss;
|
||||
}
|
||||
}
|
||||
|
@@ -190,6 +190,28 @@ public class SubmoduleSectionParserTest extends LocalDiskRepositoryTestCase {
|
||||
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 @@ public class SubmoduleSectionParserTest extends LocalDiskRepositoryTestCase {
|
||||
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);
|
||||
|
Reference in New Issue
Block a user