Merge "Set 'Status' field in notedb when state changes"

This commit is contained in:
Dave Borowitz
2016-01-11 02:06:37 +00:00
committed by Gerrit Code Review
4 changed files with 22 additions and 2 deletions

View File

@@ -38,6 +38,7 @@ import com.google.gerrit.server.git.BatchUpdate.Context;
import com.google.gerrit.server.git.UpdateException;
import com.google.gerrit.server.mail.AbandonedSender;
import com.google.gerrit.server.mail.ReplyToChangeSender;
import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -118,6 +119,7 @@ public class Abandon implements RestModifyView<ChangeResource, AbandonInput>,
public void updateChange(ChangeContext ctx) throws OrmException,
ResourceConflictException {
change = ctx.getChange();
ChangeUpdate update = ctx.getChangeUpdate();
if (change == null || !change.getStatus().isOpen()) {
throw new ResourceConflictException("change is " + status(change));
} else if (change.getStatus() == Change.Status.DRAFT) {
@@ -129,8 +131,9 @@ public class Abandon implements RestModifyView<ChangeResource, AbandonInput>,
change.setLastUpdatedOn(ctx.getWhen());
ctx.getDb().changes().update(Collections.singleton(change));
update.setStatus(change.getStatus());
message = newMessage(ctx.getDb());
cmUtil.addChangeMessage(ctx.getDb(), ctx.getChangeUpdate(), message);
cmUtil.addChangeMessage(ctx.getDb(), update, message);
}
private ChangeMessage newMessage(ReviewDb db) throws OrmException {

View File

@@ -253,6 +253,17 @@ public class ChangeInserter extends BatchUpdate.InsertChangeOp {
db.patchSets().insert(Collections.singleton(patchSet));
db.changes().insert(Collections.singleton(change));
update.setTopic(change.getTopic());
/* TODO: fixStatus is used here because the tests
* (byStatusClosed() in AbstractQueryChangesTest)
* insert changes that are already merged,
* and setStatus may not be used to set the Status to merged
*
* is it possible to make the tests use the merge code path,
* instead of setting the status directly?
*/
update.fixStatus(change.getStatus());
LabelTypes labelTypes = ctl.getProjectControl().getLabelTypes();
approvalsUtil.addReviewers(db, update, labelTypes, change,
patchSet, patchSetInfo, reviewers, Collections.<Account.Id> emptySet());

View File

@@ -46,6 +46,7 @@ import com.google.gerrit.server.git.UpdateException;
import com.google.gerrit.server.mail.CreateChangeSender;
import com.google.gerrit.server.mail.MailUtil.MailRecipients;
import com.google.gerrit.server.mail.ReplacePatchSetSender;
import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.patch.PatchSetInfoFactory;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -181,9 +182,11 @@ public class PublishDraftPatchSet implements RestModifyView<RevisionResource, In
private void saveChange(ChangeContext ctx) throws OrmException {
change = ctx.getChange();
ChangeUpdate update = ctx.getChangeUpdate();
wasDraftChange = change.getStatus() == Change.Status.DRAFT;
if (wasDraftChange) {
change.setStatus(Change.Status.NEW);
update.setStatus(change.getStatus());
ChangeUtil.updated(change);
ctx.getDb().changes().update(Collections.singleton(change));
}

View File

@@ -38,6 +38,7 @@ import com.google.gerrit.server.git.BatchUpdate.Context;
import com.google.gerrit.server.git.UpdateException;
import com.google.gerrit.server.mail.ReplyToChangeSender;
import com.google.gerrit.server.mail.RestoredSender;
import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -109,6 +110,7 @@ public class Restore implements RestModifyView<ChangeResource, RestoreInput>,
ResourceConflictException {
caller = ctx.getUser().asIdentifiedUser();
change = ctx.getChange();
ChangeUpdate update = ctx.getChangeUpdate();
if (change == null || change.getStatus() != Status.ABANDONED) {
throw new ResourceConflictException("change is " + status(change));
}
@@ -116,9 +118,10 @@ public class Restore implements RestModifyView<ChangeResource, RestoreInput>,
change.setStatus(Status.NEW);
change.setLastUpdatedOn(ctx.getWhen());
ctx.getDb().changes().update(Collections.singleton(change));
update.setStatus(change.getStatus());
message = newMessage(ctx.getDb());
cmUtil.addChangeMessage(ctx.getDb(), ctx.getChangeUpdate(), message);
cmUtil.addChangeMessage(ctx.getDb(), update, message);
}
private ChangeMessage newMessage(ReviewDb db) throws OrmException {