diff options
author | David Ostrovsky <david.ostrovsky@gmail.com> | 2021-02-02 10:21:37 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-02-02 10:21:37 +0000 |
commit | 55ae3070d3ec9f1788dd6565f669b1075dad976e (patch) | |
tree | dc84bfe56e23cacffb3bb457abb1191eac5c8fa1 | |
parent | e3f8b34761600facc90b3127d5a0f7155a7ff9de (diff) | |
parent | 2e2292866fd3f0ff57e8af769e3f9c2d4a95e765 (diff) |
Merge "Merge branch 'stable-2.15' into stable-2.16" into stable-2.16
3 files changed, 38 insertions, 2 deletions
diff --git a/java/com/google/gerrit/server/edit/ChangeEditModifier.java b/java/com/google/gerrit/server/edit/ChangeEditModifier.java index ce359a9b14..60ad488d65 100644 --- a/java/com/google/gerrit/server/edit/ChangeEditModifier.java +++ b/java/com/google/gerrit/server/edit/ChangeEditModifier.java @@ -20,10 +20,13 @@ import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.MergeConflictException; import com.google.gerrit.extensions.restapi.RawInput; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.reviewdb.client.BooleanProjectConfig; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; +import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.reviewdb.server.ReviewDb; +import com.google.gerrit.server.ChangeUtil; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.GerritPersonIdent; import com.google.gerrit.server.IdentifiedUser; @@ -209,7 +212,8 @@ public class ChangeEditModifier { * @throws PermissionBackendException * @throws BadRequestException if the commit message is malformed */ - public void modifyMessage(Repository repository, ChangeNotes notes, String newCommitMessage) + public void modifyMessage( + Repository repository, Project.NameKey project, ChangeNotes notes, String newCommitMessage) throws AuthException, IOException, UnchangedCommitMessageException, OrmException, PermissionBackendException, BadRequestException, ResourceConflictException { assertCanEdit(notes); @@ -231,6 +235,11 @@ public class ChangeEditModifier { ObjectId newEditCommit = createCommit(repository, basePatchSetCommit, baseTree, newCommitMessage, nowTimestamp); + ChangeUtil.ensureChangeIdIsCorrect( + projectCache.checkedGet(project).is(BooleanProjectConfig.REQUIRE_CHANGE_ID), + notes.getChange().getKey().get(), + newCommitMessage); + if (optionalChangeEdit.isPresent()) { updateEdit(repository, optionalChangeEdit.get(), newEditCommit, nowTimestamp); } else { diff --git a/java/com/google/gerrit/server/restapi/change/ChangeEdits.java b/java/com/google/gerrit/server/restapi/change/ChangeEdits.java index b666fe460c..e219f90b23 100644 --- a/java/com/google/gerrit/server/restapi/change/ChangeEdits.java +++ b/java/com/google/gerrit/server/restapi/change/ChangeEdits.java @@ -458,7 +458,7 @@ public class ChangeEdits implements ChildCollection<ChangeResource, ChangeEditRe Project.NameKey project = rsrc.getProject(); try (Repository repository = repositoryManager.openRepository(project)) { - editModifier.modifyMessage(repository, rsrc.getNotes(), input.message); + editModifier.modifyMessage(repository, project, rsrc.getNotes(), input.message); } catch (UnchangedCommitMessageException e) { throw new ResourceConflictException(e.getMessage()); } diff --git a/javatests/com/google/gerrit/acceptance/edit/ChangeEditIT.java b/javatests/com/google/gerrit/acceptance/edit/ChangeEditIT.java index 12df63acc1..8a63acef00 100644 --- a/javatests/com/google/gerrit/acceptance/edit/ChangeEditIT.java +++ b/javatests/com/google/gerrit/acceptance/edit/ChangeEditIT.java @@ -352,6 +352,33 @@ public class ChangeEditIT extends AbstractDaemonTest { } @Test + public void updateMessageEditChangeIdShouldThrowResourceConflictException() throws Exception { + createEmptyEditFor(changeId); + String commitMessage = gApi.changes().id(changeId).edit().getCommitMessage(); + + exception.expect(ResourceConflictException.class); + exception.expectMessage("wrong Change-Id footer"); + gApi.changes() + .id(changeId) + .edit() + .modifyCommitMessage(commitMessage.replaceAll(changeId, changeId2)); + } + + @Test + public void updateMessageEditRemoveChangeIdShouldThrowResourceConflictException() + throws Exception { + createEmptyEditFor(changeId); + String commitMessage = gApi.changes().id(changeId).edit().getCommitMessage(); + + exception.expect(ResourceConflictException.class); + exception.expectMessage("missing Change-Id footer"); + gApi.changes() + .id(changeId) + .edit() + .modifyCommitMessage(commitMessage.replaceAll("(Change-Id:).*", "")); + } + + @Test public void updateMessageNoChange() throws Exception { createEmptyEditFor(changeId); String commitMessage = gApi.changes().id(changeId).edit().getCommitMessage(); |