Commit e4aab1cf authored by Phillip Webb's avatar Phillip Webb

Merge pull request #2736 from Nowheresly/fix747

* fix747:
  Support ANSI color from gradle bootRun
parents ba2ea301 d8308cbf
...@@ -54,6 +54,10 @@ public class BootRunTask extends JavaExec { ...@@ -54,6 +54,10 @@ public class BootRunTask extends JavaExec {
@Override @Override
public void exec() { 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(); addResourcesIfNecessary();
super.exec(); 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -30,6 +30,8 @@ public abstract class AnsiOutput { ...@@ -30,6 +30,8 @@ public abstract class AnsiOutput {
private static Enabled enabled = Enabled.DETECT; private static Enabled enabled = Enabled.DETECT;
private static Boolean consoleAvailable;
private static final String OPERATING_SYSTEM_NAME = System.getProperty("os.name") private static final String OPERATING_SYSTEM_NAME = System.getProperty("os.name")
.toLowerCase(); .toLowerCase();
...@@ -48,6 +50,15 @@ public abstract class AnsiOutput { ...@@ -48,6 +50,15 @@ public abstract class AnsiOutput {
AnsiOutput.enabled = enabled; 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() { static Enabled getEnabled() {
return AnsiOutput.enabled; return AnsiOutput.enabled;
} }
...@@ -115,7 +126,10 @@ public abstract class AnsiOutput { ...@@ -115,7 +126,10 @@ public abstract class AnsiOutput {
private static boolean detectIfEnabled() { private static boolean detectIfEnabled() {
try { try {
if (System.console() == null) { if (Boolean.FALSE.equals(consoleAvailable)) {
return false;
}
if ((consoleAvailable == null) && (System.console() == null)) {
return false; return false;
} }
return !(OPERATING_SYSTEM_NAME.indexOf("win") >= 0); 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -42,6 +42,11 @@ public class AnsiOutputApplicationListener implements ...@@ -42,6 +42,11 @@ public class AnsiOutputApplicationListener implements
String enabled = resolver.getProperty("enabled"); String enabled = resolver.getProperty("enabled");
AnsiOutput.setEnabled(Enum.valueOf(Enabled.class, enabled.toUpperCase())); AnsiOutput.setEnabled(Enum.valueOf(Enabled.class, enabled.toUpperCase()));
} }
if (resolver.containsProperty("console-available")) {
AnsiOutput.setConsoleAvailable(resolver.getProperty("console-available",
Boolean.class));
}
} }
@Override @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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -71,7 +71,7 @@ public class AnsiOutputApplicationListenerTests { ...@@ -71,7 +71,7 @@ public class AnsiOutputApplicationListenerTests {
} }
@Test @Test
public void disabledViaApplcationProperties() throws Exception { public void disabledViaApplicationProperties() throws Exception {
ConfigurableEnvironment environment = new StandardEnvironment(); ConfigurableEnvironment environment = new StandardEnvironment();
EnvironmentTestUtils.addEnvironment(environment, "spring.config.name:ansi"); EnvironmentTestUtils.addEnvironment(environment, "spring.config.name:ansi");
SpringApplication application = new SpringApplication(Config.class); 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