From ab09cc7fc1dae65c606e8ca8524b53ca3f4b2c34 Mon Sep 17 00:00:00 2001 From: David Ostrovsky Date: Sat, 8 Nov 2014 15:38:04 +0100 Subject: [PATCH] InlineEdit: Report same commit message error to client Change-Id: Iabacdf49351f0430629b7ab4de53a2c1e7b9f9c8 --- .../gerrit/acceptance/edit/ChangeEditIT.java | 5 ++-- .../gerrit/server/change/ChangeEdits.java | 13 ++++++++++- .../server/edit/ChangeEditModifier.java | 7 +++--- .../edit/UnchangedCommitMessageException.java | 23 +++++++++++++++++++ 4 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/edit/UnchangedCommitMessageException.java 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 82165d3b0a..ad4d50f86c 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 @@ -45,6 +45,7 @@ import com.google.gerrit.server.change.FileContentUtil; import com.google.gerrit.server.edit.ChangeEdit; import com.google.gerrit.server.edit.ChangeEditModifier; import com.google.gerrit.server.edit.ChangeEditUtil; +import com.google.gerrit.server.edit.UnchangedCommitMessageException; import com.google.gerrit.server.project.InvalidChangeOperationException; import com.google.gwtorm.server.SchemaFactory; import com.google.inject.Inject; @@ -247,8 +248,8 @@ public class ChangeEditIT extends AbstractDaemonTest { modifier.modifyMessage( edit.get(), edit.get().getEditCommit().getFullMessage()); - fail("InvalidChangeOperationException expected"); - } catch (InvalidChangeOperationException ex) { + fail("UnchangedCommitMessageException expected"); + } catch (UnchangedCommitMessageException ex) { assertThat(ex.getMessage()).isEqualTo( "New commit message cannot be same as existing commit message"); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEdits.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEdits.java index 94b73a151c..66d7be4374 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEdits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEdits.java @@ -44,6 +44,7 @@ import com.google.gerrit.server.edit.ChangeEdit; import com.google.gerrit.server.edit.ChangeEditJson; import com.google.gerrit.server.edit.ChangeEditModifier; import com.google.gerrit.server.edit.ChangeEditUtil; +import com.google.gerrit.server.edit.UnchangedCommitMessageException; import com.google.gerrit.server.patch.PatchListNotAvailableException; import com.google.gerrit.server.project.InvalidChangeOperationException; import com.google.gerrit.server.project.NoSuchChangeException; @@ -372,6 +373,11 @@ public class ChangeEdits implements @Override public Response apply(ChangeEditResource rsrc, Input input) throws AuthException, ResourceConflictException, IOException { + String path = rsrc.getPath(); + if (Strings.isNullOrEmpty(path) || path.charAt(0) == '/') { + throw new ResourceConflictException("Invalid path: " + path); + } + try { editModifier.modifyFile( rsrc.getChangeEdit(), @@ -474,7 +480,12 @@ public class ChangeEdits implements throw new BadRequestException("commit message must be provided"); } - editModifier.modifyMessage(edit.get(), input.message); + try { + editModifier.modifyMessage(edit.get(), input.message); + } catch (UnchangedCommitMessageException ucm) { + throw new ResourceConflictException(ucm.getMessage()); + } + return Response.none(); } } 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 a3829f9f7a..1c3f6249cc 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 @@ -227,9 +227,11 @@ public class ChangeEditModifier { * @throws AuthException * @throws InvalidChangeOperationException * @throws IOException + * @throws UnchangedCommitMessageException */ public RefUpdate.Result modifyMessage(ChangeEdit edit, String msg) - throws AuthException, InvalidChangeOperationException, IOException { + throws AuthException, InvalidChangeOperationException, IOException, + UnchangedCommitMessageException { checkState(!Strings.isNullOrEmpty(msg), "message cannot be null"); if (!currentUser.get().isIdentifiedUser()) { throw new AuthException("Authentication required"); @@ -241,8 +243,7 @@ public class ChangeEditModifier { } if (prevEdit.getFullMessage().equals(msg)) { - throw new InvalidChangeOperationException( - "New commit message cannot be same as existing commit message"); + throw new UnchangedCommitMessageException(); } IdentifiedUser me = (IdentifiedUser) currentUser.get(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/edit/UnchangedCommitMessageException.java b/gerrit-server/src/main/java/com/google/gerrit/server/edit/UnchangedCommitMessageException.java new file mode 100644 index 0000000000..f405f8b0f3 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/edit/UnchangedCommitMessageException.java @@ -0,0 +1,23 @@ +// Copyright (C) 2014 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.edit; + +public class UnchangedCommitMessageException extends Exception { + private static final long serialVersionUID = 1L; + + public UnchangedCommitMessageException() { + super("New commit message cannot be same as existing commit message"); + } +}