Merge "Make rebuild.Event Comparable"
This commit is contained in:
@@ -26,7 +26,6 @@ import com.google.common.base.Optional;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ComparisonChain;
|
||||
import com.google.common.collect.FluentIterable;
|
||||
import com.google.common.collect.ImmutableMultimap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
@@ -364,7 +363,7 @@ public class ChangeRebuilderImpl extends ChangeRebuilder {
|
||||
EventList<PatchLineCommentEvent> plcel = new EventList<>();
|
||||
for (Account.Id author : draftCommentEvents.keys()) {
|
||||
for (PatchLineCommentEvent e :
|
||||
EVENT_ORDER.sortedCopy(draftCommentEvents.get(author))) {
|
||||
Ordering.natural().sortedCopy(draftCommentEvents.get(author))) {
|
||||
if (!plcel.canAdd(e)) {
|
||||
flushEventsToDraftUpdate(manager, plcel, change);
|
||||
checkState(plcel.canAdd(e));
|
||||
@@ -399,7 +398,7 @@ public class ChangeRebuilderImpl extends ChangeRebuilder {
|
||||
|
||||
private void sortAndFillEvents(Change change, Change noteDbChange,
|
||||
List<Event> events, Integer minPsNum) {
|
||||
Collections.sort(events, EVENT_ORDER);
|
||||
Collections.sort(events);
|
||||
events.add(new FinalUpdatesEvent(change, noteDbChange));
|
||||
|
||||
// Ensure the first event in the list creates the change, setting the author
|
||||
@@ -566,23 +565,6 @@ public class ChangeRebuilderImpl extends ChangeRebuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private static final Ordering<Event> EVENT_ORDER = new Ordering<Event>() {
|
||||
@Override
|
||||
public int compare(Event a, Event b) {
|
||||
return ComparisonChain.start()
|
||||
.compare(a.when, b.when)
|
||||
.compareTrueFirst(isPatchSet(a), isPatchSet(b))
|
||||
.compareTrueFirst(a.predatesChange, b.predatesChange)
|
||||
.compare(a.who, b.who, ReviewDbUtil.intKeyOrdering())
|
||||
.compare(a.psId, b.psId, ReviewDbUtil.intKeyOrdering().nullsLast())
|
||||
.result();
|
||||
}
|
||||
|
||||
private boolean isPatchSet(Event e) {
|
||||
return e instanceof PatchSetEvent;
|
||||
}
|
||||
};
|
||||
|
||||
static void createChange(ChangeUpdate update, Change change) {
|
||||
update.setSubjectForCommit("Create change");
|
||||
update.setChangeId(change.getKey().get());
|
||||
|
||||
@@ -18,8 +18,10 @@ import static com.google.common.base.Preconditions.checkState;
|
||||
import static com.google.gerrit.server.notedb.rebuild.ChangeRebuilderImpl.MAX_WINDOW_MS;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.collect.ComparisonChain;
|
||||
import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDbUtil;
|
||||
import com.google.gerrit.server.notedb.AbstractChangeUpdate;
|
||||
import com.google.gerrit.server.notedb.ChangeUpdate;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
@@ -28,7 +30,7 @@ import java.io.IOException;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.Objects;
|
||||
|
||||
abstract class Event {
|
||||
abstract class Event implements Comparable<Event> {
|
||||
// NOTE: EventList only supports direct subclasses, not an arbitrary
|
||||
// hierarchy.
|
||||
|
||||
@@ -68,6 +70,10 @@ abstract class Event {
|
||||
|
||||
abstract void apply(ChangeUpdate update) throws OrmException, IOException;
|
||||
|
||||
protected boolean isPatchSet() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(this)
|
||||
@@ -76,4 +82,16 @@ abstract class Event {
|
||||
.add("when", when)
|
||||
.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Event other) {
|
||||
return ComparisonChain.start()
|
||||
.compare(this.when, other.when)
|
||||
.compareTrueFirst(isPatchSet(), isPatchSet())
|
||||
.compareTrueFirst(this.predatesChange, other.predatesChange)
|
||||
.compare(this.who, other.who, ReviewDbUtil.intKeyOrdering())
|
||||
.compare(this.psId, other.psId,
|
||||
ReviewDbUtil.intKeyOrdering().nullsLast())
|
||||
.result();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,11 @@ class PatchSetEvent extends Event {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isPatchSet() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void setRevision(ChangeUpdate update, PatchSet ps)
|
||||
throws IOException {
|
||||
String rev = ps.getRevision().get();
|
||||
|
||||
Reference in New Issue
Block a user