Merge "Set 'Status' field in notedb when state changes"
This commit is contained in:
@@ -38,6 +38,7 @@ import com.google.gerrit.server.git.BatchUpdate.Context;
|
|||||||
import com.google.gerrit.server.git.UpdateException;
|
import com.google.gerrit.server.git.UpdateException;
|
||||||
import com.google.gerrit.server.mail.AbandonedSender;
|
import com.google.gerrit.server.mail.AbandonedSender;
|
||||||
import com.google.gerrit.server.mail.ReplyToChangeSender;
|
import com.google.gerrit.server.mail.ReplyToChangeSender;
|
||||||
|
import com.google.gerrit.server.notedb.ChangeUpdate;
|
||||||
import com.google.gerrit.server.project.ChangeControl;
|
import com.google.gerrit.server.project.ChangeControl;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -118,6 +119,7 @@ public class Abandon implements RestModifyView<ChangeResource, AbandonInput>,
|
|||||||
public void updateChange(ChangeContext ctx) throws OrmException,
|
public void updateChange(ChangeContext ctx) throws OrmException,
|
||||||
ResourceConflictException {
|
ResourceConflictException {
|
||||||
change = ctx.getChange();
|
change = ctx.getChange();
|
||||||
|
ChangeUpdate update = ctx.getChangeUpdate();
|
||||||
if (change == null || !change.getStatus().isOpen()) {
|
if (change == null || !change.getStatus().isOpen()) {
|
||||||
throw new ResourceConflictException("change is " + status(change));
|
throw new ResourceConflictException("change is " + status(change));
|
||||||
} else if (change.getStatus() == Change.Status.DRAFT) {
|
} else if (change.getStatus() == Change.Status.DRAFT) {
|
||||||
@@ -129,8 +131,9 @@ public class Abandon implements RestModifyView<ChangeResource, AbandonInput>,
|
|||||||
change.setLastUpdatedOn(ctx.getWhen());
|
change.setLastUpdatedOn(ctx.getWhen());
|
||||||
ctx.getDb().changes().update(Collections.singleton(change));
|
ctx.getDb().changes().update(Collections.singleton(change));
|
||||||
|
|
||||||
|
update.setStatus(change.getStatus());
|
||||||
message = newMessage(ctx.getDb());
|
message = newMessage(ctx.getDb());
|
||||||
cmUtil.addChangeMessage(ctx.getDb(), ctx.getChangeUpdate(), message);
|
cmUtil.addChangeMessage(ctx.getDb(), update, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ChangeMessage newMessage(ReviewDb db) throws OrmException {
|
private ChangeMessage newMessage(ReviewDb db) throws OrmException {
|
||||||
|
|||||||
@@ -253,6 +253,17 @@ public class ChangeInserter extends BatchUpdate.InsertChangeOp {
|
|||||||
db.patchSets().insert(Collections.singleton(patchSet));
|
db.patchSets().insert(Collections.singleton(patchSet));
|
||||||
db.changes().insert(Collections.singleton(change));
|
db.changes().insert(Collections.singleton(change));
|
||||||
update.setTopic(change.getTopic());
|
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();
|
LabelTypes labelTypes = ctl.getProjectControl().getLabelTypes();
|
||||||
approvalsUtil.addReviewers(db, update, labelTypes, change,
|
approvalsUtil.addReviewers(db, update, labelTypes, change,
|
||||||
patchSet, patchSetInfo, reviewers, Collections.<Account.Id> emptySet());
|
patchSet, patchSetInfo, reviewers, Collections.<Account.Id> emptySet());
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import com.google.gerrit.server.git.UpdateException;
|
|||||||
import com.google.gerrit.server.mail.CreateChangeSender;
|
import com.google.gerrit.server.mail.CreateChangeSender;
|
||||||
import com.google.gerrit.server.mail.MailUtil.MailRecipients;
|
import com.google.gerrit.server.mail.MailUtil.MailRecipients;
|
||||||
import com.google.gerrit.server.mail.ReplacePatchSetSender;
|
import com.google.gerrit.server.mail.ReplacePatchSetSender;
|
||||||
|
import com.google.gerrit.server.notedb.ChangeUpdate;
|
||||||
import com.google.gerrit.server.patch.PatchSetInfoFactory;
|
import com.google.gerrit.server.patch.PatchSetInfoFactory;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -181,9 +182,11 @@ public class PublishDraftPatchSet implements RestModifyView<RevisionResource, In
|
|||||||
|
|
||||||
private void saveChange(ChangeContext ctx) throws OrmException {
|
private void saveChange(ChangeContext ctx) throws OrmException {
|
||||||
change = ctx.getChange();
|
change = ctx.getChange();
|
||||||
|
ChangeUpdate update = ctx.getChangeUpdate();
|
||||||
wasDraftChange = change.getStatus() == Change.Status.DRAFT;
|
wasDraftChange = change.getStatus() == Change.Status.DRAFT;
|
||||||
if (wasDraftChange) {
|
if (wasDraftChange) {
|
||||||
change.setStatus(Change.Status.NEW);
|
change.setStatus(Change.Status.NEW);
|
||||||
|
update.setStatus(change.getStatus());
|
||||||
ChangeUtil.updated(change);
|
ChangeUtil.updated(change);
|
||||||
ctx.getDb().changes().update(Collections.singleton(change));
|
ctx.getDb().changes().update(Collections.singleton(change));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import com.google.gerrit.server.git.BatchUpdate.Context;
|
|||||||
import com.google.gerrit.server.git.UpdateException;
|
import com.google.gerrit.server.git.UpdateException;
|
||||||
import com.google.gerrit.server.mail.ReplyToChangeSender;
|
import com.google.gerrit.server.mail.ReplyToChangeSender;
|
||||||
import com.google.gerrit.server.mail.RestoredSender;
|
import com.google.gerrit.server.mail.RestoredSender;
|
||||||
|
import com.google.gerrit.server.notedb.ChangeUpdate;
|
||||||
import com.google.gerrit.server.project.ChangeControl;
|
import com.google.gerrit.server.project.ChangeControl;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -109,6 +110,7 @@ public class Restore implements RestModifyView<ChangeResource, RestoreInput>,
|
|||||||
ResourceConflictException {
|
ResourceConflictException {
|
||||||
caller = ctx.getUser().asIdentifiedUser();
|
caller = ctx.getUser().asIdentifiedUser();
|
||||||
change = ctx.getChange();
|
change = ctx.getChange();
|
||||||
|
ChangeUpdate update = ctx.getChangeUpdate();
|
||||||
if (change == null || change.getStatus() != Status.ABANDONED) {
|
if (change == null || change.getStatus() != Status.ABANDONED) {
|
||||||
throw new ResourceConflictException("change is " + status(change));
|
throw new ResourceConflictException("change is " + status(change));
|
||||||
}
|
}
|
||||||
@@ -116,9 +118,10 @@ public class Restore implements RestModifyView<ChangeResource, RestoreInput>,
|
|||||||
change.setStatus(Status.NEW);
|
change.setStatus(Status.NEW);
|
||||||
change.setLastUpdatedOn(ctx.getWhen());
|
change.setLastUpdatedOn(ctx.getWhen());
|
||||||
ctx.getDb().changes().update(Collections.singleton(change));
|
ctx.getDb().changes().update(Collections.singleton(change));
|
||||||
|
update.setStatus(change.getStatus());
|
||||||
|
|
||||||
message = newMessage(ctx.getDb());
|
message = newMessage(ctx.getDb());
|
||||||
cmUtil.addChangeMessage(ctx.getDb(), ctx.getChangeUpdate(), message);
|
cmUtil.addChangeMessage(ctx.getDb(), update, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ChangeMessage newMessage(ReviewDb db) throws OrmException {
|
private ChangeMessage newMessage(ReviewDb db) throws OrmException {
|
||||||
|
|||||||
Reference in New Issue
Block a user