Add current patchset to json when a review is public/ready
Current patch set is not a part of wip-state-changed and
private-state-changed events. Previously when drafts were published a
draft-published event was fired, and it included the current patchset
information in the json for the event. Private-state-changed and
wip-state-changed events do not contain that data. This change adds
current patch set data for those events.
Bug: Issue 8202
Change-Id: I9eda90de6b793e0080f4a79f60ea1bdd25d9d589
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/PrivateStateChangedListener.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/PrivateStateChangedListener.java
index e46ceb8..2da6ec9 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/PrivateStateChangedListener.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/PrivateStateChangedListener.java
@@ -15,7 +15,7 @@
package com.google.gerrit.extensions.events;
public interface PrivateStateChangedListener {
- interface Event extends ChangeEvent {}
+ interface Event extends RevisionEvent {}
void onPrivateStateChanged(Event event);
}
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/WorkInProgressStateChangedListener.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/WorkInProgressStateChangedListener.java
index e957421..d0e2bc1 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/WorkInProgressStateChangedListener.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/WorkInProgressStateChangedListener.java
@@ -15,7 +15,7 @@
package com.google.gerrit.extensions.events;
public interface WorkInProgressStateChangedListener {
- interface Event extends ChangeEvent {}
+ interface Event extends RevisionEvent {}
void onWorkInProgressStateChanged(Event event);
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetPrivateOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetPrivateOp.java
index 9aa4636..de79f03 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetPrivateOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetPrivateOp.java
@@ -18,8 +18,11 @@
import com.google.gerrit.extensions.restapi.ResourceConflictException;
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.ChangeMessagesUtil;
+import com.google.gerrit.server.PatchSetUtil;
import com.google.gerrit.server.extensions.events.PrivateStateChanged;
+import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.update.BatchUpdateOp;
import com.google.gerrit.server.update.ChangeContext;
@@ -44,19 +47,23 @@
}
private final ChangeMessagesUtil cmUtil;
+ private final PatchSetUtil psUtil;
private final boolean isPrivate;
private final Input input;
private final PrivateStateChanged privateStateChanged;
private Change change;
+ private PatchSet ps;
@Inject
SetPrivateOp(
PrivateStateChanged privateStateChanged,
+ PatchSetUtil psUtil,
@Assisted ChangeMessagesUtil cmUtil,
@Assisted boolean isPrivate,
@Assisted Input input) {
this.cmUtil = cmUtil;
+ this.psUtil = psUtil;
this.isPrivate = isPrivate;
this.input = input;
this.privateStateChanged = privateStateChanged;
@@ -65,6 +72,8 @@
@Override
public boolean updateChange(ChangeContext ctx) throws ResourceConflictException, OrmException {
change = ctx.getChange();
+ ChangeNotes notes = ctx.getNotes();
+ ps = psUtil.get(ctx.getDb(), notes, change.currentPatchSetId());
ChangeUpdate update = ctx.getUpdate(change.currentPatchSetId());
change.setPrivate(isPrivate);
change.setLastUpdatedOn(ctx.getWhen());
@@ -75,7 +84,7 @@
@Override
public void postUpdate(Context ctx) {
- privateStateChanged.fire(change, ctx.getAccount(), ctx.getWhen());
+ privateStateChanged.fire(change, ps, ctx.getAccount(), ctx.getWhen());
}
private void addMessage(ChangeContext ctx, ChangeUpdate update) throws OrmException {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/WorkInProgressOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/WorkInProgressOp.java
index 43de55c3..bd4b2cd 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/WorkInProgressOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/WorkInProgressOp.java
@@ -125,7 +125,7 @@
@Override
public void postUpdate(Context ctx) {
- stateChanged.fire(change, ctx.getAccount(), ctx.getWhen());
+ stateChanged.fire(change, ps, ctx.getAccount(), ctx.getWhen());
if (workInProgress || notify.ordinal() < NotifyHandling.OWNER_REVIEWERS.ordinal()) {
return;
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/PrivateStateChangedEvent.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/PrivateStateChangedEvent.java
index af42b08..d03eda4 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/PrivateStateChangedEvent.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/PrivateStateChangedEvent.java
@@ -18,7 +18,7 @@
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.data.AccountAttribute;
-public class PrivateStateChangedEvent extends ChangeEvent {
+public class PrivateStateChangedEvent extends PatchSetEvent {
static final String TYPE = "private-state-changed";
public Supplier<AccountAttribute> changer;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/StreamEventsApiListener.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/StreamEventsApiListener.java
index 6b0190d..3006b3b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/StreamEventsApiListener.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/StreamEventsApiListener.java
@@ -473,11 +473,14 @@
@Override
public void onWorkInProgressStateChanged(WorkInProgressStateChangedListener.Event ev) {
try {
- Change change = getChange(ev.getChange());
+ ChangeNotes notes = getNotes(ev.getChange());
+ Change change = notes.getChange();
+ PatchSet patchSet = getPatchSet(notes, ev.getRevision());
WorkInProgressStateChangedEvent event = new WorkInProgressStateChangedEvent(change);
event.change = changeAttributeSupplier(change);
event.changer = accountAttributeSupplier(ev.getWho());
+ event.patchSet = patchSetAttributeSupplier(change, patchSet);
dispatcher.get().postEvent(change, event);
} catch (OrmException | PermissionBackendException e) {
@@ -488,11 +491,14 @@
@Override
public void onPrivateStateChanged(PrivateStateChangedListener.Event ev) {
try {
- Change change = getChange(ev.getChange());
+ ChangeNotes notes = getNotes(ev.getChange());
+ Change change = notes.getChange();
+ PatchSet patchSet = getPatchSet(notes, ev.getRevision());
PrivateStateChangedEvent event = new PrivateStateChangedEvent(change);
event.change = changeAttributeSupplier(change);
event.changer = accountAttributeSupplier(ev.getWho());
+ event.patchSet = patchSetAttributeSupplier(change, patchSet);
dispatcher.get().postEvent(change, event);
} catch (OrmException | PermissionBackendException e) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/WorkInProgressStateChangedEvent.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/WorkInProgressStateChangedEvent.java
index ad32672..5e52c7b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/WorkInProgressStateChangedEvent.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/WorkInProgressStateChangedEvent.java
@@ -18,7 +18,7 @@
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.data.AccountAttribute;
-public class WorkInProgressStateChangedEvent extends ChangeEvent {
+public class WorkInProgressStateChangedEvent extends PatchSetEvent {
static final String TYPE = "wip-state-changed";
public Supplier<AccountAttribute> changer;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/PrivateStateChanged.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/PrivateStateChanged.java
index 843b082..61fa6a9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/PrivateStateChanged.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/PrivateStateChanged.java
@@ -17,13 +17,19 @@
import com.google.gerrit.extensions.api.changes.NotifyHandling;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
+import com.google.gerrit.extensions.common.RevisionInfo;
import com.google.gerrit.extensions.events.PrivateStateChangedListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.PatchSet;
+import com.google.gerrit.server.GpgException;
+import com.google.gerrit.server.patch.PatchListNotAvailableException;
+import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
+import java.io.IOException;
import java.sql.Timestamp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -41,13 +47,18 @@
this.util = util;
}
- public void fire(Change change, Account account, Timestamp when) {
+ public void fire(Change change, PatchSet patchSet, Account account, Timestamp when) {
if (!listeners.iterator().hasNext()) {
return;
}
try {
- Event event = new Event(util.changeInfo(change), util.accountInfo(account), when);
+ Event event =
+ new Event(
+ util.changeInfo(change),
+ util.revisionInfo(change.getProject(), patchSet),
+ util.accountInfo(account),
+ when);
for (PrivateStateChangedListener l : listeners) {
try {
l.onPrivateStateChanged(event);
@@ -55,16 +66,20 @@
util.logEventListenerError(event, l, e);
}
}
- } catch (OrmException e) {
+ } catch (PatchListNotAvailableException
+ | PermissionBackendException
+ | IOException
+ | GpgException
+ | OrmException e) {
log.error("Couldn't fire event", e);
}
}
- private static class Event extends AbstractChangeEvent
+ private static class Event extends AbstractRevisionEvent
implements PrivateStateChangedListener.Event {
- protected Event(ChangeInfo change, AccountInfo who, Timestamp when) {
- super(change, who, when, NotifyHandling.ALL);
+ protected Event(ChangeInfo change, RevisionInfo revision, AccountInfo who, Timestamp when) {
+ super(change, revision, who, when, NotifyHandling.ALL);
}
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/WorkInProgressStateChanged.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/WorkInProgressStateChanged.java
index 94a9dd9..4a28d0c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/WorkInProgressStateChanged.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/WorkInProgressStateChanged.java
@@ -17,13 +17,19 @@
import com.google.gerrit.extensions.api.changes.NotifyHandling;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
+import com.google.gerrit.extensions.common.RevisionInfo;
import com.google.gerrit.extensions.events.WorkInProgressStateChangedListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.PatchSet;
+import com.google.gerrit.server.GpgException;
+import com.google.gerrit.server.patch.PatchListNotAvailableException;
+import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
+import java.io.IOException;
import java.sql.Timestamp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,13 +48,18 @@
this.util = util;
}
- public void fire(Change change, Account account, Timestamp when) {
+ public void fire(Change change, PatchSet patchSet, Account account, Timestamp when) {
if (!listeners.iterator().hasNext()) {
return;
}
try {
- Event event = new Event(util.changeInfo(change), util.accountInfo(account), when);
+ Event event =
+ new Event(
+ util.changeInfo(change),
+ util.revisionInfo(change.getProject(), patchSet),
+ util.accountInfo(account),
+ when);
for (WorkInProgressStateChangedListener l : listeners) {
try {
l.onWorkInProgressStateChanged(event);
@@ -56,16 +67,20 @@
util.logEventListenerError(event, l, e);
}
}
- } catch (OrmException e) {
+ } catch (PatchListNotAvailableException
+ | PermissionBackendException
+ | IOException
+ | GpgException
+ | OrmException e) {
log.error("Couldn't fire event", e);
}
}
- private static class Event extends AbstractChangeEvent
+ private static class Event extends AbstractRevisionEvent
implements WorkInProgressStateChangedListener.Event {
- protected Event(ChangeInfo change, AccountInfo who, Timestamp when) {
- super(change, who, when, NotifyHandling.ALL);
+ protected Event(ChangeInfo change, RevisionInfo revision, AccountInfo who, Timestamp when) {
+ super(change, revision, who, when, NotifyHandling.ALL);
}
}
}