diff --git a/pom.xml b/pom.xml
index 972d8c89..abb1a71b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,10 +56,22 @@
3.1.0
provided
+
+ org.jenkins-ci.plugins
+ conditional-buildstep
+ 1.3.1
+ true
+
+
+ org.jenkins-ci.tools
+ maven-hpi-plugin
+ 1.97
+ true
+
org.jvnet
@@ -81,6 +93,34 @@
+
+
+
+ org.eclipse.m2e
+ lifecycle-mapping
+ 1.0.0
+
+
+
+
+
+ org.jvnet
+ animal-sniffer
+ [1.2,)
+
+ check
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/hudson/plugins/parameterizedtrigger/Plugin.java b/src/main/java/hudson/plugins/parameterizedtrigger/Plugin.java
index 163bc575..cbc55271 100644
--- a/src/main/java/hudson/plugins/parameterizedtrigger/Plugin.java
+++ b/src/main/java/hudson/plugins/parameterizedtrigger/Plugin.java
@@ -1,16 +1,21 @@
package hudson.plugins.parameterizedtrigger;
import hudson.Extension;
-import hudson.model.Hudson;
import hudson.model.Item;
+import hudson.model.Hudson;
import hudson.model.Project;
import hudson.model.listeners.ItemListener;
import hudson.util.EnumConverter;
+
import java.io.IOException;
+import java.util.List;
import java.util.ListIterator;
import java.util.logging.Level;
import java.util.logging.Logger;
+import jenkins.model.Jenkins;
+
+import org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuildStepHelper;
import org.kohsuke.stapler.Stapler;
public class Plugin extends hudson.Plugin {
@@ -44,6 +49,12 @@ public void onRenamed(Item item, String oldName, String newName) {
changed |= co.onJobRenamed(oldName, newName);
}
}
+
+ //iterate the BuildTriggers within conditional buildsteps
+ if(isConditionalBuildStepInstalled()) {
+ changed |= renameInConditionalBuildStep(p, oldName, newName);
+ }
+
//if something changed, save the project
if (changed){
try {
@@ -88,6 +99,12 @@ public void onDeleted(Item item) {
}
}
}
+
+ //iterate the BuildTriggers within conditional buildsteps
+ if(isConditionalBuildStepInstalled()) {
+ changed |= deleteInConditionalBuildStep(p, oldName);
+ }
+
//if something changed, save the project
if (changed){
try {
@@ -105,5 +122,52 @@ public void onDeleted(Item item) {
}
}
}
+
+ /**
+ * renames the project references within all {@link TriggerBuilder}s which are wrapped by a conditional buildsteps
+ * @param p the project the check
+ * @param oldName the old project name
+ * @param newName the new project name
+ * @return whether a change has been made
+ */
+ private boolean renameInConditionalBuildStep(Project,?> p, String oldName, String newName) {
+ boolean changed = false;
+ final List containedBuilders = ConditionalBuildStepHelper.getContainedBuilders(p, TriggerBuilder.class);
+ for (TriggerBuilder triggerBuilder : containedBuilders) {
+ for (BuildTriggerConfig co : triggerBuilder.getConfigs()){
+ changed |= co.onJobRenamed(oldName, newName);
+ }
+ }
+ return changed;
+ }
+
+ /**
+ * removes the project references within all {@link TriggerBuilder}s which are wrapped by a conditional buildsteps
+ * @param p the project the check
+ * @param oldName the old project name
+ * @return whether a change has been made
+ */
+ private boolean deleteInConditionalBuildStep(Project,?> p, String oldName) {
+ boolean changed = false;
+ final List containedBuilders = ConditionalBuildStepHelper.getContainedBuilders(p, TriggerBuilder.class);
+ for (TriggerBuilder triggerBuilder : containedBuilders) {
+ for (ListIterator bbtc = triggerBuilder.getConfigs().listIterator(); bbtc.hasNext();) {
+ BuildTriggerConfig c = bbtc.next();
+ if (c.onDeleted(oldName)) {
+ changed = true;
+ if (c.getProjects().length() == 0){
+ bbtc.remove();
+ }
+ }
+ }
+ }
+ return changed;
+ }
+
+ }
+
+ public static boolean isConditionalBuildStepInstalled(){
+ final hudson.Plugin plugin = Jenkins.getInstance().getPlugin("conditional-buildstep");
+ return plugin != null ? plugin.getWrapper().isActive() : false;
}
}
diff --git a/src/test/java/hudson/plugins/parameterizedtrigger/test/RenameJobTest.java b/src/test/java/hudson/plugins/parameterizedtrigger/test/RenameJobTest.java
index c8156a9d..6334339d 100644
--- a/src/test/java/hudson/plugins/parameterizedtrigger/test/RenameJobTest.java
+++ b/src/test/java/hudson/plugins/parameterizedtrigger/test/RenameJobTest.java
@@ -31,12 +31,16 @@
import hudson.plugins.parameterizedtrigger.CurrentBuildParameters;
import hudson.plugins.parameterizedtrigger.ResultCondition;
import hudson.plugins.parameterizedtrigger.TriggerBuilder;
-import hudson.tasks.Builder;
+import hudson.tasks.BuildStep;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import org.jenkins_ci.plugins.run_condition.BuildStepRunner;
+import org.jenkins_ci.plugins.run_condition.core.AlwaysRun;
+import org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder;
+import org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder;
import org.jvnet.hudson.test.HudsonTestCase;
public class RenameJobTest extends HudsonTestCase {
@@ -74,6 +78,18 @@ public void testRenameAndDeleteJobMultipleProjects() throws Exception {
//confirm projectA's build step trigger is updated automatically
assertEquals("build step trigger project should be renamed", "projectB-renamed,projectC", projectA.getBuildersList().get(TriggerBuilder.class).getConfigs().get(0).getProjects());
+
+ final List all = projectA.getBuildersList().getAll(ConditionalBuilder.class);
+ final TriggerBuilder wrappedBuilder0 = (TriggerBuilder)all.get(0).getConditionalbuilders().get(0);
+ assertEquals("build step trigger project within first conditionalbuildstep should be renamed", "projectB-renamed,projectC", wrappedBuilder0.getConfigs().get(0).getProjects());
+ final TriggerBuilder wrappedBuilder1 = (TriggerBuilder)all.get(1).getConditionalbuilders().get(0);
+ assertEquals("build step trigger project within second conditionalbuildstep should be renamed", "projectB-renamed,projectC", wrappedBuilder1.getConfigs().get(0).getProjects());
+
+ final List allSingleConditions = projectA.getBuildersList().getAll(SingleConditionalBuilder.class);
+ final TriggerBuilder singleCondTrigger0 = (TriggerBuilder)allSingleConditions.get(0).getBuildStep();
+ assertEquals("build step trigger project within first singleconditionalbuildstep should be renamed", "projectB-renamed,projectC", singleCondTrigger0.getConfigs().get(0).getProjects());
+ final TriggerBuilder singleCondTrigger1 = (TriggerBuilder)allSingleConditions.get(1).getBuildStep();
+ assertEquals("build step trigger project within second singleconditionalbuildstep should be renamed", "projectB-renamed,projectC", singleCondTrigger1.getConfigs().get(0).getProjects());
//confirm projectA's post build trigger is updated automatically
assertEquals("post build trigger project should be renamed", "projectB-renamed,projectC", projectA.getPublishersList().get(BuildTrigger.class).getConfigs().get(0).getProjects());
@@ -85,6 +101,21 @@ public void testRenameAndDeleteJobMultipleProjects() throws Exception {
//confirm projectA's post build trigger is updated automatically:
assertEquals("post build trigger project should be removed", "projectC", projectA.getPublishersList().get(BuildTrigger.class).getConfigs().get(0).getProjects());
+
+ //confirm deletes are reflected within conditional buildsteps too
+ final List allAfterDelete = projectA.getBuildersList().getAll(ConditionalBuilder.class);
+ final TriggerBuilder wrappedBuilderAfterDel0 = (TriggerBuilder)allAfterDelete.get(0).getConditionalbuilders().get(0);
+ assertEquals("build step trigger project within first conditionalbuildstep should be removed", "projectC", wrappedBuilderAfterDel0.getConfigs().get(0).getProjects());
+ final TriggerBuilder wrappedBuilderAfterDel1 = (TriggerBuilder)allAfterDelete.get(1).getConditionalbuilders().get(0);
+ assertEquals("build step trigger project within second conditionalbuildstep should be removed", "projectC", wrappedBuilderAfterDel1.getConfigs().get(0).getProjects());
+
+
+ final List allSingleAfterDelete = projectA.getBuildersList().getAll(SingleConditionalBuilder.class);
+ final TriggerBuilder singleCondTriggerAfterDel0 = (TriggerBuilder)allSingleAfterDelete.get(0).getBuildStep();
+ assertEquals("build step trigger project within first singleconditionalbuildstep should be removed", "projectC", singleCondTriggerAfterDel0.getConfigs().get(0).getProjects());
+ final TriggerBuilder singleCondTriggerAfterDel1 = (TriggerBuilder)allSingleAfterDelete.get(1).getBuildStep();
+ assertEquals("build step trigger project within second singleconditionalbuildstep should be removed", "projectC", singleCondTriggerAfterDel1.getConfigs().get(0).getProjects());
+
}
private Project, ?> createParentProject(String parentJobName, String... childJobNames) throws IOException {
@@ -102,6 +133,16 @@ public void testRenameAndDeleteJobMultipleProjects() throws Exception {
//setup build step trigger
project.getBuildersList().add(new TriggerBuilder(new BlockableBuildTriggerConfig(childJobNamesString.toString(), null, buildParameters)));
+
+ TriggerBuilder tb = new TriggerBuilder(new BlockableBuildTriggerConfig(childJobNamesString.toString(), null, buildParameters));
+ List blist = new ArrayList();
+ blist.add(tb);
+ project.getBuildersList().add(new ConditionalBuilder(new AlwaysRun(), new BuildStepRunner.Run(), blist));
+ project.getBuildersList().add(new ConditionalBuilder(new AlwaysRun(), new BuildStepRunner.Run(), blist));
+
+ TriggerBuilder tb2 = new TriggerBuilder(new BlockableBuildTriggerConfig(childJobNamesString.toString(), null, buildParameters));
+ project.getBuildersList().add(new SingleConditionalBuilder(tb2, new AlwaysRun(), new BuildStepRunner.Run()));
+ project.getBuildersList().add(new SingleConditionalBuilder(tb2, new AlwaysRun(), new BuildStepRunner.Run()));
//setup post build trigger
project.getPublishersList().add(new BuildTrigger(new BuildTriggerConfig(childJobNamesString.toString(), ResultCondition.SUCCESS, new CurrentBuildParameters())));