Handle WIP and private state change events
Extract changer, change, and issues based on the commit message.
Change-Id: I76cf7440f77e9a1646fe60f533a61356217644e1
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java b/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java
index a004f6f..552065e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java
@@ -29,8 +29,10 @@
import com.google.gerrit.server.events.ChangeRestoredEvent;
import com.google.gerrit.server.events.CommentAddedEvent;
import com.google.gerrit.server.events.PatchSetCreatedEvent;
+import com.google.gerrit.server.events.PrivateStateChangedEvent;
import com.google.gerrit.server.events.RefEvent;
import com.google.gerrit.server.events.RefUpdatedEvent;
+import com.google.gerrit.server.events.WorkInProgressStateChangedEvent;
import com.google.gerrit.server.project.NoSuchProjectException;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectState;
@@ -82,6 +84,8 @@
|| event instanceof ChangeMergedEvent
|| event instanceof ChangeAbandonedEvent
|| event instanceof ChangeRestoredEvent
+ || event instanceof PrivateStateChangedEvent
+ || event instanceof WorkInProgressStateChangedEvent
|| event instanceof RefUpdatedEvent) {
return isEnabled(event.getProjectNameKey(), event.getRefName());
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/base/util/IssueExtractor.java b/src/main/java/com/googlesource/gerrit/plugins/its/base/util/IssueExtractor.java
index fd37249..cb577c5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/base/util/IssueExtractor.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/base/util/IssueExtractor.java
@@ -126,7 +126,26 @@
public Map<String, Set<String>> getIssueIds(String projectName, String commitId) {
Map<String, Set<String>> ret = Maps.newHashMap();
String commitMessage = commitMessageFetcher.fetchGuarded(projectName, commitId);
+ addIssueIdsFromCommitMessage(ret, commitMessage);
+ return ret;
+ }
+ /**
+ * Gets issues from a commit message.
+ *
+ * @param commitMessage The commit message string.
+ * @return A mapping, whose keys are issue ids and whose values is a set of places where the issue
+ * occurs. Each issue occurs at least in "somewhere". Issues from the first line get tagged
+ * with an occurrence "subject". Issues in the last block get tagged with "footer". Issues
+ * occurring between "subject" and "footer" get tagged with "body".
+ */
+ public Map<String, Set<String>> getIssueIdsFromCommitMessage(String commitMessage) {
+ Map<String, Set<String>> ret = Maps.newHashMap();
+ addIssueIdsFromCommitMessage(ret, commitMessage);
+ return ret;
+ }
+
+ private void addIssueIdsFromCommitMessage(Map<String, Set<String>> ret, String commitMessage) {
addIssuesOccurrence(commitMessage, "somewhere", ret);
String[] lines = commitMessage.split("\n");
@@ -190,7 +209,6 @@
addIssuesOccurrence(footer, "footer", ret);
}
}
- return ret;
}
/**
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/base/util/PropertyExtractor.java b/src/main/java/com/googlesource/gerrit/plugins/its/base/util/PropertyExtractor.java
index a59de25..e165baf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/base/util/PropertyExtractor.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/base/util/PropertyExtractor.java
@@ -28,8 +28,10 @@
import com.google.gerrit.server.events.CommentAddedEvent;
import com.google.gerrit.server.events.PatchSetCreatedEvent;
import com.google.gerrit.server.events.PatchSetEvent;
+import com.google.gerrit.server.events.PrivateStateChangedEvent;
import com.google.gerrit.server.events.RefEvent;
import com.google.gerrit.server.events.RefUpdatedEvent;
+import com.google.gerrit.server.events.WorkInProgressStateChangedEvent;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.its.base.workflow.RefEventProperties;
import java.util.Collections;
@@ -132,6 +134,28 @@
return extractMapFrom(event, common);
}
+ private Map<String, Set<String>> extractFrom(
+ WorkInProgressStateChangedEvent event, Map<String, String> common) {
+ common.putAll(propertyAttributeExtractor.extractFrom(event.changer.get(), "changer"));
+ return extractFrom((ChangeEvent) event, common);
+ }
+
+ private Map<String, Set<String>> extractFrom(
+ PrivateStateChangedEvent event, Map<String, String> common) {
+ common.putAll(propertyAttributeExtractor.extractFrom(event.changer.get(), "changer"));
+ return extractFrom((ChangeEvent) event, common);
+ }
+
+ private Map<String, Set<String>> extractFrom(ChangeEvent event, Map<String, String> common) {
+ common.put("event-type", event.type);
+ ChangeAttribute change = event.change.get();
+ common.putAll(propertyAttributeExtractor.extractFrom(change));
+ common.put("refName", event.refName);
+
+ // Got no patch set information, extract from commit message.
+ return issueExtractor.getIssueIdsFromCommitMessage(change.commitMessage);
+ }
+
/**
* A set of properties extracted from an event.
*
@@ -197,6 +221,10 @@
associations = extractFrom((PatchSetCreatedEvent) event, common);
} else if (event instanceof RefUpdatedEvent) {
associations = extractFrom((RefUpdatedEvent) event, common);
+ } else if (event instanceof PrivateStateChangedEvent) {
+ associations = extractFrom((PrivateStateChangedEvent) event, common);
+ } else if (event instanceof WorkInProgressStateChangedEvent) {
+ associations = extractFrom((WorkInProgressStateChangedEvent) event, common);
}
Set<Map<String, String>> ret = new HashSet<>();
diff --git a/src/main/resources/Documentation/config-rulebase-common.md b/src/main/resources/Documentation/config-rulebase-common.md
index 4d970b6..17baf77 100644
--- a/src/main/resources/Documentation/config-rulebase-common.md
+++ b/src/main/resources/Documentation/config-rulebase-common.md
@@ -235,6 +235,8 @@
* [CommentAddedEvent](#commentaddedevent)
* [PatchSetCreatedEvent](#patchSetcreatedevent)
* [RefUpdatedEvent](#refupdatedevent)
+* [WorkInProgressStateChangedEvent](#workinprogressstatechangedevent)
+* [PrivateStateChangedEvent](#privatestatechangedevent)
* [Common properties for events on a change](#common-properties-for-events-on-a-change)
* [Common properties for events on a patch set](#common-properties-for-events-on-a-patch-set)
@@ -441,6 +443,40 @@
`submitterUsername`
: username of the user that updated the ref.
+### WorkInProgressStateChangedEvent
+
+`event`
+: `com.google.gerrit.server.events.WorkInProgressStateChangedEvent`
+
+`event-type`
+: `wip-state-changed`
+
+`changerEmail`
+: email address of the user that changed the WIP state
+
+`submitterName`
+: name of the user that changed the WIP state
+
+`changerUsername`
+: username of the user that changed the WIP state
+
+### PrivateStateChangedEvent
+
+`event`
+: `com.google.gerrit.server.events.PrivateStateChangedEvent`
+
+`event-type`
+: `private-state-changed`
+
+`changerEmail`
+: email address of the user that changed the private state
+
+`submitterName`
+: name of the user that changed the private state
+
+`changerUsername`
+: username of the user that changed the private state
+
### Common properties for events on a change
`branch`