ChangeNotes: Order ChangeMessages in forward chronological order

This matches the ordering of PatchSetApprovals.

Change-Id: Icd8c8428381ff5044deede4ae53bd48e8d040d43
This commit is contained in:
Dave Borowitz
2014-06-10 18:38:54 -07:00
parent 21a1f790e7
commit b59920d8fc
2 changed files with 22 additions and 18 deletions

View File

@@ -81,6 +81,15 @@ public class ChangeNotes extends VersionedMetaData {
} }
}); });
private static final Ordering<ChangeMessage> MESSAGE_BY_TIME =
Ordering.natural().onResultOf(
new Function<ChangeMessage, Timestamp>() {
@Override
public Timestamp apply(ChangeMessage input) {
return input.getWrittenOn();
}
});
@Singleton @Singleton
public static class Factory { public static class Factory {
private final GitRepositoryManager repoManager; private final GitRepositoryManager repoManager;
@@ -141,6 +150,13 @@ public class ChangeNotes extends VersionedMetaData {
return ImmutableListMultimap.copyOf(result); return ImmutableListMultimap.copyOf(result);
} }
private ImmutableListMultimap<PatchSet.Id, ChangeMessage> buildMessages() {
for (Collection<ChangeMessage> v : changeMessages.asMap().values()) {
Collections.sort((List<ChangeMessage>) v, MESSAGE_BY_TIME);
}
return ImmutableListMultimap.copyOf(changeMessages);
}
private void parse(RevCommit commit) throws ConfigInvalidException { private void parse(RevCommit commit) throws ConfigInvalidException {
if (status == null) { if (status == null) {
status = parseStatus(commit); status = parseStatus(commit);
@@ -470,13 +486,9 @@ public class ChangeNotes extends VersionedMetaData {
return submitRecords; return submitRecords;
} }
/** /** @return change messages by patch set, in chronological order. */
* @return change messages. for some PatchSet.Id, the change messages
* are stored in a list in reverse chronological order.
*/
public ImmutableListMultimap<PatchSet.Id, ChangeMessage> getChangeMessages() { public ImmutableListMultimap<PatchSet.Id, ChangeMessage> getChangeMessages() {
return changeMessages; return changeMessages;
} }
@Override @Override
@@ -500,6 +512,7 @@ public class ChangeNotes extends VersionedMetaData {
change.setStatus(parser.status); change.setStatus(parser.status);
} }
approvals = parser.buildApprovals(); approvals = parser.buildApprovals();
changeMessages = parser.buildMessages();
ImmutableSetMultimap.Builder<ReviewerState, Account.Id> reviewers = ImmutableSetMultimap.Builder<ReviewerState, Account.Id> reviewers =
ImmutableSetMultimap.builder(); ImmutableSetMultimap.builder();
@@ -509,15 +522,6 @@ public class ChangeNotes extends VersionedMetaData {
} }
this.reviewers = reviewers.build(); this.reviewers = reviewers.build();
ImmutableListMultimap.Builder<PatchSet.Id, ChangeMessage> cms =
ImmutableListMultimap.builder();
for (Map.Entry<PatchSet.Id, ChangeMessage> e
: parser.changeMessages.entries()) {
cms.put(e.getKey(), e.getValue());
}
this.changeMessages = cms.build();
submitRecords = ImmutableList.copyOf(parser.submitRecords); submitRecords = ImmutableList.copyOf(parser.submitRecords);
} finally { } finally {
walk.release(); walk.release();

View File

@@ -819,16 +819,16 @@ public class ChangeNotesTest {
List<ChangeMessage> cm = changeMessages.get(ps1); List<ChangeMessage> cm = changeMessages.get(ps1);
assertEquals(2, cm.size()); assertEquals(2, cm.size());
assertEquals("Second change message.\n", assertEquals("First change message.\n",
cm.get(0).getMessage()); cm.get(0).getMessage());
assertEquals(changeOwner.getAccount().getId(), assertEquals(changeOwner.getAccount().getId(),
cm.get(0).getAuthor()); cm.get(0).getAuthor());
assertEquals(ps1, cm.get(0).getPatchSetId()); assertEquals(ps1, cm.get(0).getPatchSetId());
assertEquals("First change message.\n", assertEquals("Second change message.\n",
cm.get(1).getMessage()); cm.get(1).getMessage());
assertEquals(changeOwner.getAccount().getId(), assertEquals(changeOwner.getAccount().getId(),
cm.get(0).getAuthor()); cm.get(1).getAuthor());
assertEquals(ps1, cm.get(0).getPatchSetId()); assertEquals(ps1, cm.get(1).getPatchSetId());
} }