提交 23e794c3 编写于 作者: K kohsuke

Do not store SurefireArchiver (which brings in its testResult) to MavenBuild....

Do not store SurefireArchiver (which brings in its testResult) to MavenBuild. This wastes a lot of disk and memory.

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@33653 71c3de6d-444a-0410-be80-ed276b4c234a
上级 d4c9e40b
......@@ -73,7 +73,7 @@ public class MavenBuild extends AbstractMavenBuild<MavenModule,MavenBuild> {
* {@link MavenReporter}s that will contribute project actions.
* Can be null if there's none.
*/
/*package*/ List<MavenReporter> projectActionReporters;
/*package*/ List<MavenProjectActionBuilder> projectActionReporters;
/**
* {@link ExecutedMojo}s that record what was run.
......@@ -184,10 +184,22 @@ public class MavenBuild extends AbstractMavenBuild<MavenModule,MavenBuild> {
public void registerAsProjectAction(MavenReporter reporter) {
if(projectActionReporters==null)
projectActionReporters = new ArrayList<MavenReporter>();
projectActionReporters = new ArrayList<MavenProjectActionBuilder>();
projectActionReporters.add(reporter);
}
public void registerAsProjectAction(MavenProjectActionBuilder builder) {
if(projectActionReporters==null)
projectActionReporters = new ArrayList<MavenProjectActionBuilder>();
projectActionReporters.add(builder);
}
public List<MavenProjectActionBuilder> getProjectActionBuilders() {
if(projectActionReporters==null)
return Collections.emptyList();
return Collections.unmodifiableList(projectActionReporters);
}
public List<ExecutedMojo> getExecutedMojos() {
if(executedMojos==null)
return Collections.emptyList();
......@@ -374,6 +386,10 @@ public class MavenBuild extends AbstractMavenBuild<MavenModule,MavenBuild> {
MavenBuild.this.registerAsProjectAction(reporter);
}
public void registerAsProjectAction(MavenProjectActionBuilder builder) {
MavenBuild.this.registerAsProjectAction(builder);
}
public void registerAsAggregatedProjectAction(MavenReporter reporter) {
MavenModuleSetBuild pb = getParentBuild();
if(pb!=null)
......
......@@ -128,6 +128,18 @@ public interface MavenBuildProxy {
*/
void registerAsProjectAction(MavenReporter reporter);
/**
* Nominates that the reporter will contribute a project action
* for this build by using {@link MavenReporter#getProjectActions(MavenModule)}.
*
* <p>
* The specified {@link MavenReporter} object will be transferred to the master
* and will become a persisted part of the {@link MavenBuild}.
*
* @since 1.372
*/
void registerAsProjectAction(MavenProjectActionBuilder builder);
/**
* Nominates that the reporter will contribute a project action
* for this build by using {@link MavenReporter#getAggregatedProjectAction(MavenModuleSet)}.
......@@ -214,6 +226,10 @@ public interface MavenBuildProxy {
core.registerAsProjectAction(reporter);
}
public void registerAsProjectAction(MavenProjectActionBuilder builder) {
core.registerAsProjectAction(builder);
}
public void registerAsAggregatedProjectAction(MavenReporter reporter) {
core.registerAsAggregatedProjectAction(reporter);
}
......
......@@ -412,10 +412,10 @@ public final class MavenModule extends AbstractMavenProject<MavenModule,MavenBui
@Override
protected void addTransientActionsFromBuild(MavenBuild build, Set<Class> added) {
if(build==null) return;
List<MavenReporter> list = build.projectActionReporters;
List<MavenProjectActionBuilder> list = build.projectActionReporters;
if(list==null) return;
for (MavenReporter step : list) {
for (MavenProjectActionBuilder step : list) {
if(!added.add(step.getClass())) continue; // already added
try {
transientActions.addAll(step.getProjectActions(this));
......
package hudson.maven;
import hudson.model.AbstractProject;
import hudson.model.Action;
import hudson.tasks.BuildStep;
import java.util.Collection;
/**
* Can contribute to project actions.
*
*
* @author Kohsuke Kawaguchi
* @see MavenBuildProxy#registerAsProjectAction(MavenProjectActionBuilder)
*/
public interface MavenProjectActionBuilder {
/**
* Equivalent of {@link BuildStep#getProjectActions(AbstractProject)}.
*
* <p>
* Registers a transient action to {@link MavenModule} when it's rendered.
* This is useful if you'd like to display an action at the module level.
*
* <p>
* Since this contributes a transient action, the returned {@link Action}
* will not be serialized.
*
* <p>
* For this method to be invoked, call
* {@link MavenBuildProxy#registerAsProjectAction(MavenProjectActionBuilder)} during the build.
*
* @return
* can be empty but never null.
* @since 1.341
*/
public Collection<? extends Action> getProjectActions(MavenModule module);
}
......@@ -97,7 +97,7 @@ import java.util.Collections;
* @author Kohsuke Kawaguchi
* @see MavenReporters
*/
public abstract class MavenReporter implements Describable<MavenReporter>, ExtensionPoint, Serializable {
public abstract class MavenReporter implements Describable<MavenReporter>, ExtensionPoint, Serializable, MavenProjectActionBuilder {
/**
* Called before the actual maven2 execution begins.
*
......
......@@ -30,6 +30,7 @@ import hudson.maven.MavenBuildProxy;
import hudson.maven.MavenBuildProxy.BuildCallable;
import hudson.maven.MavenBuilder;
import hudson.maven.MavenModule;
import hudson.maven.MavenProjectActionBuilder;
import hudson.maven.MavenReporter;
import hudson.maven.MavenReporterDescriptor;
import hudson.maven.MojoInfo;
......@@ -113,7 +114,7 @@ public class SurefireArchiver extends MavenReporter {
sr.setResult(result,listener);
if(result.getFailCount()>0)
build.setResult(Result.UNSTABLE);
build.registerAsProjectAction(SurefireArchiver.this);
build.registerAsProjectAction(new FactoryImpl());
return result.getFailCount();
}
});
......@@ -128,9 +129,13 @@ public class SurefireArchiver extends MavenReporter {
return true;
}
public Collection<? extends Action> getProjectActions(MavenModule module) {
return Collections.singleton(new TestResultProjectAction(module));
/**
* Part of the serialization data attached to {@link MavenBuild}.
*/
static final class FactoryImpl implements MavenProjectActionBuilder {
public Collection<? extends Action> getProjectActions(MavenModule module) {
return Collections.singleton(new TestResultProjectAction(module));
}
}
private boolean isSurefireTest(MojoInfo mojo) {
......
package hudson.maven.reporters;
import hudson.maven.MavenBuild;
import hudson.maven.MavenModuleSet;
import hudson.maven.MavenModuleSetBuild;
import hudson.maven.MavenProjectActionBuilder;
import hudson.maven.reporters.SurefireArchiver.FactoryImpl;
import hudson.model.Result;
import org.jvnet.hudson.test.ExtractResourceSCM;
import org.jvnet.hudson.test.HudsonTestCase;
/**
* @author Kohsuke Kawaguchi
*/
public class SurefireArchiverTest extends HudsonTestCase {
public void testSerialization() throws Exception {
configureDefaultMaven();
MavenModuleSet m = createMavenProject();
m.setScm(new ExtractResourceSCM(getClass().getResource("../maven-surefire-unstable.zip")));
m.setGoals("install");
MavenModuleSetBuild b = m.scheduleBuild2(0).get();
assertBuildStatus(Result.UNSTABLE, b);
MavenBuild mb = b.getModuleLastBuilds().values().iterator().next();
boolean foundFactory=false,foundSurefire=false;
for (MavenProjectActionBuilder x : mb.getProjectActionBuilders()) {
if (x instanceof FactoryImpl)
foundFactory = true;
if (x instanceof SurefireArchiver)
foundSurefire = true;
}
assertTrue(foundFactory);
assertFalse(foundSurefire);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册