summaryrefslogtreecommitdiffstats
path: root/core/Command/Upgrade.php
diff options
context:
space:
mode:
Diffstat (limited to 'core/Command/Upgrade.php')
-rw-r--r--core/Command/Upgrade.php148
1 files changed, 69 insertions, 79 deletions
diff --git a/core/Command/Upgrade.php b/core/Command/Upgrade.php
index 0591132e37f..d476b91d6bf 100644
--- a/core/Command/Upgrade.php
+++ b/core/Command/Upgrade.php
@@ -33,17 +33,26 @@
*/
namespace OC\Core\Command;
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventDispatcher;
+use OCP\IConfig;
+use OCP\Util;
use OC\Console\TimestampFormatter;
+use OC\DB\MigratorExecuteSqlEvent;
use OC\Installer;
+use OC\Repair\Events\RepairAdvanceEvent;
+use OC\Repair\Events\RepairErrorEvent;
+use OC\Repair\Events\RepairFinishEvent;
+use OC\Repair\Events\RepairInfoEvent;
+use OC\Repair\Events\RepairStartEvent;
+use OC\Repair\Events\RepairStepEvent;
+use OC\Repair\Events\RepairWarningEvent;
use OC\Updater;
-use OCP\IConfig;
-use OCP\Util;
use Psr\Log\LoggerInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\EventDispatcher\GenericEvent;
class Upgrade extends Command {
public const ERROR_SUCCESS = 0;
@@ -53,14 +62,9 @@ class Upgrade extends Command {
public const ERROR_INVALID_ARGUMENTS = 4;
public const ERROR_FAILURE = 5;
- /** @var IConfig */
- private $config;
-
- /** @var LoggerInterface */
- private $logger;
-
- /** @var Installer */
- private $installer;
+ private IConfig $config;
+ private LoggerInterface $logger;
+ private Installer $installer;
public function __construct(IConfig $config, LoggerInterface $logger, Installer $installer) {
parent::__construct();
@@ -97,84 +101,70 @@ class Upgrade extends Command {
$this->installer
);
- $dispatcher = \OC::$server->getEventDispatcher();
+ /** @var IEventDispatcher $dispatcher */
+ $dispatcher = \OC::$server->get(IEventDispatcher::class);
$progress = new ProgressBar($output);
$progress->setFormat(" %message%\n %current%/%max% [%bar%] %percent:3s%%");
- $listener = function ($event) use ($progress, $output) {
- if ($event instanceof GenericEvent) {
- $message = $event->getSubject();
- if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
- $output->writeln(' Checking table ' . $message);
- } else {
- if (strlen($message) > 60) {
- $message = substr($message, 0, 57) . '...';
- }
- $progress->setMessage($message);
- if ($event[0] === 1) {
- $output->writeln('');
- $progress->start($event[1]);
- }
- $progress->setProgress($event[0]);
- if ($event[0] === $event[1]) {
- $progress->setMessage('Done');
- $progress->finish();
- $output->writeln('');
- }
+ $listener = function (MigratorExecuteSqlEvent $event) use ($progress, $output): void {
+ $message = $event->getSql();
+ if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
+ $output->writeln(' Executing SQL ' . $message);
+ } else {
+ if (strlen($message) > 60) {
+ $message = substr($message, 0, 57) . '...';
}
- }
- };
- $repairListener = function ($event) use ($progress, $output) {
- if (!$event instanceof GenericEvent) {
- return;
- }
- switch ($event->getSubject()) {
- case '\OC\Repair::startProgress':
- $progress->setMessage('Starting ...');
- $output->writeln($event->getArgument(1));
+ $progress->setMessage($message);
+ if ($event->getCurrentStep() === 1) {
$output->writeln('');
- $progress->start($event->getArgument(0));
- break;
- case '\OC\Repair::advance':
- $desc = $event->getArgument(1);
- if (!empty($desc)) {
- $progress->setMessage($desc);
- }
- $progress->advance($event->getArgument(0));
-
- break;
- case '\OC\Repair::finishProgress':
+ $progress->start($event->getMaxStep());
+ }
+ $progress->setProgress($event->getCurrentStep());
+ if ($event->getCurrentStep() === $event->getMaxStep()) {
$progress->setMessage('Done');
$progress->finish();
$output->writeln('');
- break;
- case '\OC\Repair::step':
- if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
- $output->writeln('<info>Repair step: ' . $event->getArgument(0) . '</info>');
- }
- break;
- case '\OC\Repair::info':
- if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
- $output->writeln('<info>Repair info: ' . $event->getArgument(0) . '</info>');
- }
- break;
- case '\OC\Repair::warning':
- $output->writeln('<error>Repair warning: ' . $event->getArgument(0) . '</error>');
- break;
- case '\OC\Repair::error':
- $output->writeln('<error>Repair error: ' . $event->getArgument(0) . '</error>');
- break;
+ }
+ }
+ };
+ $repairListener = function (Event $event) use ($progress, $output): void {
+ if ($event instanceof RepairStartEvent) {
+ $progress->setMessage('Starting ...');
+ $output->writeln($event->getCurrentStepName());
+ $output->writeln('');
+ $progress->start($event->getMaxStep());
+ } elseif ($event instanceof RepairAdvanceEvent) {
+ $desc = $event->getDescription();
+ if (!empty($desc)) {
+ $progress->setMessage($desc);
+ }
+ $progress->advance($event->getIncrement());
+ } elseif ($event instanceof RepairFinishEvent) {
+ $progress->setMessage('Done');
+ $progress->finish();
+ $output->writeln('');
+ } elseif ($event instanceof RepairStepEvent) {
+ if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
+ $output->writeln('<info>Repair step: ' . $event->getStepName() . '</info>');
+ }
+ } elseif ($event instanceof RepairInfoEvent) {
+ if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
+ $output->writeln('<info>Repair info: ' . $event->getMessage() . '</info>');
+ }
+ } elseif ($event instanceof RepairWarningEvent) {
+ $output->writeln('<error>Repair warning: ' . $event->getMessage() . '</error>');
+ } elseif ($event instanceof RepairErrorEvent) {
+ $output->writeln('<error>Repair error: ' . $event->getMessage() . '</error>');
}
};
- $dispatcher->addListener('\OC\DB\Migrator::executeSql', $listener);
- $dispatcher->addListener('\OC\DB\Migrator::checkTable', $listener);
- $dispatcher->addListener('\OC\Repair::startProgress', $repairListener);
- $dispatcher->addListener('\OC\Repair::advance', $repairListener);
- $dispatcher->addListener('\OC\Repair::finishProgress', $repairListener);
- $dispatcher->addListener('\OC\Repair::step', $repairListener);
- $dispatcher->addListener('\OC\Repair::info', $repairListener);
- $dispatcher->addListener('\OC\Repair::warning', $repairListener);
- $dispatcher->addListener('\OC\Repair::error', $repairListener);
+ $dispatcher->addListener(MigratorExecuteSqlEvent::class, $listener);
+ $dispatcher->addListener(RepairStartEvent::class, $repairListener);
+ $dispatcher->addListener(RepairAdvanceEvent::class, $repairListener);
+ $dispatcher->addListener(RepairFinishEvent::class, $repairListener);
+ $dispatcher->addListener(RepairStepEvent::class, $repairListener);
+ $dispatcher->addListener(RepairInfoEvent::class, $repairListener);
+ $dispatcher->addListener(RepairWarningEvent::class, $repairListener);
+ $dispatcher->addListener(RepairErrorEvent::class, $repairListener);
$updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($output) {