Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2021-01-07 22:04:04 +0300
committerChristoph Wurst <christoph@winzerhof-wurst.at>2021-01-07 22:11:25 +0300
commitf1921364d692a521c5bf5860ce453bae3f9facae (patch)
tree7e52141f0a4d909e95468c3a41b16589561912a6 /core/Command/Maintenance
parent5020c73d15cc58cacfe8bebf87dba2652c7ea5c1 (diff)
Print an exception trace for setup exceptions
Right now any setup error will just result in the exception message being printed. In some cases this doesn't give any insights into what went wrong. This adds some dedicated logic to print the exception trace and any previous exceptions to the CLI. Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'core/Command/Maintenance')
-rw-r--r--core/Command/Maintenance/Install.php22
1 files changed, 19 insertions, 3 deletions
diff --git a/core/Command/Maintenance/Install.php b/core/Command/Maintenance/Install.php
index dffbbd03382..ed1aeeff922 100644
--- a/core/Command/Maintenance/Install.php
+++ b/core/Command/Maintenance/Install.php
@@ -43,6 +43,8 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\Question;
+use Throwable;
+use function get_class;
class Install extends Command {
@@ -201,11 +203,25 @@ class Install extends Command {
protected function printErrors(OutputInterface $output, $errors) {
foreach ($errors as $error) {
if (is_array($error)) {
- $output->writeln('<error>' . (string)$error['error'] . '</error>');
- $output->writeln('<info> -> ' . (string)$error['hint'] . '</info>');
+ $output->writeln('<error>' . $error['error'] . '</error>');
+ if (isset($error['hint']) && !empty($error['hint'])) {
+ $output->writeln('<info> -> ' . $error['hint'] . '</info>');
+ }
+ if (isset($error['exception']) && $error['exception'] instanceof Throwable) {
+ $this->printThrowable($output, $error['exception']);
+ }
} else {
- $output->writeln('<error>' . (string)$error . '</error>');
+ $output->writeln('<error>' . $error . '</error>');
}
}
}
+
+ private function printThrowable(OutputInterface $output, Throwable $t): void {
+ $output->write('<info>Trace: ' . $t->getTraceAsString() . '</info>');
+ if ($t->getPrevious() !== null) {
+ $output->writeln('');
+ $output->writeln('<info>Previous: ' . get_class($t->getPrevious()) . ': ' . $t->getPrevious()->getMessage() . '</info>');
+ $this->printThrowable($output, $t->getPrevious());
+ }
+ }
}