diff --git a/core/Command/Maintenance/Install.php b/core/Command/Maintenance/Install.php index dffbbd0338..ed1aeeff92 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('' . (string)$error['error'] . ''); - $output->writeln(' -> ' . (string)$error['hint'] . ''); + $output->writeln('' . $error['error'] . ''); + if (isset($error['hint']) && !empty($error['hint'])) { + $output->writeln(' -> ' . $error['hint'] . ''); + } + if (isset($error['exception']) && $error['exception'] instanceof Throwable) { + $this->printThrowable($output, $error['exception']); + } } else { - $output->writeln('' . (string)$error . ''); + $output->writeln('' . $error . ''); } } } + + private function printThrowable(OutputInterface $output, Throwable $t): void { + $output->write('Trace: ' . $t->getTraceAsString() . ''); + if ($t->getPrevious() !== null) { + $output->writeln(''); + $output->writeln('Previous: ' . get_class($t->getPrevious()) . ': ' . $t->getPrevious()->getMessage() . ''); + $this->printThrowable($output, $t->getPrevious()); + } + } } diff --git a/lib/private/Setup.php b/lib/private/Setup.php index 873e82e55d..98cf11e3a8 100644 --- a/lib/private/Setup.php +++ b/lib/private/Setup.php @@ -236,6 +236,7 @@ class Setup { } catch (\OC\HintException $e) { $errors[] = [ 'error' => $e->getMessage(), + 'exception' => $e, 'hint' => $e->getHint(), ]; $htAccessWorking = false; @@ -360,12 +361,14 @@ class Setup { } catch (\OC\DatabaseSetupException $e) { $error[] = [ 'error' => $e->getMessage(), + 'exception' => $e, 'hint' => $e->getHint(), ]; return $error; } catch (Exception $e) { $error[] = [ 'error' => 'Error while trying to create admin user: ' . $e->getMessage(), + 'exception' => $e, 'hint' => '', ]; return $error; @@ -376,6 +379,7 @@ class Setup { } catch (Exception $e) { $error[] = [ 'error' => 'Error while trying to initialise the database: ' . $e->getMessage(), + 'exception' => $e, 'hint' => '', ]; return $error;