diff --git a/changelog.html b/changelog.html index 8d301a0a00ecc85f8ef3863825976c78d6aea608..4a11ffe342e59a2929ce159b0cf0aa6d29795ad8 100644 --- a/changelog.html +++ b/changelog.html @@ -91,6 +91,9 @@ Upcoming changes
  • Replaced all gif images with png images (transparency support). (issue 3969) +
  • + Boldify names of executed mojos for Freestyle and Maven2/3 jobs using Maven3 in console output. + (issue 9691)

    What's new in 1.412 (2011/05/16)

    diff --git a/core/src/main/java/hudson/tasks/_maven/Maven3MojoNote.java b/core/src/main/java/hudson/tasks/_maven/Maven3MojoNote.java new file mode 100644 index 0000000000000000000000000000000000000000..8dfb2c7d9140705796a8d99e7ba918bf5d80a5ad --- /dev/null +++ b/core/src/main/java/hudson/tasks/_maven/Maven3MojoNote.java @@ -0,0 +1,68 @@ +/* + * The MIT License + * + * Copyright (c) 2010, InfraDNA, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.tasks._maven; + +import hudson.Extension; +import hudson.MarkupText; +import hudson.console.ConsoleAnnotationDescriptor; +import hudson.console.ConsoleAnnotator; +import hudson.console.ConsoleNote; + +import java.util.regex.Pattern; + +/** + * Marks the log line that reports that Maven3 is executing a mojo. + * It'll look something like this: + * + *
    [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ jobConfigHistory ---
    + * + * or + * + *
    [INFO] --- gmaven-plugin:1.0-rc-5:generateTestStubs (test-in-groovy) @ jobConfigHistory ---
    + * + * or + * + *
    [INFO] --- cobertura-maven-plugin:2.4:instrument (report:cobertura) @ sardine ---
    + * + * @author Mirko Friedenhagen + */ +public class Maven3MojoNote extends ConsoleNote { + public Maven3MojoNote() { + } + + @Override + public ConsoleAnnotator annotate(Object context, MarkupText text, int charPos) { + text.addMarkup(7,text.length(),"",""); + return null; + } + + @Extension + public static final class DescriptorImpl extends ConsoleAnnotationDescriptor { + public String getDisplayName() { + return "Maven 3 Mojos"; + } + } + + public static Pattern PATTERN = Pattern.compile("\\[INFO\\] --- .+-plugin:[^:]+:[^ ]+ \\(.+\\) @ .+ ---"); +} diff --git a/core/src/main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java b/core/src/main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java index bb668ff8272ecc28c8c12931edcaa8375786e07b..dfbe86cbc26f1daf5c05713aa6b49656170b6f3e 100644 --- a/core/src/main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java +++ b/core/src/main/java/hudson/tasks/_maven/MavenConsoleAnnotator.java @@ -60,6 +60,10 @@ public class MavenConsoleAnnotator extends LineTransformationOutputStream { if (m.matches()) new MavenMojoNote().encodeTo(out); + m = Maven3MojoNote.PATTERN.matcher(line); + if (m.matches()) + new Maven3MojoNote().encodeTo(out); + m = MavenWarningNote.PATTERN.matcher(line); if (m.find()) new MavenWarningNote().encodeTo(out); diff --git a/core/src/test/java/hudson/tasks/_maven/Maven3MojoNoteTest.java b/core/src/test/java/hudson/tasks/_maven/Maven3MojoNoteTest.java new file mode 100644 index 0000000000000000000000000000000000000000..421632e8683c4e45cb591b20395a7cb2e73a16e3 --- /dev/null +++ b/core/src/test/java/hudson/tasks/_maven/Maven3MojoNoteTest.java @@ -0,0 +1,38 @@ +package hudson.tasks._maven; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import hudson.MarkupText; + +import org.junit.Test; + +public class Maven3MojoNoteTest { + + @Test + public void testAnnotateMavenPlugin() { + check("[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ jobConfigHistory ---", "[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ jobConfigHistory ---"); + } + + @Test + public void testAnnotateCodehausPlugin() { + check("[INFO] --- cobertura-maven-plugin:2.4:instrument (report:cobertura) @ sardine ---", "[INFO] --- cobertura-maven-plugin:2.4:instrument (report:cobertura) @ sardine ---"); + + } + + @Test + public void testAnnotateOtherPlugin() { + check("[INFO] --- gmaven-plugin:1.0-rc-5:generateTestStubs (test-in-groovy) @ jobConfigHistory ---", "[INFO] --- gmaven-plugin:1.0-rc-5:generateTestStubs (test-in-groovy) @ jobConfigHistory ---"); + } + + private void check(final String decorated, final String input) { + assertTrue(input + " does not match" + Maven3MojoNote.PATTERN, Maven3MojoNote.PATTERN.matcher(input).matches()); + assertEquals(decorated, annotate(input)); + } + + private String annotate(String text) { + final MarkupText markupText = new MarkupText(text); + new Maven3MojoNote().annotate(new Object(), markupText, 0); + return markupText.toString(true); + } + +} diff --git a/maven-plugin/src/main/java/hudson/maven/util/ExecutionEventLogger.java b/maven-plugin/src/main/java/hudson/maven/util/ExecutionEventLogger.java index 754b70d5c0a33b6e743e607570f548302800f53a..f27f2ddb84690f328d6992a0bc0d10cbcb8fb440 100644 --- a/maven-plugin/src/main/java/hudson/maven/util/ExecutionEventLogger.java +++ b/maven-plugin/src/main/java/hudson/maven/util/ExecutionEventLogger.java @@ -19,6 +19,9 @@ package hudson.maven.util; * under the License. */ +import hudson.tasks._maven.Maven3MojoNote; + +import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; @@ -261,13 +264,18 @@ public class ExecutionEventLogger { if ( logger.isInfoEnabled() ) { - StringBuilder buffer = new StringBuilder( 128 ); - + final Maven3MojoNote note = new Maven3MojoNote(); + final StringBuilder buffer = new StringBuilder( 128 ); + try { + buffer.append( note.encode() ); + } catch ( IOException e ) { + // As we use only memory buffers this should not happen, ever. + throw new RuntimeException( "Could not encode note?", e ); + } buffer.append( "--- " ); append( buffer, event.getMojoExecution() ); append( buffer, event.getProject() ); buffer.append( " ---" ); - logger.info( "" ); logger.info( buffer.toString() ); }