Commit d8308cbf authored by Sylvère Richard's avatar Sylvère Richard Committed by Phillip Webb

Support ANSI color from gradle bootRun

Update the BootRunTask to record the state of the System.console() so
that it can be picked up later by AnsiOutput.

Fixes gh-747
parent ba2ea301
......@@ -54,6 +54,10 @@ public class BootRunTask extends JavaExec {
@Override
public void exec() {
if(System.console() != null) {
// Record that the console is available here for AnsiOutput to detect later
this.getEnvironment().put("spring.output.ansi.console-available", true);
}
addResourcesIfNecessary();
super.exec();
}
......
/*
* Copyright 2012-2013 the original author or authors.
* Copyright 2012-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -30,6 +30,8 @@ public abstract class AnsiOutput {
private static Enabled enabled = Enabled.DETECT;
private static Boolean consoleAvailable;
private static final String OPERATING_SYSTEM_NAME = System.getProperty("os.name")
.toLowerCase();
......@@ -48,6 +50,15 @@ public abstract class AnsiOutput {
AnsiOutput.enabled = enabled;
}
/**
* Sets if the System.console() is know to be available.
* @param consoleAvailable if the console is known to be available or {@code null} to
* use standard detection logic.
*/
public static void setConsoleAvailable(Boolean consoleAvailable) {
AnsiOutput.consoleAvailable = consoleAvailable;
}
static Enabled getEnabled() {
return AnsiOutput.enabled;
}
......@@ -115,7 +126,10 @@ public abstract class AnsiOutput {
private static boolean detectIfEnabled() {
try {
if (System.console() == null) {
if (Boolean.FALSE.equals(consoleAvailable)) {
return false;
}
if ((consoleAvailable == null) && (System.console() == null)) {
return false;
}
return !(OPERATING_SYSTEM_NAME.indexOf("win") >= 0);
......
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -42,6 +42,11 @@ public class AnsiOutputApplicationListener implements
String enabled = resolver.getProperty("enabled");
AnsiOutput.setEnabled(Enum.valueOf(Enabled.class, enabled.toUpperCase()));
}
if (resolver.containsProperty("console-available")) {
AnsiOutput.setConsoleAvailable(resolver.getProperty("console-available",
Boolean.class));
}
}
@Override
......
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -71,7 +71,7 @@ public class AnsiOutputApplicationListenerTests {
}
@Test
public void disabledViaApplcationProperties() throws Exception {
public void disabledViaApplicationProperties() throws Exception {
ConfigurableEnvironment environment = new StandardEnvironment();
EnvironmentTestUtils.addEnvironment(environment, "spring.config.name:ansi");
SpringApplication application = new SpringApplication(Config.class);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment