8000 Make the exception output visible even in quiet mode, fixes #15680 by Seldaek · Pull Request #15773 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

Make the exception output visible even in quiet mode, fixes #15680 #15773

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 13, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions src/Symfony/Component/Console/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -703,10 +703,10 @@ public function renderException($e, $output)
$messages[] = '';
$messages[] = '';

$output->writeln($messages, OutputInterface::OUTPUT_RAW);
$output->writeln($messages, OutputInterface::OUTPUT_RAW | OutputInterface::VERBOSITY_QUIET);

if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
$output->writeln('<comment>Exception trace:</comment>');
$output->writeln('<comment>Exception trace:</comment>', OutputInterface::VERBOSITY_QUIET);

// exception related properties
$trace = $e->getTrace();
Expand All @@ -724,18 +724,18 @@ public function renderException($e, $output)
$file = isset($trace[$i]['file']) ? $trace[$i]['file'] : 'n/a';
$line = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';

$output->writeln(sprintf(' %s%s%s() at <info>%s:%s</info>', $class, $type, $function, $file, $line));
$output->writeln(sprintf(' %s%s%s() at <info>%s:%s</info>', $class, $type, $function, $file, $line), OutputInterface::VERBOSITY_QUIET);
}

$output->writeln('');
$output->writeln('');
$output->writeln('', OutputInterface::VERBOSITY_QUIET);
$output->writeln('', OutputInterface::VERBOSITY_QUIET);
}
} while ($e = $e->getPrevious());

if (null !== $this->runningCommand) {
$output->writeln(sprintf('<info>%s</info>', sprintf($this->runningCommand->getSynopsis(), $this->getName())));
$output->writeln('');
$output->writeln('');
$output->writeln(sprintf('<info>%s</info>', sprintf($this->runningCommand->getSynopsis(), $this->getName())), OutputInterface::VERBOSITY_QUIET);
$output->writeln('', OutputInterface::VERBOSITY_QUIET);
$output->writeln('', OutputInterface::VERBOSITY_QUIET);
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/Symfony/Component/Console/Output/NullOutput.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,15 +98,15 @@ public function isDebug()
/**
* {@inheritdoc}
*/
public function writeln($messages, $type = self::OUTPUT_NORMAL)
public function writeln($messages, $options = self::OUTPUT_NORMAL)
{
// do nothing
}

/**
* {@inheritdoc}
*/
public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL)
{
// do nothing
}
Expand Down
20 changes: 12 additions & 8 deletions src/Symfony/Component/Console/Output/Output.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,22 +121,28 @@ public function isDebug()
/**
* {@inheritdoc}
*/
public function writeln($messages, $type = self::OUTPUT_NORMAL)
public function writeln($messages, $options = self::OUTPUT_NORMAL)
{
$this->write($messages, true, $type);
$this->write($messages, true, $options);
}

/**
* {@inheritdoc}
*/
public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL)
{
if (self::VERBOSITY_QUIET === $this->verbosity) {
$messages = (array) $messages;

$types = self::OUTPUT_NORMAL | self::OUTPUT_RAW | self::OUTPUT_PLAIN;
$type = $types & $options ?: self::OUTPUT_NORMAL;

$verbosities = self::VERBOSITY_QUIET | self::VERBOSITY_NORMAL | self::VERBOSITY_VERBOSE | self::VERBOSITY_VERY_VERBOSE | self::VERBOSITY_DEBUG;
$verbosity = $verbosities & $options ?: self::VERBOSITY_NORMAL;

if ($verbosity > $this->getVerbosity()) {
return;
}

$messages = (array) $messages;

foreach ($messages as $message) {
switch ($type) {
case OutputInterface::OUTPUT_NORMAL:
Expand All @@ -147,8 +153,6 @@ public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
case OutputInterface::OUTPUT_PLAIN:
$message = strip_tags($this->formatter->format($message));
break;
default:
throw new \InvalidArgumentException(sprintf('Unknown output type given (%s)', $type));
}

$this->doWrite($message, $newline);
Expand Down
28 changes: 12 additions & 16 deletions src/Symfony/Component/Console/Output/OutputInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,40 +22,36 @@
*/
interface OutputInterface
{
const VERBOSITY_QUIET = 0;
const VERBOSITY_NORMAL = 1;
const VERBOSITY_VERBOSE = 2;
const VERBOSITY_VERY_VERBOSE = 3;
const VERBOSITY_DEBUG = 4;
const VERBOSITY_QUIET = 16;
const VERBOSITY_NORMAL = 32;
const VERBOSITY_VERBOSE = 64;
const VERBOSITY_VERY_VERBOSE = 128;
const VERBOSITY_DEBUG = 256;

const OUTPUT_NORMAL = 0;
const OUTPUT_RAW = 1;
const OUTPUT_PLAIN = 2;
const OUTPUT_NORMAL = 1;
const OUTPUT_RAW = 2;
const OUTPUT_PLAIN = 4;

/**
* Writes a message to the output.
*
* @param string|array $messages The message as an array of lines or a single string
* @param bool $newline Whether to add a newline
* @param int $type The type of output (one of the OUTPUT constants)
*
* @throws \InvalidArgumentException When unknown output type is given
* @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL
*
* @api
*/
public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL);
public function write($messages, $newline = false, $options = 0);

/**
* Writes a message to the output and adds a newline at the end.
*
* @param string|array $messages The message as an array of lines of a single string
* @param int $type The type of output (one of the OUTPUT constants)
*
* @throws \InvalidArgumentException When unknown output type is given
* @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL
*
* @api
*/
public function writeln($messages, $type = self::OUTPUT_NORMAL);
public function writeln($messages, $options = 0);

/**
* Sets the verbosity of the output.
Expand Down
39 changes: 29 additions & 10 deletions src/Symfony/Component/Console/Tests/Output/OutputTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,16 +116,6 @@ public function testWriteDecoratedMessage()
$this->assertEquals("\033[33;41;5mfoo\033[39;49;25m\n", $output->output, '->writeln() decorates the output');
}

/**
* @expectedException \InvalidArgumentException
* @expectedExceptionMessage Unknown output type given (24)
*/
public function testWriteWithInvalidOutputType()
{
$output = new TestOutput();
$output->writeln('<foo>foo</foo>', 24);
}

public function testWriteWithInvalidStyle()
{
$output = new TestOutput();
Expand All @@ -138,6 +128,35 @@ public function testWriteWithInvalidStyle()
$output->writeln('<bar>foo</bar>');
$this->assertEquals("<bar>foo</bar>\n", $output->output, '->writeln() do nothing when a style does not exist');
}

/**
* @dataProvider verbosityProvider
*/
public function testWriteWithVerbosityOption($verbosity, $expected, $msg)
{
$output = new TestOutput();

$output->setVerbosity($verbosity);
$output->clear();
$output->write('1', false);
$output->write('2', false, Output::VERBOSITY_QUIET);
$output->write('3', false, Output::VERBOSITY_NORMAL);
$output->write('4', false, Output::VERBOSITY_VERBOSE);
$output->write('5', false, Output::VERBOSITY_VERY_VERBOSE);
$output->write('6', false, Output::VERBOSITY_DEBUG);
$this->assertEquals($expected, $output->output, $msg);
}

public function verbosityProvider()
{
return array(
array(Output::VERBOSITY_QUIET, '2', '->write() in QUIET mode only outputs when an explicit QUIET verbosity is passed'),
array(Output::VERBOSITY_NORMAL, '123', '->write() in NORMAL mode outputs anything below an explicit VERBOSE verbosity'),
array(Output::VERBOSITY_VERBOSE, '1234', '->write() in VERBOSE mode outputs anything below an explicit VERY_VERBOSE verbosity'),
array(Output::VERBOSITY_VERY_VERBOSE, '12345', '->write() in VERY_VERBOSE mode outputs anything below an explicit DEBUG verbosity'),
array(Output::VERBOSITY_DEBUG, '123456', '->write() in DEBUG mode outputs everything'),
);
}
}

class TestOutput extends Output
Expand Down
0