Merge "Accept --base option for GET /changes/<id>/edit:message endpoint"

This commit is contained in:
David Pursehouse
2016-05-31 23:54:58 +00:00
committed by Gerrit Code Review
3 changed files with 47 additions and 9 deletions

View File

@@ -2023,6 +2023,9 @@ returned.
Retrieves commit message from change edit.
If the `base` parameter is set to true, the returned message is from the
revision that the edit is based on.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/edit:message HTTP/1.0

View File

@@ -64,6 +64,9 @@ import org.apache.commons.codec.binary.StringUtils;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -362,13 +365,13 @@ public class ChangeEditIT extends AbstractDaemonTest {
@Test
public void updateMessageRest() throws Exception {
adminRestSession.get(urlEditMessage()).assertNotFound();
adminRestSession.get(urlEditMessage(false)).assertNotFound();
EditMessage.Input in = new EditMessage.Input();
in.message = String.format("New commit message\n\n" +
CONTENT_NEW2_STR + "\n\nChange-Id: %s\n",
change.getKey());
adminRestSession.put(urlEditMessage(), in).assertNoContent();
RestResponse r = adminRestSession.getJsonAccept(urlEditMessage());
adminRestSession.put(urlEditMessage(false), in).assertNoContent();
RestResponse r = adminRestSession.getJsonAccept(urlEditMessage(false));
r.assertOK();
assertThat(readContentFromJson(r)).isEqualTo(in.message);
Optional<ChangeEdit> edit = editUtil.byChange(change);
@@ -376,10 +379,19 @@ public class ChangeEditIT extends AbstractDaemonTest {
.isEqualTo(in.message);
in.message = String.format("New commit message2\n\nChange-Id: %s\n",
change.getKey());
adminRestSession.put(urlEditMessage(), in).assertNoContent();
adminRestSession.put(urlEditMessage(false), in).assertNoContent();
edit = editUtil.byChange(change);
assertThat(edit.get().getEditCommit().getFullMessage())
.isEqualTo(in.message);
r = adminRestSession.getJsonAccept(urlEditMessage(true));
try (Repository repo = repoManager.openRepository(project);
RevWalk rw = new RevWalk(repo)) {
RevCommit commit = rw.parseCommit(
ObjectId.fromString(ps.getRevision().get()));
assertThat(readContentFromJson(r)).isEqualTo(commit.getFullMessage());
}
editUtil.publish(edit.get());
assertChangeMessages(change,
ImmutableList.of("Uploaded patch set 1.",
@@ -809,10 +821,11 @@ public class ChangeEditIT extends AbstractDaemonTest {
+ "/edit/";
}
private String urlEditMessage() {
private String urlEditMessage(boolean base) {
return "/changes/"
+ change.getChangeId()
+ "/edit:message";
+ "/edit:message"
+ (base ? "?base" : "");
}
private String urlEditFile() {

View File

@@ -48,6 +48,7 @@ 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.git.GitRepositoryManager;
import com.google.gerrit.server.patch.PatchListNotAvailableException;
import com.google.gerrit.server.project.InvalidChangeOperationException;
import com.google.gwtorm.server.OrmException;
@@ -57,6 +58,9 @@ import com.google.inject.Singleton;
import com.google.inject.assistedinject.Assisted;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
import org.kohsuke.args4j.Option;
import java.io.IOException;
@@ -553,12 +557,19 @@ public class ChangeEdits implements
}
}
@Singleton
public static class GetMessage implements RestReadView<ChangeResource> {
private final GitRepositoryManager repoManager;
private final ChangeEditUtil editUtil;
@Option(name = "--base", aliases = {"-b"},
usage = "whether to load the message on the base revision instead"
+ " of the change edit")
private boolean base;
@Inject
GetMessage(ChangeEditUtil editUtil) {
GetMessage(GitRepositoryManager repoManager,
ChangeEditUtil editUtil) {
this.repoManager = repoManager;
this.editUtil = editUtil;
}
@@ -566,8 +577,19 @@ public class ChangeEdits implements
public BinaryResult apply(ChangeResource rsrc) throws AuthException,
IOException, ResourceNotFoundException, OrmException {
Optional<ChangeEdit> edit = editUtil.byChange(rsrc.getChange());
String msg;
if (edit.isPresent()) {
String msg = edit.get().getEditCommit().getFullMessage();
if (base) {
try (Repository repo = repoManager.openRepository(rsrc.getProject());
RevWalk rw = new RevWalk(repo)) {
RevCommit commit = rw.parseCommit(ObjectId.fromString(
edit.get().getBasePatchSet().getRevision().get()));
msg = commit.getFullMessage();
}
} else {
msg = edit.get().getEditCommit().getFullMessage();
}
return BinaryResult.create(msg)
.setContentType(FileContentUtil.TEXT_X_GERRIT_COMMIT_MESSAGE)
.base64();