diff options
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.java | 45 |
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; + } } |