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)