InlineEdit: Add REST endpoint to retrieve commit message
Change-Id: I9017df268614e8035513af173a7067a8aa10fcec
This commit is contained in:

committed by
David Pursehouse

parent
c967e151a7
commit
3d2c070206
@@ -1369,6 +1369,30 @@ specified file was deleted in the change edit "`204 No Content`" is returned.
|
||||
RnJvbSA3ZGFkY2MxNTNmZGVhMTdhYTg0ZmYzMmE2ZTI0NWRiYjY...
|
||||
----
|
||||
|
||||
[[get-edit-message]]
|
||||
=== Retrieve commit message from Change Edit or current patch set of the change
|
||||
--
|
||||
'GET /changes/link:#change-id[\{change-id\}]/edit:message
|
||||
--
|
||||
|
||||
Retrieves commit message from change edit or from current patch set when
|
||||
change edit doesn't exist.
|
||||
|
||||
.Request
|
||||
----
|
||||
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/edit:message HTTP/1.0
|
||||
----
|
||||
|
||||
The commit message is returned as base64 encoded string.
|
||||
|
||||
.Response
|
||||
----
|
||||
HTTP/1.1 200 OK
|
||||
|
||||
VGhpcyBpcyBhIGNvbW1pdCBtZXNzYWdlCgpDaGFuZ2UtSWQ6IElhYzhmZGM1MGRlZjFiYWUzYjAz
|
||||
M2JhNjcxZTk0OTBmNzUxNDU5ZGUzCg==
|
||||
----
|
||||
|
||||
[[publish-edit]]
|
||||
=== Publish Change Edit
|
||||
--
|
||||
|
@@ -450,6 +450,36 @@ public class ChangeUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public String getMessage(Change change)
|
||||
throws NoSuchChangeException, OrmException,
|
||||
MissingObjectException, IncorrectObjectTypeException, IOException {
|
||||
Change.Id changeId = change.getId();
|
||||
PatchSet ps = db.get().patchSets().get(change.currentPatchSetId());
|
||||
if (ps == null) {
|
||||
throw new NoSuchChangeException(changeId);
|
||||
}
|
||||
|
||||
Repository git;
|
||||
try {
|
||||
git = gitManager.openRepository(change.getProject());
|
||||
} catch (RepositoryNotFoundException e) {
|
||||
throw new NoSuchChangeException(changeId, e);
|
||||
}
|
||||
try {
|
||||
RevWalk revWalk = new RevWalk(git);
|
||||
try {
|
||||
RevCommit commit =
|
||||
revWalk.parseCommit(ObjectId.fromString(ps.getRevision()
|
||||
.get()));
|
||||
return commit.getFullMessage();
|
||||
} finally {
|
||||
revWalk.release();
|
||||
}
|
||||
} finally {
|
||||
git.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteDraftChange(Change change)
|
||||
throws NoSuchChangeException, OrmException, IOException {
|
||||
Change.Id changeId = change.getId();
|
||||
|
@@ -24,6 +24,7 @@ import com.google.gerrit.extensions.restapi.AcceptsDelete;
|
||||
import com.google.gerrit.extensions.restapi.AcceptsPost;
|
||||
import com.google.gerrit.extensions.restapi.AuthException;
|
||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||
import com.google.gerrit.extensions.restapi.BinaryResult;
|
||||
import com.google.gerrit.extensions.restapi.ChildCollection;
|
||||
import com.google.gerrit.extensions.restapi.DefaultInput;
|
||||
import com.google.gerrit.extensions.restapi.IdString;
|
||||
@@ -38,12 +39,14 @@ import com.google.gerrit.extensions.restapi.RestView;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.ChangeUtil;
|
||||
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.patch.PatchListNotAvailableException;
|
||||
import com.google.gerrit.server.project.InvalidChangeOperationException;
|
||||
import com.google.gerrit.server.project.NoSuchChangeException;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
@@ -475,4 +478,31 @@ public class ChangeEdits implements
|
||||
return Response.none();
|
||||
}
|
||||
}
|
||||
|
||||
@Singleton
|
||||
public static class GetMessage implements RestReadView<ChangeResource> {
|
||||
private final ChangeUtil changeUtil;
|
||||
private final ChangeEditUtil editUtil;
|
||||
|
||||
@Inject
|
||||
GetMessage(ChangeUtil changeUtil,
|
||||
ChangeEditUtil editUtil) {
|
||||
this.changeUtil = changeUtil;
|
||||
this.editUtil = editUtil;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BinaryResult apply(ChangeResource rsrc) throws AuthException, IOException,
|
||||
OrmException, NoSuchChangeException {
|
||||
Optional<ChangeEdit> edit = editUtil.byChange(rsrc.getChange());
|
||||
// TODO(davido): Clean this up by returning 404 when edit doesn't exist.
|
||||
// Client should call GET /changes/{id}/revisions/current/commit in this
|
||||
// case; or, to be consistent with GET content logic, the client could
|
||||
// call directly the right endpoint.
|
||||
String m = edit.isPresent()
|
||||
? edit.get().getEditCommit().getFullMessage()
|
||||
: changeUtil.getMessage(rsrc.getChange());
|
||||
return BinaryResult.create(m).base64();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -109,6 +109,7 @@ public class Module extends RestApiModule {
|
||||
child(CHANGE_KIND, "edit:publish").to(PublishChangeEdit.class);
|
||||
child(CHANGE_KIND, "edit:rebase").to(RebaseChangeEdit.class);
|
||||
put(CHANGE_KIND, "edit:message").to(ChangeEdits.EditMessage.class);
|
||||
get(CHANGE_KIND, "edit:message").to(ChangeEdits.GetMessage.class);
|
||||
put(CHANGE_EDIT_KIND, "/").to(ChangeEdits.Put.class);
|
||||
delete(CHANGE_EDIT_KIND).to(ChangeEdits.DeleteContent.class);
|
||||
get(CHANGE_EDIT_KIND, "/").to(ChangeEdits.Get.class);
|
||||
|
Reference in New Issue
Block a user