Merge "Accept --base option for GET /changes/<id>/edit:message endpoint"
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user