From 368ced0b3a5d0bfa8fb9fb9af0087e517e5250a8 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Tue, 28 Oct 2008 00:50:40 +0000 Subject: [PATCH] Parameter expansion in Ant builder didn't honor build parameters. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@12794 71c3de6d-444a-0410-be80-ed276b4c234a --- .../main/java/hudson/model/AbstractBuild.java | 10 +++++++++- .../java/hudson/model/ParametersAction.java | 4 +++- core/src/main/java/hudson/tasks/Ant.java | 14 ++++++++------ .../main/java/hudson/util/VariableResolver.java | 17 +++++++++++++---- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/hudson/model/AbstractBuild.java b/core/src/main/java/hudson/model/AbstractBuild.java index 41b701caf4..328b982f3d 100644 --- a/core/src/main/java/hudson/model/AbstractBuild.java +++ b/core/src/main/java/hudson/model/AbstractBuild.java @@ -21,6 +21,7 @@ import hudson.tasks.Publisher; import hudson.tasks.test.AbstractTestResultAction; import hudson.util.AdaptedIterator; import hudson.util.Iterators; +import hudson.util.VariableResolver; import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; @@ -416,7 +417,14 @@ public abstract class AbstractBuild

,R extends Abs public Map getBuildVariables() { return Collections.emptyMap(); } - + + /** + * Creates {@link VariableResolver} backed by {@link #getBuildVariables()}. + */ + public final VariableResolver getBuildVariableResolver() { + return new VariableResolver.ByMap(getBuildVariables()); + } + /** * Gets {@link AbstractTestResultAction} associated with this build if any. */ diff --git a/core/src/main/java/hudson/model/ParametersAction.java b/core/src/main/java/hudson/model/ParametersAction.java index 38927577e7..d70ea737af 100644 --- a/core/src/main/java/hudson/model/ParametersAction.java +++ b/core/src/main/java/hudson/model/ParametersAction.java @@ -49,11 +49,13 @@ public class ParametersAction implements Action, Iterable { * Creates an {@link VariableResolver} that aggregates all the parameters. */ public VariableResolver createVariableResolver(AbstractBuild build) { - VariableResolver[] resolvers = new VariableResolver[parameters.size()]; + VariableResolver[] resolvers = new VariableResolver[parameters.size()+1]; int i=0; for (ParameterValue p : parameters) resolvers[i++] = p.createVariableResolver(build); + resolvers[i] = build.getBuildVariableResolver(); + return new VariableResolver.Union(resolvers); } diff --git a/core/src/main/java/hudson/tasks/Ant.java b/core/src/main/java/hudson/tasks/Ant.java index 15aa703d22..52828e48fd 100644 --- a/core/src/main/java/hudson/tasks/Ant.java +++ b/core/src/main/java/hudson/tasks/Ant.java @@ -14,6 +14,7 @@ import hudson.model.TaskListener; import hudson.remoting.Callable; import hudson.util.ArgumentListBuilder; import hudson.util.FormFieldValidator; +import hudson.util.VariableResolver; import net.sf.json.JSONObject; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; @@ -145,6 +146,11 @@ 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); + if (properties != null) { Properties p = new Properties(); try { @@ -157,15 +163,11 @@ public class Ant extends Builder { } for (Entry entry : p.entrySet()) { - args.add("-D" + entry.getKey() + "=" + entry.getValue()); + args.add("-D" + entry.getKey() + "=" + vr.replaceAll(entry.getValue().toString())); } } - String targets = this.targets; - ParametersAction parameters = build.getAction(ParametersAction.class); - if (parameters != null) - targets = parameters.substitute(build,targets); - args.addTokenized(targets.replaceAll("[\t\r\n]+"," ")); + args.addTokenized(vr.replaceAll(targets).replaceAll("[\t\r\n]+"," ")); Map env = build.getEnvVars(); if(ai!=null) diff --git a/core/src/main/java/hudson/util/VariableResolver.java b/core/src/main/java/hudson/util/VariableResolver.java index a6c56242d0..32faca4927 100644 --- a/core/src/main/java/hudson/util/VariableResolver.java +++ b/core/src/main/java/hudson/util/VariableResolver.java @@ -1,5 +1,7 @@ package hudson.util; +import hudson.Util; + import java.util.Map; import java.util.Collection; @@ -9,7 +11,7 @@ import java.util.Collection; * * @author Kohsuke Kawaguchi */ -public interface VariableResolver { +public abstract class VariableResolver { /** * Receives a variable name and obtains the value associated with the name. * @@ -27,7 +29,14 @@ public interface VariableResolver { * Object referenced by the name. * Null if not found. */ - V resolve(String name); + public abstract V resolve(String name); + + /** + * Short for {@code Util.replaceMacro(text,this)} + */ + public final String replaceAll(String text) { + return Util.replaceMacro(text,(VariableResolver)this); + } /** * Empty resolver that always returns null. @@ -41,7 +50,7 @@ public interface VariableResolver { /** * {@link VariableResolver} backed by a {@link Map}. */ - public static final class ByMap implements VariableResolver { + public static final class ByMap extends VariableResolver { private final Map data; public ByMap(Map data) { @@ -56,7 +65,7 @@ public interface VariableResolver { /** * Union of multiple {@link VariableResolver}. */ - public static final class Union implements VariableResolver { + public static final class Union extends VariableResolver { private final VariableResolver[] resolvers; public Union(VariableResolver... resolvers) { -- GitLab