Add action to close bugs and set resolution in a single request
Change-Id: Ief8880bdcda20d40c48f4a13e8bee720bb5e68d0
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/bz/BugzillaClient.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/bz/BugzillaClient.java
index 6b6609a..715c7b6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/bz/BugzillaClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/bz/BugzillaClient.java
@@ -93,12 +93,30 @@
}
}
+ private void performChainedAction(final Bug bug, final String actionName,
+ final String actionValue) throws BugzillaException,
+ InvalidTransitionException {
+ String[] actionNames = actionName.split("/");
+ String[] actionValues = actionValue.split("/");
+ if (actionNames.length != actionValues.length) {
+ throw new InvalidTransitionException("Number of chained actions does not"
+ + " match number of action values");
+ }
+
+ int i;
+ for (i=0; i<actionNames.length; i++) {
+ performSimpleActionChainable(bug, actionNames[i], actionValues[i]);
+ }
+ }
+
public void performAction(final String bugId, final String actionName,
final String actionValue) throws BugzillaException,
InvalidTransitionException {
Bug bug = getBug(bugId);
if ("status".equals(actionName) || "resolution".equals(actionName)) {
performSimpleActionChainable(bug, actionName, actionValue);
+ } else if ("status/resolution".equals(actionName)) {
+ performChainedAction(bug, actionName, actionValue);
} else {
throw new InvalidTransitionException("Action " + actionName + " is not"
+ " known");
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 81c84ac..bac2ba0 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -128,6 +128,11 @@
RESOLUTION can be any of the values your bugzilla configuration
allows as resolution. Setting the resolution has only an effect if
the associated bug is in a closed state.
+ status/resolution STATUS/RESOLUTION
+ change the associated bug's status to STATUS and resolution to
+ RESOLUTION, where STATUS can be any of the values your bugzilla
+ configuration allows to close bugs, and RESOLUTION can be any of the
+ values your bugzilla configuration allows as resolution.
`<change-action>`
: Action performed on Gerrit change-id, possible values are: