Skip to content

Commit 8e9efdc

Browse files
fix(console): write app command loading errors to stderr
When an app fails to load its commands from info.xml, the error was written to stdout, while every other diagnostic in loadCommands() uses $output->getErrorOutput(). The command itself then runs normally and exits 0, so the message silently corrupts machine-readable output: $ ./occ app:list --output=json Connection refused {"enabled":{...},"disabled":{...}} $ echo $? 0 Anything piping `occ <cmd> --output=json` into a JSON parser breaks, with no non-zero exit code to detect it by. Observed with notify_push on a setup that has the phpredis extension loaded but no Redis configured: RedisFactory::isAvailable() only checks whether the extension is loaded, so constructing the app's console commands ends up calling pconnect() and throws RedisException. --no-warnings is not a workaround for this, as it sets VERBOSITY_QUIET and suppresses the payload too. Route the message to the error output instead. It is still reported via logger->error() exactly as before. Assisted-by: ClaudeCode:claude-opus-5 Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
1 parent c94ec91 commit 8e9efdc

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

lib/private/Console/Application.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public function loadCommands(
9696
try {
9797
$this->loadCommandsFromInfoXml($info['commands']);
9898
} catch (\Throwable $e) {
99-
$output->writeln('<error>' . $e->getMessage() . '</error>');
99+
$output->getErrorOutput()->writeln('<error>' . $e->getMessage() . '</error>');
100100
$this->logger->error($e->getMessage(), [
101101
'exception' => $e,
102102
]);
@@ -118,7 +118,7 @@ public function loadCommands(
118118
try {
119119
$this->loadCommandsFromInfoXml($info['commands']);
120120
} catch (\Throwable $e) {
121-
$output->writeln('<error>' . $e->getMessage() . '</error>');
121+
$output->getErrorOutput()->writeln('<error>' . $e->getMessage() . '</error>');
122122
$this->logger->error($e->getMessage(), [
123123
'exception' => $e,
124124
]);

0 commit comments

Comments
 (0)