This is an automated email from the ASF dual-hosted git repository. bmarwell pushed a commit to branch MNG-7032_versioncolours in repository https://gitbox.apache.org/repos/asf/maven.git
commit 923ac90b7a96cb1cb34544667aef5e230f870a72 Author: Benjamin Marwell <bmarw...@apache.org> AuthorDate: Wed Dec 23 17:31:34 2020 +0100 [MNG-7032] do not print colours for --version when in batch mode. --- .../org/apache/maven/cli/CLIReportingUtils.java | 1 + .../main/java/org/apache/maven/cli/MavenCli.java | 21 +++++++++++-- .../java/org/apache/maven/cli/MavenCliTest.java | 36 +++++++++++++++++++++- 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java index 97a2db6..e3719bc 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java @@ -29,6 +29,7 @@ import java.util.Locale; import java.util.Properties; import org.apache.commons.lang3.StringUtils; +import org.apache.maven.shared.utils.logging.MessageUtils; import org.codehaus.plexus.util.Os; import org.slf4j.Logger; diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java index fd650f0..1005fdf 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java @@ -433,6 +433,8 @@ public class MavenCli if ( cliRequest.commandLine.hasOption( CLIManager.VERSION ) ) { + // MNG-7032: Also disable colours if in batch mode + disableColorsInLogfileOrBatch( cliRequest ); System.out.println( CLIReportingUtils.showVersion() ); throw new ExitException( 0 ); } @@ -518,10 +520,9 @@ public class MavenCli throw new IllegalArgumentException( "Invalid color configuration option [" + styleColor + "]. Supported values are (auto|always|never)." ); } - else if ( cliRequest.commandLine.hasOption( CLIManager.BATCH_MODE ) - || cliRequest.commandLine.hasOption( CLIManager.LOG_FILE ) ) + else { - MessageUtils.setColorEnabled( false ); + disableColorsInLogfileOrBatch( cliRequest ); } // LOG STREAMS @@ -569,6 +570,20 @@ public class MavenCli } } + /** + * Disables the colour output in the case that the {@link CLIManager#BATCH_MODE} option + * or {@link CLIManager#LOG_FILE} option was given (or both). In those cases, ANSI output is never feasible. + * @param cliRequest the arguments as request pojo. + */ + private void disableColorsInLogfileOrBatch( CliRequest cliRequest ) + { + if ( cliRequest.commandLine.hasOption( CLIManager.BATCH_MODE ) + || cliRequest.commandLine.hasOption( CLIManager.LOG_FILE ) ) + { + MessageUtils.setColorEnabled( false ); + } + } + private void version( CliRequest cliRequest ) { if ( cliRequest.debug || cliRequest.commandLine.hasOption( CLIManager.SHOW_VERSION ) ) diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java index e60ee9d..13d44d1 100644 --- a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java +++ b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java @@ -37,7 +37,10 @@ import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.PrintStream; +import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.List; @@ -57,7 +60,6 @@ import org.codehaus.plexus.DefaultPlexusContainer; import org.codehaus.plexus.PlexusContainer; import org.eclipse.sisu.plexus.PlexusBeanModule; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; @@ -466,6 +468,38 @@ public class MavenCliTest is( "." + File.separatorChar + "custom2" ) ); } + /** + * MNG-7032: Disable colours for {@code --version} if {@code --batch-mode} is also given. + * @throws Exception cli invocation. + */ + @Test + public void testVersionStringWithoutAnsi() throws Exception + { + // given + // - request with version and batch mode + CliRequest cliRequest = new CliRequest( new String[] { + "--version", + "--batch-mode" + }, null ); + ByteArrayOutputStream systemOut = new ByteArrayOutputStream(); + PrintStream oldOut = System.out; + System.setOut( new PrintStream( systemOut ) ); + + // when + try { + cli.cli( cliRequest ); + } catch ( MavenCli.ExitException exitException ) { + // expected + } finally { + // restore sysout + System.setOut( oldOut ); + } + String versionOut = new String( systemOut.toByteArray(), StandardCharsets.UTF_8 ); + + // then + assertEquals( MessageUtils.stripAnsiCodes( versionOut ), versionOut ); + } + private MavenProject createMavenProject( String groupId, String artifactId ) { MavenProject project = new MavenProject();