diff --git a/changelog.html b/changelog.html
index 190d2d58eb760265f6333cafb0e7b1fee66529d5..ab971e8823ba2c085e5c137cc7f33ac4b6fb475a 100644
--- a/changelog.html
+++ b/changelog.html
@@ -61,6 +61,9 @@ Upcoming changes
Maven build failure wasn't describing errors like Maven CLI does.
(issue 15025)
+
+ MavenModuleSetBuild.getResult
is expensive.
+ (issue 18895)
Revisited fix to be compatible for plugins.
(issue 18119)
diff --git a/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java b/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java
index 4e369efbe1eae02238b839c1dcfeb152fbbf78ae..93ed9929b35ac7d026f898fa0ea52c31cbac0be8 100644
--- a/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java
+++ b/maven-plugin/src/main/java/hudson/maven/MavenModuleSetBuild.java
@@ -53,7 +53,6 @@ import hudson.model.Result;
import hudson.model.Run;
import hudson.model.StringParameterDefinition;
import hudson.model.TaskListener;
-import hudson.remoting.Callable;
import hudson.remoting.VirtualChannel;
import hudson.scm.ChangeLogSet;
import hudson.tasks.BuildStep;
@@ -93,7 +92,6 @@ import jenkins.mvn.SettingsProvider;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.artifact.versioning.ComparableVersion;
-import org.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingException;
import org.codehaus.plexus.util.PathTool;
@@ -136,6 +134,7 @@ public class MavenModuleSetBuild extends AbstractMavenBuild actions = getActions();
diff --git a/test/src/main/java/org/jvnet/hudson/test/RunLoadCounter.java b/test/src/main/java/org/jvnet/hudson/test/RunLoadCounter.java
index 84a0d18b3ddfa9393c4849b89593d1bad23e50ff..43ef1f737924e27592cbf0bbc33181ed99396db4 100644
--- a/test/src/main/java/org/jvnet/hudson/test/RunLoadCounter.java
+++ b/test/src/main/java/org/jvnet/hudson/test/RunLoadCounter.java
@@ -50,12 +50,16 @@ public final class RunLoadCounter {
/**
* Prepares a new project to be measured.
- * Call this before starting builds.
+ * Usually called before starting builds, but may also be called retroactively.
* @param project a project of any kind
* @throws IOException if preparations fail
*/
public static void prepare(AbstractProject,?> project) throws IOException {
project.getPublishersList().add(new MarkerAdder());
+ for (AbstractBuild,?> build : project._getRuns()) {
+ Marker.add(build);
+ build.save();
+ }
}
/**
@@ -97,6 +101,10 @@ public final class RunLoadCounter {
@Restricted(NoExternalUse.class)
public static final class Marker implements RunAction {
+ static void add(AbstractBuild,?> build) {
+ build.addAction(new Marker(build.getParent().getFullName(), build.getNumber()));
+ }
+
private final String project;
private final int build;
@@ -137,7 +145,7 @@ public final class RunLoadCounter {
public static final class MarkerAdder extends Notifier {
@Override public boolean perform(AbstractBuild, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {
- build.addAction(new Marker(build.getParent().getFullName(), build.getNumber()));
+ Marker.add(build);
return true;
}
diff --git a/test/src/test/java/hudson/maven/MavenBuildSurefireFailedTest.java b/test/src/test/java/hudson/maven/MavenBuildSurefireFailedTest.java
index 70be3e2918a5f05b1c4707e5d7fb253faa53c403..1bcece674b0ee9897e7b0676a5c49fc02ab042f8 100755
--- a/test/src/test/java/hudson/maven/MavenBuildSurefireFailedTest.java
+++ b/test/src/test/java/hudson/maven/MavenBuildSurefireFailedTest.java
@@ -2,10 +2,12 @@ package hudson.maven;
import hudson.model.Result;
import hudson.tasks.Shell;
+import java.util.concurrent.Callable;
import org.jvnet.hudson.test.Bug;
import org.jvnet.hudson.test.ExtractResourceSCM;
import org.jvnet.hudson.test.HudsonTestCase;
+import org.jvnet.hudson.test.RunLoadCounter;
/**
* @author Olivier Lamy
@@ -24,10 +26,19 @@ public class MavenBuildSurefireFailedTest extends HudsonTestCase {
@Bug(8415)
public void testMaven2Failed() throws Exception {
configureDefaultMaven();
- MavenModuleSet m = createMavenProject();
+ final MavenModuleSet m = createMavenProject();
m.setGoals( "test -Dmaven.test.failure.ignore=false" );
m.setScm(new ExtractResourceSCM(getClass().getResource("maven-multimodule-unit-failure.zip")));
assertBuildStatus(Result.FAILURE, m.scheduleBuild2(0).get());
+ // JENKINS-18895:
+ MavenModule failing = m.getModule("com.mycompany.app:my-app");
+ assertEquals(Result.FAILURE, failing.getLastBuild().getResult());
+ RunLoadCounter.prepare(failing);
+ assertEquals(Result.FAILURE, RunLoadCounter.assertMaxLoads(failing, 0, new Callable() {
+ @Override public Result call() throws Exception {
+ return m.getLastBuild().getResult();
+ }
+ }));
}
@Bug(8415)