diff --git a/core/src/main/java/hudson/matrix/MatrixRun.java b/core/src/main/java/hudson/matrix/MatrixRun.java index 3655720a1f9cc1843af1148d7d34ee084988cf8b..4177ce5a8b3b8b0c4a4a16b4d323d90dfedc980e 100644 --- a/core/src/main/java/hudson/matrix/MatrixRun.java +++ b/core/src/main/java/hudson/matrix/MatrixRun.java @@ -98,8 +98,10 @@ public class MatrixRun extends Build { @Override public Map getBuildVariables() { + Map r = super.getBuildVariables(); // pick up user axes - return new HashMap(getParent().getCombination()); + r.putAll(getParent().getCombination()); + return r; } /** diff --git a/core/src/main/java/hudson/model/AbstractBuild.java b/core/src/main/java/hudson/model/AbstractBuild.java index 0ce8b3250352fa0de874d343199e910743afb195..233559564b7c295482a120a6ba69df09d69de4d3 100644 --- a/core/src/main/java/hudson/model/AbstractBuild.java +++ b/core/src/main/java/hudson/model/AbstractBuild.java @@ -45,6 +45,7 @@ import hudson.tasks.test.AbstractTestResultAction; import hudson.util.AdaptedIterator; import hudson.util.Iterators; import hudson.util.VariableResolver; +import hudson.util.VariableResolver.ByMap; import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; @@ -451,10 +452,24 @@ public abstract class AbstractBuild

,R extends Abs * {@link Builder}s to decide whether it wants to recognize the values * or how to use them. * - * ugly ugly hack. + *

+ * This also includes build parameters if a build is parameterized. + * + * @return + * The returned map is mutable so that subtypes can put more values. */ public Map getBuildVariables() { - return Collections.emptyMap(); + Map r = new HashMap(); + + ParametersAction parameters = getAction(ParametersAction.class); + if(parameters!=null) { + // this is a rather round about way of doing this... + for (ParameterValue p : parameters) { + String v = p.createVariableResolver(this).resolve(p.getName()); + if(v!=null) r.put(p.getName(),v); + } + } + return r; } /** diff --git a/core/src/main/java/hudson/model/ParametersAction.java b/core/src/main/java/hudson/model/ParametersAction.java index 28d1a6c87722377e2816b02731163633715c46d3..511c8aaee386565d32591f259290c1de7338a349 100644 --- a/core/src/main/java/hudson/model/ParametersAction.java +++ b/core/src/main/java/hudson/model/ParametersAction.java @@ -25,6 +25,7 @@ package hudson.model; import hudson.Util; import hudson.tasks.BuildWrapper; +import hudson.tasks.BuildStep; import hudson.util.VariableResolver; import java.util.Collection; @@ -70,6 +71,9 @@ public class ParametersAction implements Action, Iterable { /** * Creates an {@link VariableResolver} that aggregates all the parameters. + * + *

+ * If you are a {@link BuildStep}, most likely you should call {@link AbstractBuild#getBuildVariableResolver()}. */ public VariableResolver createVariableResolver(AbstractBuild build) { VariableResolver[] resolvers = new VariableResolver[parameters.size()+1]; diff --git a/core/src/main/java/hudson/tasks/Ant.java b/core/src/main/java/hudson/tasks/Ant.java index da64cd1f47f44994c6ac8e71507f0605db6803bd..0e87c698ccbfb7a4e88812721fc05890f39668fc 100644 --- a/core/src/main/java/hudson/tasks/Ant.java +++ b/core/src/main/java/hudson/tasks/Ant.java @@ -167,10 +167,7 @@ public class Ant extends Builder { args.addKeyValuePairs("-D",build.getBuildVariables()); VariableResolver vr = build.getBuildVariableResolver(); - ParametersAction parameters = build.getAction(ParametersAction.class); - if(parameters!=null) - vr = parameters.createVariableResolver(build); - + args.addKeyValuePairsFromPropertyString("-D",properties,vr); args.addTokenized(Util.replaceMacro(targets,vr).replaceAll("[\t\r\n]+"," ")); diff --git a/core/src/main/java/hudson/tasks/Maven.java b/core/src/main/java/hudson/tasks/Maven.java index 3da66e107d21aeb7b7a0b7b3132385952d976484..f6aacee3393de285b43740b25b124970b826f9d1 100644 --- a/core/src/main/java/hudson/tasks/Maven.java +++ b/core/src/main/java/hudson/tasks/Maven.java @@ -177,9 +177,6 @@ public class Maven extends Builder { AbstractProject proj = build.getProject(); VariableResolver vr = build.getBuildVariableResolver(); - ParametersAction parameters = build.getAction(ParametersAction.class); - if(parameters!=null) - vr = parameters.createVariableResolver(build); String targets = Util.replaceMacro(this.targets,vr);