summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
index 3592bbf6f4..80cdca6702 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java
@@ -23,6 +23,7 @@ import static com.google.gerrit.common.changes.ListChangesOption.CURRENT_REVISIO
import static com.google.gerrit.common.changes.ListChangesOption.DETAILED_ACCOUNTS;
import static com.google.gerrit.common.changes.ListChangesOption.DETAILED_LABELS;
import static com.google.gerrit.common.changes.ListChangesOption.LABELS;
+import static com.google.gerrit.common.changes.ListChangesOption.MESSAGES;
import com.google.common.base.Joiner;
import com.google.common.base.Objects;
@@ -259,6 +260,9 @@ public class ChangeJson {
}
out.removable_reviewers = removableReviewers(cd, out.labels.values());
}
+ if (options.contains(MESSAGES)) {
+ out.messages = messages(cd);
+ }
out.finish();
if (has(ALL_REVISIONS) || has(CURRENT_REVISION) || limited != null) {
@@ -618,6 +622,38 @@ public class ChangeJson {
return permitted.asMap();
}
+ private Collection<ChangeMessageInfo> messages(ChangeData cd)
+ throws OrmException {
+ List<ChangeMessage> messages =
+ db.get().changeMessages().byChange(cd.getId()).toList();
+ if (messages.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ // chronological order
+ Collections.sort(messages, new Comparator<ChangeMessage>() {
+ @Override
+ public int compare(ChangeMessage a, ChangeMessage b) {
+ return a.getWrittenOn().compareTo(b.getWrittenOn());
+ }
+ });
+
+ List<ChangeMessageInfo> result =
+ Lists.newArrayListWithCapacity(messages.size());
+ for (ChangeMessage message : messages) {
+ PatchSet.Id patchNum = message.getPatchSetId();
+
+ ChangeMessageInfo cmi = new ChangeMessageInfo();
+ cmi.id = message.getKey().get();
+ cmi.author = accountLoader.get(message.getAuthor());
+ cmi.date = message.getWrittenOn();
+ cmi.message = message.getMessage();
+ cmi._revisionNumber = patchNum != null ? patchNum.get() : null;
+ result.add(cmi);
+ }
+ return result;
+ }
+
private Collection<AccountInfo> removableReviewers(ChangeData cd,
Collection<LabelInfo> labels) throws OrmException {
ChangeControl ctl = control(cd);
@@ -846,6 +882,7 @@ public class ChangeJson {
Map<String, LabelInfo> labels;
Map<String, Collection<String>> permitted_labels;
Collection<AccountInfo> removable_reviewers;
+ Collection<ChangeMessageInfo> messages;
String current_revision;
Map<String, RevisionInfo> revisions;
@@ -931,4 +968,12 @@ public class ChangeJson {
super(id);
}
}
+
+ static class ChangeMessageInfo {
+ String id;
+ AccountInfo author;
+ Timestamp date;
+ String message;
+ Integer _revisionNumber;
+ }
}