InlineEdit: Add GET /changes/<id>/edit/path%2fto%2ffile REST endpoint
Add REST endpoint to retrieve file content for change edit. Change-Id: I7df93398d057eba7d22e65b913ca9d68851ba0c9
This commit is contained in:
@@ -1269,6 +1269,32 @@ When change edit doesn't exist for this change yet it is created.
|
|||||||
HTTP/1.1 204 No Content
|
HTTP/1.1 204 No Content
|
||||||
----
|
----
|
||||||
|
|
||||||
|
[[get-edit-file]]
|
||||||
|
=== Retrieve file content from Change Edit
|
||||||
|
--
|
||||||
|
'GET /changes/link:#change-id[\{change-id\}]/edit/path%2fto%2ffile
|
||||||
|
--
|
||||||
|
|
||||||
|
Retrieves content of a file from a change edit.
|
||||||
|
|
||||||
|
.Request
|
||||||
|
----
|
||||||
|
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/edit/foo HTTP/1.0
|
||||||
|
----
|
||||||
|
|
||||||
|
The content of the file is returned as text encoded inside base64. When
|
||||||
|
specified file was deleted in the change edit "`204 No Content`" is returned.
|
||||||
|
|
||||||
|
.Response
|
||||||
|
----
|
||||||
|
HTTP/1.1 200 OK
|
||||||
|
Content-Disposition: attachment
|
||||||
|
Content-Type: text/plain;charset=ISO-8859-1
|
||||||
|
X-FYI-Content-Encoding: base64
|
||||||
|
|
||||||
|
RnJvbSA3ZGFkY2MxNTNmZGVhMTdhYTg0ZmYzMmE2ZTI0NWRiYjY...
|
||||||
|
----
|
||||||
|
|
||||||
[[reviewer-endpoints]]
|
[[reviewer-endpoints]]
|
||||||
== Reviewer Endpoints
|
== Reviewer Endpoints
|
||||||
|
|
||||||
|
|||||||
@@ -3,5 +3,8 @@ include_defs('//gerrit-acceptance-tests/tests.defs')
|
|||||||
acceptance_tests(
|
acceptance_tests(
|
||||||
srcs = ['ChangeEditIT.java'],
|
srcs = ['ChangeEditIT.java'],
|
||||||
labels = ['edit'],
|
labels = ['edit'],
|
||||||
deps = ['//lib/joda:joda-time'],
|
deps = [
|
||||||
|
'//lib/commons:codec',
|
||||||
|
'//lib/joda:joda-time',
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ import com.google.gerrit.reviewdb.client.Change;
|
|||||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
import com.google.gerrit.server.change.ChangeEdits.Put;
|
|
||||||
import com.google.gerrit.server.change.ChangeEdits.Post;
|
import com.google.gerrit.server.change.ChangeEdits.Post;
|
||||||
|
import com.google.gerrit.server.change.ChangeEdits.Put;
|
||||||
import com.google.gerrit.server.change.FileContentUtil;
|
import com.google.gerrit.server.change.FileContentUtil;
|
||||||
import com.google.gerrit.server.edit.ChangeEdit;
|
import com.google.gerrit.server.edit.ChangeEdit;
|
||||||
import com.google.gerrit.server.edit.ChangeEditModifier;
|
import com.google.gerrit.server.edit.ChangeEditModifier;
|
||||||
@@ -50,6 +50,8 @@ import com.google.gwtorm.server.SchemaFactory;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.util.Providers;
|
import com.google.inject.util.Providers;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
import org.apache.commons.codec.binary.StringUtils;
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
import org.eclipse.jgit.lib.PersonIdent;
|
import org.eclipse.jgit.lib.PersonIdent;
|
||||||
import org.eclipse.jgit.lib.RefUpdate;
|
import org.eclipse.jgit.lib.RefUpdate;
|
||||||
@@ -428,6 +430,44 @@ public class ChangeEditIT extends AbstractDaemonTest {
|
|||||||
edit.get().getRevision().get(), FILE_NAME)));
|
edit.get().getRevision().get(), FILE_NAME)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFileContentRest() throws Exception {
|
||||||
|
Put.Input in = new Put.Input();
|
||||||
|
in.content = RestSession.newRawInput(CONTENT_NEW);
|
||||||
|
assertEquals(SC_NO_CONTENT, session.putRaw(urlEditFile(),
|
||||||
|
in.content).getStatusCode());
|
||||||
|
Optional<ChangeEdit> edit = editUtil.byChange(change);
|
||||||
|
assertEquals(RefUpdate.Result.FORCED,
|
||||||
|
modifier.modifyFile(
|
||||||
|
edit.get(),
|
||||||
|
FILE_NAME,
|
||||||
|
CONTENT_NEW2));
|
||||||
|
edit = editUtil.byChange(change);
|
||||||
|
RestResponse r = session.get(urlEditFile());
|
||||||
|
assertEquals(SC_OK, r.getStatusCode());
|
||||||
|
String content = r.getEntityContent();
|
||||||
|
assertEquals(StringUtils.newStringUtf8(CONTENT_NEW2),
|
||||||
|
StringUtils.newStringUtf8(Base64.decodeBase64(content)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFileNotFoundRest() throws Exception {
|
||||||
|
assertEquals(RefUpdate.Result.NEW,
|
||||||
|
modifier.createEdit(
|
||||||
|
change,
|
||||||
|
ps));
|
||||||
|
assertEquals(SC_NO_CONTENT, session.delete(urlEditFile()).getStatusCode());
|
||||||
|
Optional<ChangeEdit> edit = editUtil.byChange(change);
|
||||||
|
try {
|
||||||
|
fileUtil.getContent(edit.get().getChange().getProject(),
|
||||||
|
edit.get().getRevision().get(), FILE_NAME);
|
||||||
|
fail("ResourceNotFoundException expected");
|
||||||
|
} catch (ResourceNotFoundException rnfe) {
|
||||||
|
}
|
||||||
|
RestResponse r = session.get(urlEditFile());
|
||||||
|
assertEquals(SC_NO_CONTENT, r.getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void addNewFile() throws Exception {
|
public void addNewFile() throws Exception {
|
||||||
assertEquals(RefUpdate.Result.NEW,
|
assertEquals(RefUpdate.Result.NEW,
|
||||||
|
|||||||
@@ -310,4 +310,27 @@ public class ChangeEdits implements
|
|||||||
return Response.none();
|
return Response.none();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
static class Get implements RestReadView<ChangeEditResource> {
|
||||||
|
private final FileContentUtil fileContentUtil;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
Get(FileContentUtil fileContentUtil) {
|
||||||
|
this.fileContentUtil = fileContentUtil;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Response<?> apply(ChangeEditResource rsrc)
|
||||||
|
throws ResourceNotFoundException, IOException {
|
||||||
|
try {
|
||||||
|
return Response.ok(fileContentUtil.getContent(
|
||||||
|
rsrc.getChangeEdit().getChange().getProject(),
|
||||||
|
rsrc.getChangeEdit().getRevision().get(),
|
||||||
|
rsrc.getPath()));
|
||||||
|
} catch (ResourceNotFoundException rnfe) {
|
||||||
|
return Response.none();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ public class Module extends RestApiModule {
|
|||||||
child(CHANGE_KIND, "edit").to(ChangeEdits.class);
|
child(CHANGE_KIND, "edit").to(ChangeEdits.class);
|
||||||
put(CHANGE_EDIT_KIND, "/").to(ChangeEdits.Put.class);
|
put(CHANGE_EDIT_KIND, "/").to(ChangeEdits.Put.class);
|
||||||
delete(CHANGE_EDIT_KIND).to(ChangeEdits.DeleteContent.class);
|
delete(CHANGE_EDIT_KIND).to(ChangeEdits.DeleteContent.class);
|
||||||
|
get(CHANGE_EDIT_KIND, "/").to(ChangeEdits.Get.class);
|
||||||
|
|
||||||
install(new FactoryModule() {
|
install(new FactoryModule() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user