Skip to content

Commit 7ae0cc3

Browse files
printminion-coAndyScherzinger
authored andcommitted
fix(console): write app command loading errors to stderr
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> [skip ci]
1 parent bd58052 commit 7ae0cc3

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

lib/private/Console/Application.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public function loadCommands(
100100
try {
101101
$this->loadCommandsFromInfoXml($info['commands']);
102102
} catch (\Throwable $e) {
103-
$output->writeln('<error>' . $e->getMessage() . '</error>');
103+
$output->getErrorOutput()->writeln('<error>' . $e->getMessage() . '</error>');
104104
$this->logger->error($e->getMessage(), [
105105
'exception' => $e,
106106
]);

0 commit comments

Comments
 (0)