Allow setting notification handling on abandon via API
Change-Id: I099c9b094ac6b75248f44f665347506db15b2749
This commit is contained in:
@@ -4113,6 +4113,11 @@ The `AbandonInput` entity contains information for abandoning a change.
|
||||
|`message` |optional|
|
||||
Message to be added as review comment to the change when abandoning the
|
||||
change.
|
||||
|`notify` |optional|
|
||||
Notify handling that defines to whom email notifications should be sent after
|
||||
the change is abandoned. +
|
||||
Allowed values are `NONE`, `OWNER`, `OWNER_REVIEWERS` and `ALL`. +
|
||||
If not set, the default is `ALL`.
|
||||
|===========================
|
||||
|
||||
[[action-info]]
|
||||
|
||||
@@ -15,9 +15,11 @@
|
||||
package com.google.gerrit.extensions.api.changes;
|
||||
|
||||
import com.google.gerrit.extensions.restapi.DefaultInput;
|
||||
import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
||||
|
||||
public class AbandonInput {
|
||||
@DefaultInput
|
||||
public String message;
|
||||
public NotifyHandling notify = NotifyHandling.ALL;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.google.gerrit.server.change;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.gerrit.common.TimeUtil;
|
||||
import com.google.gerrit.extensions.api.changes.AbandonInput;
|
||||
import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
||||
import com.google.gerrit.extensions.common.ChangeInfo;
|
||||
import com.google.gerrit.extensions.restapi.AuthException;
|
||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||
@@ -86,17 +87,22 @@ public class Abandon implements RestModifyView<ChangeResource, AbandonInput>,
|
||||
if (!control.canAbandon(dbProvider.get())) {
|
||||
throw new AuthException("abandon not permitted");
|
||||
}
|
||||
Change change = abandon(control, input.message);
|
||||
Change change = abandon(control, input.message, input.notify);
|
||||
return json.create(ChangeJson.NO_OPTIONS).format(change);
|
||||
}
|
||||
|
||||
public Change abandon(ChangeControl control, String msgTxt)
|
||||
throws RestApiException, UpdateException {
|
||||
return abandon(control, msgTxt, NotifyHandling.ALL);
|
||||
}
|
||||
|
||||
public Change abandon(ChangeControl control, String msgTxt,
|
||||
NotifyHandling notifyHandling) throws RestApiException, UpdateException {
|
||||
CurrentUser user = control.getUser();
|
||||
Account account = user.isIdentifiedUser()
|
||||
? user.asIdentifiedUser().getAccount()
|
||||
: null;
|
||||
Op op = new Op(msgTxt, account);
|
||||
Op op = new Op(msgTxt, account, notifyHandling);
|
||||
try (BatchUpdate u = batchUpdateFactory.create(dbProvider.get(),
|
||||
control.getProject().getNameKey(), user, TimeUtil.nowTs())) {
|
||||
u.addOp(control.getId(), op).execute();
|
||||
@@ -111,10 +117,12 @@ public class Abandon implements RestModifyView<ChangeResource, AbandonInput>,
|
||||
private Change change;
|
||||
private PatchSet patchSet;
|
||||
private ChangeMessage message;
|
||||
private NotifyHandling notifyHandling;
|
||||
|
||||
private Op(String msgTxt, Account account) {
|
||||
private Op(String msgTxt, Account account, NotifyHandling notifyHandling) {
|
||||
this.account = account;
|
||||
this.msgTxt = msgTxt;
|
||||
this.notifyHandling = notifyHandling;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -167,11 +175,13 @@ public class Abandon implements RestModifyView<ChangeResource, AbandonInput>,
|
||||
cm.setFrom(account.getId());
|
||||
}
|
||||
cm.setChangeMessage(message.getMessage(), ctx.getWhen());
|
||||
cm.setNotify(notifyHandling);
|
||||
cm.send();
|
||||
} catch (Exception e) {
|
||||
log.error("Cannot email update for change " + change.getId(), e);
|
||||
}
|
||||
changeAbandoned.fire(change, patchSet, account, msgTxt, ctx.getWhen());
|
||||
changeAbandoned.fire(change, patchSet, account, msgTxt, ctx.getWhen(),
|
||||
notifyHandling);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,11 +49,13 @@ public class ChangeAbandoned {
|
||||
}
|
||||
|
||||
public void fire(ChangeInfo change, RevisionInfo revision,
|
||||
AccountInfo abandoner, String reason, Timestamp when) {
|
||||
AccountInfo abandoner, String reason, Timestamp when,
|
||||
NotifyHandling notifyHandling) {
|
||||
if (!listeners.iterator().hasNext()) {
|
||||
return;
|
||||
}
|
||||
Event event = new Event(change, revision, abandoner, reason, when);
|
||||
Event event = new Event(change, revision, abandoner, reason, when,
|
||||
notifyHandling);
|
||||
for (ChangeAbandonedListener l : listeners) {
|
||||
try {
|
||||
l.onChangeAbandoned(event);
|
||||
@@ -64,7 +66,7 @@ public class ChangeAbandoned {
|
||||
}
|
||||
|
||||
public void fire(Change change, PatchSet ps, Account abandoner, String reason,
|
||||
Timestamp when) {
|
||||
Timestamp when, NotifyHandling notifyHandling) {
|
||||
if (!listeners.iterator().hasNext()) {
|
||||
return;
|
||||
}
|
||||
@@ -72,7 +74,7 @@ public class ChangeAbandoned {
|
||||
fire(util.changeInfo(change),
|
||||
util.revisionInfo(change.getProject(), ps),
|
||||
util.accountInfo(abandoner),
|
||||
reason, when);
|
||||
reason, when, notifyHandling);
|
||||
} catch (PatchListNotAvailableException | GpgException | IOException
|
||||
| OrmException e) {
|
||||
log.error("Couldn't fire event", e);
|
||||
@@ -85,8 +87,8 @@ public class ChangeAbandoned {
|
||||
private final String reason;
|
||||
|
||||
Event(ChangeInfo change, RevisionInfo revision, AccountInfo abandoner,
|
||||
String reason, Timestamp when) {
|
||||
super(change, revision, abandoner, when, NotifyHandling.ALL);
|
||||
String reason, Timestamp when, NotifyHandling notifyHandling) {
|
||||
super(change, revision, abandoner, when, notifyHandling);
|
||||
this.abandoner = abandoner;
|
||||
this.reason = reason;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user