Add some more smarts around --debug
--verbose seems to be only for CLI logging (so really only for dependency resolution). --debug is interpreted by SpringApplication but up to now has been extracted and deleted from the command line by the CommandRunner. This change makes --debug set a System property *and* pass it down to the application (if used with -- separator). Fixes gh-266
This commit is contained in:
parent
607b371706
commit
c5584b490a
|
@ -158,6 +158,9 @@ public class CommandRunner implements Iterable<Command> {
|
|||
public int runAndHandleErrors(String... args) {
|
||||
String[] argsWithoutDebugFlags = removeDebugFlags(args);
|
||||
boolean debug = argsWithoutDebugFlags.length != args.length;
|
||||
if (debug) {
|
||||
System.setProperty("debug", "true");
|
||||
}
|
||||
try {
|
||||
run(argsWithoutDebugFlags);
|
||||
return 0;
|
||||
|
@ -173,10 +176,14 @@ public class CommandRunner implements Iterable<Command> {
|
|||
|
||||
private String[] removeDebugFlags(String[] args) {
|
||||
List<String> rtn = new ArrayList<String>(args.length);
|
||||
boolean appArgsDetected = false;
|
||||
for (String arg : args) {
|
||||
if (!("-d".equals(arg) || "--debug".equals(arg))) {
|
||||
rtn.add(arg);
|
||||
// Allow apps to have a -d argument
|
||||
appArgsDetected |= "--".equals(arg);
|
||||
if (("-d".equals(arg) || "--debug".equals(arg)) && !appArgsDetected) {
|
||||
continue;
|
||||
}
|
||||
rtn.add(arg);
|
||||
}
|
||||
return rtn.toArray(new String[rtn.size()]);
|
||||
}
|
||||
|
|
|
@ -77,7 +77,8 @@ public class RunCommand extends OptionParsingCommand {
|
|||
this.watchOption = option("watch", "Watch the specified file for changes");
|
||||
this.editOption = option(asList("edit", "e"),
|
||||
"Open the file with the default system editor");
|
||||
this.verboseOption = option(asList("verbose", "v"), "Verbose logging");
|
||||
this.verboseOption = option(asList("verbose", "v"),
|
||||
"Verbose logging of dependency resolution");
|
||||
this.quietOption = option(asList("quiet", "q"), "Quiet logging");
|
||||
}
|
||||
|
||||
|
@ -141,12 +142,12 @@ public class RunCommand extends OptionParsingCommand {
|
|||
|
||||
@Override
|
||||
public Level getLogLevel() {
|
||||
if (getOptions().has(RunOptionHandler.this.verboseOption)) {
|
||||
return Level.FINEST;
|
||||
}
|
||||
if (getOptions().has(RunOptionHandler.this.quietOption)) {
|
||||
return Level.OFF;
|
||||
}
|
||||
if (getOptions().has(RunOptionHandler.this.verboseOption)) {
|
||||
return Level.FINEST;
|
||||
}
|
||||
return Level.INFO;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Copyright 2012-2013 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.cli;
|
||||
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.springframework.boot.cli.command.run.RunCommand;
|
||||
import org.springframework.boot.cli.util.OutputCapture;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*/
|
||||
public class CommandRunnerIntegrationTests {
|
||||
|
||||
@Rule
|
||||
public OutputCapture output = new OutputCapture();
|
||||
|
||||
@Test
|
||||
public void debugAddsAutoconfigReport() {
|
||||
CommandRunner runner = new CommandRunner("spring");
|
||||
runner.addCommand(new RunCommand());
|
||||
// -d counts as "debug" for the spring command, but not for the
|
||||
// LoggingApplicationListener
|
||||
runner.runAndHandleErrors("run", "samples/app.groovy", "-d");
|
||||
assertTrue(this.output.toString().contains("Negative matches:"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void debugSwitchedOffForAppArgs() {
|
||||
CommandRunner runner = new CommandRunner("spring");
|
||||
runner.addCommand(new RunCommand());
|
||||
runner.runAndHandleErrors("run", "samples/app.groovy", "--", "-d");
|
||||
assertFalse(this.output.toString().contains("Negative matches:"));
|
||||
}
|
||||
}
|
|
@ -29,6 +29,7 @@ import org.mockito.MockitoAnnotations;
|
|||
import org.springframework.boot.cli.command.Command;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.BDDMockito.willThrow;
|
||||
|
@ -63,6 +64,7 @@ public class CommandRunnerTests {
|
|||
@After
|
||||
public void close() {
|
||||
Thread.currentThread().setContextClassLoader(this.loader);
|
||||
System.clearProperty("debug");
|
||||
}
|
||||
|
||||
@Before
|
||||
|
@ -115,6 +117,15 @@ public class CommandRunnerTests {
|
|||
this.commandRunner.run("missing");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void appArguments() throws Exception {
|
||||
this.commandRunner.runAndHandleErrors("command", "--", "--debug", "bar");
|
||||
verify(this.regularCommand).run("--", "--debug", "bar");
|
||||
// When handled by the command itself it shouldn't cause the system property to be
|
||||
// set
|
||||
assertEquals(null, System.getProperty("debug"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handlesSuccess() throws Exception {
|
||||
int status = this.commandRunner.runAndHandleErrors("command");
|
||||
|
@ -150,6 +161,7 @@ public class CommandRunnerTests {
|
|||
public void handlesExceptionWithDashD() throws Exception {
|
||||
willThrow(new RuntimeException()).given(this.regularCommand).run();
|
||||
int status = this.commandRunner.runAndHandleErrors("command", "-d");
|
||||
assertEquals("true", System.getProperty("debug"));
|
||||
assertThat(status, equalTo(1));
|
||||
assertThat(this.calls, equalTo((Set<Call>) EnumSet.of(Call.ERROR_MESSAGE,
|
||||
Call.PRINT_STACK_TRACE)));
|
||||
|
@ -159,6 +171,7 @@ public class CommandRunnerTests {
|
|||
public void handlesExceptionWithDashDashDebug() throws Exception {
|
||||
willThrow(new RuntimeException()).given(this.regularCommand).run();
|
||||
int status = this.commandRunner.runAndHandleErrors("command", "--debug");
|
||||
assertEquals("true", System.getProperty("debug"));
|
||||
assertThat(status, equalTo(1));
|
||||
assertThat(this.calls, equalTo((Set<Call>) EnumSet.of(Call.ERROR_MESSAGE,
|
||||
Call.PRINT_STACK_TRACE)));
|
||||
|
|
Loading…
Reference in New Issue