ChangeRebuilder Factor out event for status changes
Change-Id: Ib97b137c1eb6e4e120606d1589d151f56f92c713
This commit is contained in:
@@ -31,11 +31,6 @@ class ChangeMessageEvent extends Event {
|
||||
private static final Pattern TOPIC_REMOVED_REGEXP =
|
||||
Pattern.compile("^Topic (.+) removed$");
|
||||
|
||||
private static final Pattern STATUS_ABANDONED_REGEXP =
|
||||
Pattern.compile("^Abandoned(\n.*)*$");
|
||||
private static final Pattern STATUS_RESTORED_REGEXP =
|
||||
Pattern.compile("^Restored(\n.*)*$");
|
||||
|
||||
private final ChangeMessage message;
|
||||
private final Change noteDbChange;
|
||||
|
||||
@@ -57,7 +52,6 @@ class ChangeMessageEvent extends Event {
|
||||
checkUpdate(update);
|
||||
update.setChangeMessage(message.getMessage());
|
||||
setTopic(update);
|
||||
setStatus(update);
|
||||
}
|
||||
|
||||
private void setTopic(ChangeUpdate update) {
|
||||
@@ -86,21 +80,4 @@ class ChangeMessageEvent extends Event {
|
||||
noteDbChange.setTopic(null);
|
||||
}
|
||||
}
|
||||
|
||||
private void setStatus(ChangeUpdate update) {
|
||||
String msg = message.getMessage();
|
||||
if (msg == null) {
|
||||
return;
|
||||
}
|
||||
if (STATUS_ABANDONED_REGEXP.matcher(msg).matches()) {
|
||||
update.setStatus(Change.Status.ABANDONED);
|
||||
noteDbChange.setStatus(Change.Status.ABANDONED);
|
||||
return;
|
||||
}
|
||||
|
||||
if (STATUS_RESTORED_REGEXP.matcher(msg).matches()) {
|
||||
update.setStatus(Change.Status.NEW);
|
||||
noteDbChange.setStatus(Change.Status.NEW);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,19 +350,17 @@ public class ChangeRebuilderImpl extends ChangeRebuilder {
|
||||
|
||||
Change noteDbChange = new Change(null, null, null, null, null);
|
||||
for (ChangeMessage msg : bundle.getChangeMessages()) {
|
||||
if (msg.getPatchSetId() == null) {
|
||||
// No dependency necessary; will get assigned to most recent patch set
|
||||
// in sortAndFillEvents.
|
||||
events.add(
|
||||
new ChangeMessageEvent(msg, noteDbChange, change.getCreatedOn()));
|
||||
continue;
|
||||
}
|
||||
PatchSetEvent pse = patchSetEvents.get(msg.getPatchSetId());
|
||||
if (pse != null) {
|
||||
events.add(
|
||||
new ChangeMessageEvent(msg, noteDbChange, change.getCreatedOn())
|
||||
.addDep(pse));
|
||||
List<Event> msgEvents = parseChangeMessage(
|
||||
msg, noteDbChange, change.getCreatedOn());
|
||||
if (msg.getPatchSetId() != null) {
|
||||
PatchSetEvent pse = patchSetEvents.get(msg.getPatchSetId());
|
||||
if (pse != null) {
|
||||
for (Event e : msgEvents) {
|
||||
e.addDep(pse);
|
||||
}
|
||||
}
|
||||
}
|
||||
events.addAll(msgEvents);
|
||||
}
|
||||
|
||||
sortAndFillEvents(change, noteDbChange, events, minPsNum);
|
||||
@@ -391,6 +389,18 @@ public class ChangeRebuilderImpl extends ChangeRebuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private List<Event> parseChangeMessage(ChangeMessage msg, Change noteDbChange,
|
||||
Timestamp changeCreatedOn) {
|
||||
List<Event> events = new ArrayList<>(2);
|
||||
events.add(new ChangeMessageEvent(msg, noteDbChange, changeCreatedOn));
|
||||
Optional<StatusChangeEvent> sce =
|
||||
StatusChangeEvent.parseFromMessage(msg, noteDbChange, changeCreatedOn);
|
||||
if (sce.isPresent()) {
|
||||
events.add(sce.get());
|
||||
}
|
||||
return events;
|
||||
}
|
||||
|
||||
private static Integer getMinPatchSetNum(ChangeBundle bundle) {
|
||||
Integer minPsNum = null;
|
||||
for (PatchSet ps : bundle.getPatchSets()) {
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
// Copyright (C) 2016 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.notedb.rebuild;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gerrit.reviewdb.client.ChangeMessage;
|
||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
import com.google.gerrit.server.notedb.ChangeUpdate;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
class StatusChangeEvent extends Event {
|
||||
private static final Pattern STATUS_ABANDONED_REGEXP =
|
||||
Pattern.compile("^Abandoned(\n.*)*$");
|
||||
private static final Pattern STATUS_RESTORED_REGEXP =
|
||||
Pattern.compile("^Restored(\n.*)*$");
|
||||
|
||||
static Optional<StatusChangeEvent> parseFromMessage(ChangeMessage message,
|
||||
Change noteDbChange, Timestamp changeCreatedOn) {
|
||||
String msg = message.getMessage();
|
||||
if (msg == null) {
|
||||
return Optional.absent();
|
||||
}
|
||||
if (STATUS_ABANDONED_REGEXP.matcher(msg).matches()) {
|
||||
return Optional.of(new StatusChangeEvent(
|
||||
message, noteDbChange, changeCreatedOn, Change.Status.ABANDONED));
|
||||
}
|
||||
if (STATUS_RESTORED_REGEXP.matcher(msg).matches()) {
|
||||
return Optional.of(new StatusChangeEvent(
|
||||
message, noteDbChange, changeCreatedOn, Change.Status.NEW));
|
||||
}
|
||||
return Optional.absent();
|
||||
}
|
||||
|
||||
private final Change noteDbChange;
|
||||
private final Change.Status status;
|
||||
|
||||
private StatusChangeEvent(ChangeMessage message, Change noteDbChange,
|
||||
Timestamp changeCreatedOn, Change.Status status) {
|
||||
this(message.getPatchSetId(), message.getAuthor(),
|
||||
message.getWrittenOn(), noteDbChange, changeCreatedOn, message.getTag(),
|
||||
status);
|
||||
}
|
||||
|
||||
private StatusChangeEvent(PatchSet.Id psId, Account.Id author,
|
||||
Timestamp when, Change noteDbChange, Timestamp changeCreatedOn,
|
||||
String tag, Change.Status status) {
|
||||
super(psId, author, when, changeCreatedOn, tag);
|
||||
this.noteDbChange = noteDbChange;
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean uniquePerUpdate() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
void apply(ChangeUpdate update) throws OrmException {
|
||||
checkUpdate(update);
|
||||
update.fixStatus(status);
|
||||
noteDbChange.setStatus(status);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user