提交 cf8ed27b 编写于 作者: K kohsuke

implemented logic to handle multiple builders. This is a potentially breaking...

implemented logic to handle multiple builders. This is a potentially breaking change, but the method that returns a Map no longer makes sense. (issue #37)


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@7992 71c3de6d-444a-0410-be80-ed276b4c234a
上级 d256b12d
......@@ -20,6 +20,7 @@ import hudson.tasks.Publisher;
import java.io.IOException;
import java.util.Map;
import java.util.List;
/**
* One configuration of {@link MatrixProject}.
......@@ -187,7 +188,7 @@ public class MatrixConfiguration extends Project<MatrixConfiguration,MatrixRun>
// inherit build setting from the parent project
//
@Override
public Map<Descriptor<Builder>, Builder> getBuilders() {
public List<Builder> getBuilders() {
return getParent().getBuilders();
}
......
......@@ -3,6 +3,7 @@ package hudson.matrix;
import hudson.CopyOnWrite;
import hudson.FilePath;
import hudson.XmlFile;
import hudson.StructuredForm;
import hudson.triggers.Trigger;
import hudson.model.AbstractProject;
import hudson.model.DependencyGraph;
......@@ -346,8 +347,8 @@ public class MatrixProject extends AbstractProject<MatrixProject,MatrixBuild> im
return r;
}
public Map<Descriptor<Builder>,Builder> getBuilders() {
return Descriptor.toMap(builders);
public List<Builder> getBuilders() {
return Collections.unmodifiableList(builders);
}
public Map<Descriptor<Publisher>,Publisher> getPublishers() {
......@@ -422,7 +423,8 @@ public class MatrixProject extends AbstractProject<MatrixProject,MatrixBuild> im
this.axes = newAxes;
buildWrappers = buildDescribable(req, BuildWrappers.getFor(this), "wrapper");
builders = buildDescribable(req, BuildStepDescriptor.filter(BuildStep.BUILDERS,getClass()), "builder");
builders = Descriptor.newInstancesFromHeteroList(req,
StructuredForm.get(req), "builder", BuildStep.BUILDERS);
publishers = buildDescribable(req, BuildStepDescriptor.filter(BuildStep.PUBLISHERS,getClass()), "publisher");
updateTransientActions(); // to pick up transient actions from builder, publisher, etc.
......
......@@ -304,7 +304,11 @@ public abstract class AbstractBuild<P extends AbstractProject<P,R>,R extends Abs
}
protected final boolean preBuild(BuildListener listener,Map<?,? extends BuildStep> steps) {
for( BuildStep bs : steps.values() )
return preBuild(listener,steps.values());
}
protected final boolean preBuild(BuildListener listener,Collection<? extends BuildStep> steps) {
for( BuildStep bs : steps )
if(!bs.prebuild(AbstractBuild.this,listener))
return false;
return true;
......
......@@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
......@@ -123,7 +124,7 @@ public abstract class Build <P extends Project<P,B>,B extends Build<P,B>>
} finally {
// tear down in reverse order
for( int i=buildEnvironments.size()-1; i>=0; i-- )
buildEnvironments.get(i).tearDown(Build.this,listener);
buildEnvironments.get(i).tearDown((AbstractBuild)Build.this,listener);
buildEnvironments = null;
}
......@@ -140,8 +141,8 @@ public abstract class Build <P extends Project<P,B>,B extends Build<P,B>>
performAllBuildStep(listener, project.getProperties(),false);
}
private boolean build(BuildListener listener, Map<?, Builder> steps) throws IOException, InterruptedException {
for( BuildStep bs : steps.values() )
private boolean build(BuildListener listener, Collection<Builder> steps) throws IOException, InterruptedException {
for( BuildStep bs : steps )
if(!bs.perform(Build.this, launcher, listener))
return false;
return true;
......
......@@ -69,11 +69,7 @@ public abstract class Project<P extends Project<P,B>,B extends Build<P,B>>
return this;
}
public Map<Descriptor<Builder>,Builder> getBuilders() {
return Descriptor.toMap(builders);
}
public List<Builder> getBuildersList() {
public List<Builder> getBuilders() {
return Collections.unmodifiableList(builders);
}
......
......@@ -12,7 +12,7 @@
<f:block>
<f:hetero-list name="builder" hasHeader="true"
descriptors="${h.getBuilderDescriptors(it)}"
items="${it.buildersList}"
items="${it.builders}"
addCaption="${%Add build step}"/>
</f:block>
</f:section>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册