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