build with 2.13
Updated the visibility checking to be more generic and able to handle more cases.
Change-Id: I988541cf36857f7e26cbbb417fe21ab5c1a6f7a2
diff --git a/pom.xml b/pom.xml
index 8892823..3f559e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
<artifactId>events</artifactId>
<name>events</name>
<packaging>jar</packaging>
- <version>2.12</version>
+ <version>2.13</version>
<properties>
<Gerrit-ApiType>plugin</Gerrit-ApiType>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/events/BranchHelper.java b/src/main/java/com/googlesource/gerrit/plugins/events/BranchHelper.java
index 6ad01e9..c03be80 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/events/BranchHelper.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/events/BranchHelper.java
@@ -21,6 +21,7 @@
import com.google.gerrit.server.project.ProjectControl;
import com.google.gerrit.server.project.ProjectState;
import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
import com.google.inject.Inject;
public class BranchHelper {
@@ -47,52 +48,83 @@
}
public static Branch.NameKey getBranch(JsonElement event) {
- // Known events of this type:
- // CommentAddedEvent, ChangeMergedEvent, ChangeAbandonedEvent,
- // ChangeRestoredEvent, DraftPublishedEvent, MergeFailedEvent,
- // PatchSetCreatedEvent, ReviewerAddedEvent:
- JsonElement projectParent = event.getAsJsonObject().get("change");
- if (projectParent == null) {
- // Known events of this type: RefUpdatedEvent
- projectParent = event.getAsJsonObject().get("refUpdate");
- }
- if (projectParent == null) {
+ Branch.NameKey b = null;
+ if (event != null) {
+ JsonObject obj = event.getAsJsonObject();
// Known events of this type:
// CommitReceivedEvent, RefReplicationDoneEvent, RefReplicatedEvent
- projectParent = event;
- }
-
- if (projectParent != null) {
- JsonElement project = projectParent.getAsJsonObject().get("project");
- if (project != null) {
+ b = getBranch(obj);
+ if (b == null) {
// Known events of this type:
// CommentAddedEvent, ChangeMergedEvent, ChangeAbandonedEvent,
// ChangeRestoredEvent, DraftPublishedEvent, MergeFailedEvent,
// PatchSetCreatedEvent, ReviewerAddedEvent:
- JsonElement branch = projectParent.getAsJsonObject().get("branch");
- if (branch == null) {
- // Known events of this type: RefUpdatedEvent, CommitReceivedEvent
- branch = projectParent.getAsJsonObject().get("refName");
+ b = getBranch(obj.get("change"));
+ if (b == null) {
+ // Known events of this type: RefUpdatedEvent
+ b = getBranch(obj.get("refUpdate"));
}
- if (branch == null) {
- // Known events of this type:
- // RefReplicationDoneEvent, RefReplicatedEvent
- branch = projectParent.getAsJsonObject().get("ref");
- }
+ }
+ }
+ return b;
+ }
- if (branch != null) {
- return getBranch(project, branch);
+ protected static Branch.NameKey getBranch(JsonObject projectParent) {
+ Project.NameKey project = getProject(projectParent);
+ if (project != null) {
+ // Known events of this type:
+ // CommentAddedEvent, ChangeMergedEvent, ChangeAbandonedEvent,
+ // ChangeRestoredEvent, DraftPublishedEvent, MergeFailedEvent,
+ // PatchSetCreatedEvent, ReviewerAddedEvent:
+ JsonElement branch = projectParent.get("branch");
+ if (branch == null) {
+ // Known events of this type: RefUpdatedEvent, CommitReceivedEvent
+ branch = projectParent.get("refName");
+ }
+ if (branch == null) {
+ // Known events of this type:
+ // RefReplicationDoneEvent, RefReplicatedEvent
+ branch = projectParent.get("ref");
+ }
+
+ if (branch != null) {
+ String name = asString(branch);
+ if (name != null) {
+ return new Branch.NameKey(project, name);
}
}
}
return null;
}
- protected static Branch.NameKey getBranch(JsonElement project, JsonElement branch) {
- return getBranch(project.getAsString(), branch.getAsString());
+ public static Project.NameKey getProject(JsonObject projectParent) {
+ if (projectParent != null) {
+ JsonElement project = projectParent.get("project");
+ if (project != null) {
+ String name = asString(project);
+ if (name == null) {
+ try {
+ projectParent = project.getAsJsonObject();
+ project = projectParent.get("name");
+ name = asString(project);
+ } catch (RuntimeException e) {
+ }
+ }
+ if (name != null) {
+ return new Project.NameKey(name);
+ }
+ }
+ }
+ return null;
}
- protected static Branch.NameKey getBranch(String project, String branch) {
- return new Branch.NameKey(new Project.NameKey(project), (branch.startsWith("refs/") ? "" : "refs/heads/") + branch);
+ protected static String asString(JsonElement el) {
+ if (el != null) {
+ try {
+ return el.getAsString();
+ } catch (RuntimeException e) {
+ }
+ }
+ return null;
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/events/CoreListener.java b/src/main/java/com/googlesource/gerrit/plugins/events/CoreListener.java
index 52a7916..004b48d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/events/CoreListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/events/CoreListener.java
@@ -14,10 +14,16 @@
package com.googlesource.gerrit.plugins.events;
+import com.google.common.base.Supplier;
import com.google.gerrit.common.EventListener;
import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.events.Event;
+import com.google.gerrit.server.events.ProjectNameKeySerializer;
+import com.google.gerrit.server.events.RefUpdatedEvent;
+import com.google.gerrit.server.events.SupplierSerializer;
import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.io.IOException;
@@ -28,7 +34,11 @@
public class CoreListener implements EventListener {
private static Logger log = LoggerFactory.getLogger(CoreListener.class);
- protected static final Gson gson = new Gson();
+ protected static final Gson gson =
+ new GsonBuilder()
+ .registerTypeAdapter(Supplier.class, new SupplierSerializer())
+ .registerTypeAdapter(Project.NameKey.class, new ProjectNameKeySerializer())
+ .create();
protected final DynamicSet<StreamEventListener> listeners;
protected final EventStore store;
diff --git a/test/test_events_plugin.sh b/test/test_events_plugin.sh
index 75b2d34..cc0ded4 100755
--- a/test/test_events_plugin.sh
+++ b/test/test_events_plugin.sh
@@ -201,9 +201,10 @@
# ------------------------- Individual Event Tests ---------------------------
GROUP=visible-events
type=patchset-created
-capture_events
+capture_events 2
ch1=$(create_change --draft "$REF_BRANCH" "$FILE_A") || exit
-result_type "$GROUP" "$type"
+result_type "$GROUP $type" "ref-updated"
+result_type "$GROUP" "$type" 2
type=draft-published
capture_events
@@ -228,8 +229,8 @@
type=change-merged
capture_events 2
submit "$ch1,1"
-result_type "$GROUP" "$type"
-result_type "$GROUP" "ref-updated" 2
+result_type "$GROUP $type" "ref-updated"
+result_type "$GROUP" "$type" 2
# reviewer-added needs to be tested via Rest-API