提交 368ced0b 编写于 作者: K kohsuke

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
上级 a7523b9d
......@@ -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<P extends AbstractProject<P,R>,R extends Abs
public Map<String,String> getBuildVariables() {
return Collections.emptyMap();
}
/**
* Creates {@link VariableResolver} backed by {@link #getBuildVariables()}.
*/
public final VariableResolver<String> getBuildVariableResolver() {
return new VariableResolver.ByMap<String>(getBuildVariables());
}
/**
* Gets {@link AbstractTestResultAction} associated with this build if any.
*/
......
......@@ -49,11 +49,13 @@ public class ParametersAction implements Action, Iterable<ParameterValue> {
* Creates an {@link VariableResolver} that aggregates all the parameters.
*/
public VariableResolver<String> 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<String>(resolvers);
}
......
......@@ -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<String> 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<Object,Object> 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<String,String> env = build.getEnvVars();
if(ai!=null)
......
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<V> {
public abstract class VariableResolver<V> {
/**
* Receives a variable name and obtains the value associated with the name.
*
......@@ -27,7 +29,14 @@ public interface VariableResolver<V> {
* 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<V> {
/**
* {@link VariableResolver} backed by a {@link Map}.
*/
public static final class ByMap<V> implements VariableResolver<V> {
public static final class ByMap<V> extends VariableResolver<V> {
private final Map<String,V> data;
public ByMap(Map<String, V> data) {
......@@ -56,7 +65,7 @@ public interface VariableResolver<V> {
/**
* Union of multiple {@link VariableResolver}.
*/
public static final class Union<V> implements VariableResolver<V> {
public static final class Union<V> extends VariableResolver<V> {
private final VariableResolver<? extends V>[] resolvers;
public Union(VariableResolver<? extends V>... resolvers) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册