Merge "Prevent new patchset notification emails for trivial rebase"
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 e578aad..f16c677 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
@@ -21,6 +21,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_CONFLICT;
import static org.apache.http.HttpStatus.SC_NOT_FOUND;
import static org.apache.http.HttpStatus.SC_NO_CONTENT;
import static org.apache.http.HttpStatus.SC_OK;
@@ -100,6 +101,7 @@
private Change change;
private String changeId;
private Change change2;
+ private String changeId2;
private PatchSet ps;
private PatchSet ps2;
@@ -111,7 +113,7 @@
amendChange(git, admin.getIdent(), changeId);
change = getChange(changeId);
assertThat(ps).isNotNull();
- String changeId2 = newChange2(git, admin.getIdent());
+ changeId2 = newChange2(git, admin.getIdent());
change2 = getChange(changeId2);
assertThat(change2).isNotNull();
ps2 = getCurrentPatchSet(changeId2);
@@ -232,6 +234,24 @@
}
@Test
+ public void rebaseEditWithConflictsRest_Conflict() throws Exception {
+ PatchSet current = getCurrentPatchSet(changeId2);
+ assertThat(modifier.createEdit(change2, current)).isEqualTo(RefUpdate.Result.NEW);
+ assertThat(
+ modifier.modifyFile(editUtil.byChange(change2).get(), FILE_NAME,
+ RestSession.newRawInput(CONTENT_NEW))).isEqualTo(RefUpdate.Result.FORCED);
+ ChangeEdit edit = editUtil.byChange(change2).get();
+ assertThat(edit.getBasePatchSet().getPatchSetId()).isEqualTo(
+ current.getPatchSetId());
+ PushOneCommit push =
+ pushFactory.create(db, admin.getIdent(), PushOneCommit.SUBJECT, FILE_NAME,
+ new String(CONTENT_NEW2), changeId2);
+ push.to(git, "refs/for/master").assertOkStatus();
+ RestResponse r = adminSession.post(urlRebase());
+ assertThat(r.getStatusCode()).isEqualTo(SC_CONFLICT);
+ }
+
+ @Test
public void updateExistingFile() throws Exception {
assertThat(modifier.createEdit(change, ps)).isEqualTo(RefUpdate.Result.NEW);
Optional<ChangeEdit> edit = editUtil.byChange(change);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditModifier.java b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditModifier.java
index 71c54fe..87895e9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditModifier.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditModifier.java
@@ -144,11 +144,13 @@
* @param edit change edit that contains edit to rebase
* @param current patch set to rebase the edit on
* @throws AuthException
+ * @throws ResourceConflictException thrown if rebase fails due to merge conflicts
* @throws InvalidChangeOperationException
* @throws IOException
*/
public void rebaseEdit(ChangeEdit edit, PatchSet current)
- throws AuthException, InvalidChangeOperationException, IOException {
+ throws AuthException, ResourceConflictException,
+ InvalidChangeOperationException, IOException {
if (!currentUser.get().isIdentifiedUser()) {
throw new AuthException("Authentication required");
}
@@ -202,7 +204,7 @@
}
} else {
// TODO(davido): Allow to resolve conflicts inline
- throw new InvalidChangeOperationException("merge conflict");
+ throw new ResourceConflictException("merge conflict");
}
} finally {
rw.release();