diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/RevisionIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/RevisionIT.java index 09e6ffe2c9..253c4cbef7 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/RevisionIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/RevisionIT.java @@ -505,6 +505,19 @@ public class RevisionIT extends AbstractDaemonTest { CommentInfo comment = Iterables.getOnlyElement(out.get(FILE_NAME)); assertThat(comment.message).isEqualTo(in.message); assertThat(comment.author.email).isEqualTo(admin.email); + assertThat(comment.path).isNull(); + + List list = gApi.changes() + .id(r.getChangeId()) + .revision(r.getCommit().name()) + .commentsAsList(); + assertThat(list).hasSize(1); + + CommentInfo comment2 = list.get(0); + assertThat(comment2.path).isEqualTo(FILE_NAME); + assertThat(comment2.line).isEqualTo(comment.line); + assertThat(comment2.message).isEqualTo(comment.message); + assertThat(comment2.author.email).isEqualTo(comment.author.email); assertThat(gApi.changes() .id(r.getChangeId()) diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/RevisionApi.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/RevisionApi.java index 3e7a207b6f..3d1e3bd8c3 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/RevisionApi.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/RevisionApi.java @@ -50,6 +50,9 @@ public interface RevisionApi { Map> comments() throws RestApiException; Map> drafts() throws RestApiException; + List commentsAsList() throws RestApiException; + List draftsAsList() throws RestApiException; + DraftApi createDraft(DraftInput in) throws RestApiException; DraftApi draft(String id) throws RestApiException; @@ -147,6 +150,16 @@ public interface RevisionApi { throw new NotImplementedException(); } + @Override + public List commentsAsList() throws RestApiException { + throw new NotImplementedException(); + } + + @Override + public List draftsAsList() throws RestApiException { + throw new NotImplementedException(); + } + @Override public Map> drafts() throws RestApiException { throw new NotImplementedException(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java index 8683404354..8d113d9b8e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java @@ -297,6 +297,15 @@ class RevisionApiImpl implements RevisionApi { } } + @Override + public List commentsAsList() throws RestApiException { + try { + return listComments.getComments(revision); + } catch (OrmException e) { + throw new RestApiException("Cannot retrieve comments", e); + } + } + @Override public Map> drafts() throws RestApiException { try { @@ -306,6 +315,15 @@ class RevisionApiImpl implements RevisionApi { } } + @Override + public List draftsAsList() throws RestApiException { + try { + return listDrafts.getComments(revision); + } catch (OrmException e) { + throw new RestApiException("Cannot retrieve drafts", e); + } + } + @Override public DraftApi draft(String id) throws RestApiException { try { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CommentJson.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CommentJson.java index 46fabd5007..b155b84035 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CommentJson.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CommentJson.java @@ -16,7 +16,9 @@ package com.google.gerrit.server.change; import static com.google.gerrit.server.PatchLineCommentsUtil.COMMENT_INFO_ORDER; +import com.google.common.base.Function; import com.google.common.base.Strings; +import com.google.common.collect.FluentIterable; import com.google.gerrit.extensions.client.Comment.Range; import com.google.gerrit.extensions.client.Side; import com.google.gerrit.extensions.common.CommentInfo; @@ -96,6 +98,27 @@ class CommentJson { return out; } + List formatAsList(Iterable l) + throws OrmException { + final AccountLoader accountLoader = fillAccounts + ? accountLoaderFactory.create(true) + : null; + List out = FluentIterable + .from(l) + .transform(new Function() { + @Override + public CommentInfo apply(PatchLineComment c) { + return toCommentInfo(c, accountLoader); + } + }).toSortedList(COMMENT_INFO_ORDER); + + if (accountLoader != null) { + accountLoader.fill(); + } + + return out; + } + private CommentInfo toCommentInfo(PatchLineComment c, AccountLoader loader) { CommentInfo r = new CommentInfo(); if (fillPatchSet) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ListRevisionDrafts.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ListRevisionDrafts.java index 1ce898d9fd..ef12b2a5d2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ListRevisionDrafts.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ListRevisionDrafts.java @@ -59,4 +59,11 @@ public class ListRevisionDrafts implements RestReadView { .setFillAccounts(includeAuthorInfo()) .format(listComments(rsrc)); } + + public List getComments(RevisionResource rsrc) + throws OrmException { + return commentJson.get() + .setFillAccounts(includeAuthorInfo()) + .formatAsList(listComments(rsrc)); + } }