diff --git a/src/main/java/com/sonyericsson/rebuild/RebuildAction.java b/src/main/java/com/sonyericsson/rebuild/RebuildAction.java index 605f3a2..23ad343 100644 --- a/src/main/java/com/sonyericsson/rebuild/RebuildAction.java +++ b/src/main/java/com/sonyericsson/rebuild/RebuildAction.java @@ -204,7 +204,7 @@ public void doIndex(StaplerRequest request, StaplerResponse response) throws IOE Run currentBuild = request.findAncestorObject(Run.class); if (currentBuild != null) { ParametersAction paramAction = currentBuild.getAction(ParametersAction.class); - if (paramAction != null) { + if (paramAction != null && paramAction.getParameters().size() > 0) { RebuildSettings settings = (RebuildSettings)getProject().getProperty(RebuildSettings.class); if (settings != null && settings.getAutoRebuild()) { parameterizedRebuild(currentBuild, response); @@ -254,6 +254,7 @@ public void nonParameterizedRebuild(Run currentBuild, StaplerResponse getProject().checkPermission(Item.BUILD); List actions = constructRebuildCause(build, null); + fillOtherBuildActions(currentBuild, actions); Hudson.getInstance().getQueue().schedule((Queue.Task) currentBuild.getParent(), 0, actions); response.sendRedirect("../../"); } @@ -298,6 +299,7 @@ public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws Servl } List actions = constructRebuildCause(build, new ParametersAction(values)); + fillOtherBuildActions(build, actions); Hudson.getInstance().getQueue().schedule((Queue.Task) build.getParent(), 0, actions); rsp.sendRedirect("../../"); @@ -487,4 +489,18 @@ public RebuildParameterPage getRebuildParameterPage(ParameterValue value) { // So Jelly fallback could occur. return null; } + + /** + * Method for copying of old build parameters (such as git revision from git plugin) + * + * @param build old build for parameters extraction + * @param actions list for filling + */ + private void fillOtherBuildActions(Run build, List actions) { + for (Action a: build.getActions()) { + if (!(a instanceof CauseAction) && !(a instanceof ParametersAction)) { + actions.add(a); + } + } + } } diff --git a/src/test/java/com/sonyericsson/rebuild/RebuildValidatorTest.java b/src/test/java/com/sonyericsson/rebuild/RebuildValidatorTest.java index 58d51db..da262af 100644 --- a/src/test/java/com/sonyericsson/rebuild/RebuildValidatorTest.java +++ b/src/test/java/com/sonyericsson/rebuild/RebuildValidatorTest.java @@ -47,6 +47,7 @@ import org.kohsuke.stapler.DataBoundConstructor; import java.io.IOException; +import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutionException; @@ -393,6 +394,55 @@ public void testRebuildSupportedUnknownParameterValue() throws Exception { page.asText().contains("This is a mark for test")); } + /** + * Treats build as non-parameterized if it has empty ParametersAction + * + * @throws Exception + * Exception + */ + public void testStartRebuildWithEmptyParametersAction() + throws Exception { + FreeStyleProject project = createFreeStyleProject(); + + project.scheduleBuild2(0, new Cause.UserIdCause(), + new ParametersAction()) + .get(); + HtmlPage page = createWebClient().getPage(project, + "1"); + page.getAnchorByText("Rebuild").click(); + + assertEquals(2, project.getBuilds().size()); + assertBuildStatusSuccess(project.getLastBuild()); + } + + /** + * Creates a new freestyle project and build with an non-parameter action. + * Verify that rebuild has a copy of this action. + * + * @throws Exception + * Exception + */ + public void testCopyingUnknownActionToNewBuild() throws Exception { + FreeStyleProject project = createFreeStyleProject(); + + Action action = new SupportedUnknownAction(); + Build build = project.scheduleBuild2(0, new Cause.RemoteCause("host", "note"), action).get(); + + while (project.isBuilding()) { + Thread.sleep(DELAY); + } + + HtmlPage page = createWebClient().getPage(build); + page.getAnchorByText("Rebuild").click(); + + assertEquals(2, project.getBuilds().size()); + assertBuildStatusSuccess(project.getLastBuild()); + + SupportedUnknownAction rebuildAction = + project.getLastBuild().getAction(SupportedUnknownAction.class); + assertNotNull(rebuildAction); + } + /** * A parameter value rebuild plugin does not know. */ @@ -480,6 +530,14 @@ public String getDisplayName() { } + public static class SupportedUnknownAction implements Action { + private static final long serialVersionUID = 1014662680565914673L; + + public String getUrlName() { return "/example"; } + public String getDisplayName() { return "unknown action"; } + public String getIconFileName() { return "icon.png"; } + } + /** * Provides a view for {@link SupportedUnknownParameterValue} when * rebuilding.