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
public static class Factory {
private final GitRepositoryManager repoManager;
@@ -141,6 +150,13 @@ public class ChangeNotes extends VersionedMetaData {
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 {
if (status == null) {
status = parseStatus(commit);
@@ -470,13 +486,9 @@ public class ChangeNotes extends VersionedMetaData {
return submitRecords;
}
/**
* @return change messages. for some PatchSet.Id, the change messages
* are stored in a list in reverse chronological order.
*/
/** @return change messages by patch set, in chronological order. */
public ImmutableListMultimap<PatchSet.Id, ChangeMessage> getChangeMessages() {
return changeMessages;
}
@Override
@@ -500,6 +512,7 @@ public class ChangeNotes extends VersionedMetaData {
change.setStatus(parser.status);
}
approvals = parser.buildApprovals();
changeMessages = parser.buildMessages();
ImmutableSetMultimap.Builder<ReviewerState, Account.Id> reviewers =
ImmutableSetMultimap.builder();
@@ -509,15 +522,6 @@ public class ChangeNotes extends VersionedMetaData {
}
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);
} finally {
walk.release();

View File

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