Skip to content

Commit f56ecf9

Browse files
authored
Merge pull request #33640 from nextcloud/fix/fix-symfony-event-typing
Port Repair and Migrator events to IEventDispatcher
2 parents 6664801 + 0b9a878 commit f56ecf9

26 files changed

Lines changed: 682 additions & 395 deletions

build/psalm-baseline.xml

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3946,23 +3946,6 @@
39463946
<code>$path</code>
39473947
</InvalidReturnStatement>
39483948
</file>
3949-
<file src="lib/private/Updater.php">
3950-
<InvalidScalarArgument occurrences="13">
3951-
<code>0</code>
3952-
<code>0</code>
3953-
<code>0</code>
3954-
<code>0</code>
3955-
<code>0</code>
3956-
<code>0</code>
3957-
<code>0</code>
3958-
<code>0</code>
3959-
<code>0</code>
3960-
<code>1</code>
3961-
<code>1</code>
3962-
<code>1</code>
3963-
<code>1</code>
3964-
</InvalidScalarArgument>
3965-
</file>
39663949
<file src="lib/private/Updater/VersionCheck.php">
39673950
<InvalidScalarArgument occurrences="2">
39683951
<code>microtime(true)</code>

core/Command/Maintenance/Repair.php

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,31 @@
3030

3131
use Exception;
3232
use OCP\App\IAppManager;
33+
use OCP\EventDispatcher\Event;
34+
use OCP\EventDispatcher\IEventDispatcher;
3335
use OCP\IConfig;
36+
use OC\Repair\Events\RepairAdvanceEvent;
37+
use OC\Repair\Events\RepairErrorEvent;
38+
use OC\Repair\Events\RepairFinishEvent;
39+
use OC\Repair\Events\RepairInfoEvent;
40+
use OC\Repair\Events\RepairStartEvent;
41+
use OC\Repair\Events\RepairStepEvent;
42+
use OC\Repair\Events\RepairWarningEvent;
3443
use Symfony\Component\Console\Command\Command;
3544
use Symfony\Component\Console\Helper\ProgressBar;
3645
use Symfony\Component\Console\Input\InputInterface;
3746
use Symfony\Component\Console\Input\InputOption;
3847
use Symfony\Component\Console\Output\OutputInterface;
39-
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
40-
use Symfony\Component\EventDispatcher\GenericEvent;
4148

4249
class Repair extends Command {
4350
protected \OC\Repair $repair;
4451
protected IConfig $config;
45-
private EventDispatcherInterface $dispatcher;
52+
private IEventDispatcher $dispatcher;
4653
private ProgressBar $progress;
4754
private OutputInterface $output;
4855
private IAppManager $appManager;
4956

50-
public function __construct(\OC\Repair $repair, IConfig $config, EventDispatcherInterface $dispatcher, IAppManager $appManager) {
57+
public function __construct(\OC\Repair $repair, IConfig $config, IEventDispatcher $dispatcher, IAppManager $appManager) {
5158
$this->repair = $repair;
5259
$this->config = $config;
5360
$this->dispatcher = $dispatcher;
@@ -102,47 +109,36 @@ protected function execute(InputInterface $input, OutputInterface $output): int
102109

103110
$this->progress = new ProgressBar($output);
104111
$this->output = $output;
105-
$this->dispatcher->addListener('\OC\Repair::startProgress', [$this, 'handleRepairFeedBack']);
106-
$this->dispatcher->addListener('\OC\Repair::advance', [$this, 'handleRepairFeedBack']);
107-
$this->dispatcher->addListener('\OC\Repair::finishProgress', [$this, 'handleRepairFeedBack']);
108-
$this->dispatcher->addListener('\OC\Repair::step', [$this, 'handleRepairFeedBack']);
109-
$this->dispatcher->addListener('\OC\Repair::info', [$this, 'handleRepairFeedBack']);
110-
$this->dispatcher->addListener('\OC\Repair::warning', [$this, 'handleRepairFeedBack']);
111-
$this->dispatcher->addListener('\OC\Repair::error', [$this, 'handleRepairFeedBack']);
112+
$this->dispatcher->addListener(RepairStartEvent::class, [$this, 'handleRepairFeedBack']);
113+
$this->dispatcher->addListener(RepairAdvanceEvent::class, [$this, 'handleRepairFeedBack']);
114+
$this->dispatcher->addListener(RepairFinishEvent::class, [$this, 'handleRepairFeedBack']);
115+
$this->dispatcher->addListener(RepairStepEvent::class, [$this, 'handleRepairFeedBack']);
116+
$this->dispatcher->addListener(RepairInfoEvent::class, [$this, 'handleRepairFeedBack']);
117+
$this->dispatcher->addListener(RepairWarningEvent::class, [$this, 'handleRepairFeedBack']);
118+
$this->dispatcher->addListener(RepairErrorEvent::class, [$this, 'handleRepairFeedBack']);
112119

113120
$this->repair->run();
114121

115122
$this->config->setSystemValue('maintenance', $maintenanceMode);
116123
return 0;
117124
}
118125

119-
public function handleRepairFeedBack($event) {
120-
if (!$event instanceof GenericEvent) {
121-
return;
122-
}
123-
switch ($event->getSubject()) {
124-
case '\OC\Repair::startProgress':
125-
$this->progress->start($event->getArgument(0));
126-
break;
127-
case '\OC\Repair::advance':
128-
$this->progress->advance($event->getArgument(0));
129-
break;
130-
case '\OC\Repair::finishProgress':
131-
$this->progress->finish();
132-
$this->output->writeln('');
133-
break;
134-
case '\OC\Repair::step':
135-
$this->output->writeln(' - ' . $event->getArgument(0));
136-
break;
137-
case '\OC\Repair::info':
138-
$this->output->writeln(' - ' . $event->getArgument(0));
139-
break;
140-
case '\OC\Repair::warning':
141-
$this->output->writeln(' - WARNING: ' . $event->getArgument(0));
142-
break;
143-
case '\OC\Repair::error':
144-
$this->output->writeln('<error> - ERROR: ' . $event->getArgument(0) . '</error>');
145-
break;
126+
public function handleRepairFeedBack(Event $event): void {
127+
if ($event instanceof RepairStartEvent) {
128+
$this->progress->start($event->getMaxStep());
129+
} elseif ($event instanceof RepairAdvanceEvent) {
130+
$this->progress->advance($event->getIncrement());
131+
} elseif ($event instanceof RepairFinishEvent) {
132+
$this->progress->finish();
133+
$this->output->writeln('');
134+
} elseif ($event instanceof RepairStepEvent) {
135+
$this->output->writeln('<info> - ' . $event->getStepName() . '</info>');
136+
} elseif ($event instanceof RepairInfoEvent) {
137+
$this->output->writeln('<info> - ' . $event->getMessage() . '</info>');
138+
} elseif ($event instanceof RepairWarningEvent) {
139+
$this->output->writeln('<comment> - WARNING: ' . $event->getMessage()) . '</comment>';
140+
} elseif ($event instanceof RepairErrorEvent) {
141+
$this->output->writeln('<error> - ERROR: ' . $event->getMessage() . '</error>');
146142
}
147143
}
148144
}

core/Command/Upgrade.php

Lines changed: 66 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,26 @@
3333
*/
3434
namespace OC\Core\Command;
3535

36+
use OCP\EventDispatcher\Event;
37+
use OCP\EventDispatcher\IEventDispatcher;
38+
use OCP\IConfig;
39+
use OCP\Util;
3640
use OC\Console\TimestampFormatter;
41+
use OC\DB\MigratorExecuteSqlEvent;
3742
use OC\Installer;
43+
use OC\Repair\Events\RepairAdvanceEvent;
44+
use OC\Repair\Events\RepairErrorEvent;
45+
use OC\Repair\Events\RepairFinishEvent;
46+
use OC\Repair\Events\RepairInfoEvent;
47+
use OC\Repair\Events\RepairStartEvent;
48+
use OC\Repair\Events\RepairStepEvent;
49+
use OC\Repair\Events\RepairWarningEvent;
3850
use OC\Updater;
39-
use OCP\IConfig;
40-
use OCP\Util;
4151
use Psr\Log\LoggerInterface;
4252
use Symfony\Component\Console\Command\Command;
4353
use Symfony\Component\Console\Helper\ProgressBar;
4454
use Symfony\Component\Console\Input\InputInterface;
4555
use Symfony\Component\Console\Output\OutputInterface;
46-
use Symfony\Component\EventDispatcher\GenericEvent;
4756

4857
class Upgrade extends Command {
4958
public const ERROR_SUCCESS = 0;
@@ -92,84 +101,70 @@ protected function execute(InputInterface $input, OutputInterface $output): int
92101
$this->installer
93102
);
94103

95-
$dispatcher = \OC::$server->getEventDispatcher();
104+
/** @var IEventDispatcher $dispatcher */
105+
$dispatcher = \OC::$server->get(IEventDispatcher::class);
96106
$progress = new ProgressBar($output);
97107
$progress->setFormat(" %message%\n %current%/%max% [%bar%] %percent:3s%%");
98-
$listener = function ($event) use ($progress, $output) {
99-
if ($event instanceof GenericEvent) {
100-
$message = $event->getSubject();
101-
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
102-
$output->writeln(' Checking table ' . $message);
103-
} else {
104-
if (strlen($message) > 60) {
105-
$message = substr($message, 0, 57) . '...';
106-
}
107-
$progress->setMessage($message);
108-
if ($event[0] === 1) {
109-
$output->writeln('');
110-
$progress->start($event[1]);
111-
}
112-
$progress->setProgress($event[0]);
113-
if ($event[0] === $event[1]) {
114-
$progress->setMessage('Done');
115-
$progress->finish();
116-
$output->writeln('');
117-
}
108+
$listener = function (MigratorExecuteSqlEvent $event) use ($progress, $output): void {
109+
$message = $event->getSql();
110+
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
111+
$output->writeln(' Executing SQL ' . $message);
112+
} else {
113+
if (strlen($message) > 60) {
114+
$message = substr($message, 0, 57) . '...';
118115
}
119-
}
120-
};
121-
$repairListener = function ($event) use ($progress, $output) {
122-
if (!$event instanceof GenericEvent) {
123-
return;
124-
}
125-
switch ($event->getSubject()) {
126-
case '\OC\Repair::startProgress':
127-
$progress->setMessage('Starting ...');
128-
$output->writeln($event->getArgument(1));
116+
$progress->setMessage($message);
117+
if ($event->getCurrentStep() === 1) {
129118
$output->writeln('');
130-
$progress->start($event->getArgument(0));
131-
break;
132-
case '\OC\Repair::advance':
133-
$desc = $event->getArgument(1);
134-
if (!empty($desc)) {
135-
$progress->setMessage($desc);
136-
}
137-
$progress->advance($event->getArgument(0));
138-
139-
break;
140-
case '\OC\Repair::finishProgress':
119+
$progress->start($event->getMaxStep());
120+
}
121+
$progress->setProgress($event->getCurrentStep());
122+
if ($event->getCurrentStep() === $event->getMaxStep()) {
141123
$progress->setMessage('Done');
142124
$progress->finish();
143125
$output->writeln('');
144-
break;
145-
case '\OC\Repair::step':
146-
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
147-
$output->writeln('<info>Repair step: ' . $event->getArgument(0) . '</info>');
148-
}
149-
break;
150-
case '\OC\Repair::info':
151-
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
152-
$output->writeln('<info>Repair info: ' . $event->getArgument(0) . '</info>');
153-
}
154-
break;
155-
case '\OC\Repair::warning':
156-
$output->writeln('<error>Repair warning: ' . $event->getArgument(0) . '</error>');
157-
break;
158-
case '\OC\Repair::error':
159-
$output->writeln('<error>Repair error: ' . $event->getArgument(0) . '</error>');
160-
break;
126+
}
127+
}
128+
};
129+
$repairListener = function (Event $event) use ($progress, $output): void {
130+
if ($event instanceof RepairStartEvent) {
131+
$progress->setMessage('Starting ...');
132+
$output->writeln($event->getCurrentStepName());
133+
$output->writeln('');
134+
$progress->start($event->getMaxStep());
135+
} elseif ($event instanceof RepairAdvanceEvent) {
136+
$desc = $event->getDescription();
137+
if (!empty($desc)) {
138+
$progress->setMessage($desc);
139+
}
140+
$progress->advance($event->getIncrement());
141+
} elseif ($event instanceof RepairFinishEvent) {
142+
$progress->setMessage('Done');
143+
$progress->finish();
144+
$output->writeln('');
145+
} elseif ($event instanceof RepairStepEvent) {
146+
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
147+
$output->writeln('<info>Repair step: ' . $event->getStepName() . '</info>');
148+
}
149+
} elseif ($event instanceof RepairInfoEvent) {
150+
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
151+
$output->writeln('<info>Repair info: ' . $event->getMessage() . '</info>');
152+
}
153+
} elseif ($event instanceof RepairWarningEvent) {
154+
$output->writeln('<error>Repair warning: ' . $event->getMessage() . '</error>');
155+
} elseif ($event instanceof RepairErrorEvent) {
156+
$output->writeln('<error>Repair error: ' . $event->getMessage() . '</error>');
161157
}
162158
};
163159

164-
$dispatcher->addListener('\OC\DB\Migrator::executeSql', $listener);
165-
$dispatcher->addListener('\OC\DB\Migrator::checkTable', $listener);
166-
$dispatcher->addListener('\OC\Repair::startProgress', $repairListener);
167-
$dispatcher->addListener('\OC\Repair::advance', $repairListener);
168-
$dispatcher->addListener('\OC\Repair::finishProgress', $repairListener);
169-
$dispatcher->addListener('\OC\Repair::step', $repairListener);
170-
$dispatcher->addListener('\OC\Repair::info', $repairListener);
171-
$dispatcher->addListener('\OC\Repair::warning', $repairListener);
172-
$dispatcher->addListener('\OC\Repair::error', $repairListener);
160+
$dispatcher->addListener(MigratorExecuteSqlEvent::class, $listener);
161+
$dispatcher->addListener(RepairStartEvent::class, $repairListener);
162+
$dispatcher->addListener(RepairAdvanceEvent::class, $repairListener);
163+
$dispatcher->addListener(RepairFinishEvent::class, $repairListener);
164+
$dispatcher->addListener(RepairStepEvent::class, $repairListener);
165+
$dispatcher->addListener(RepairInfoEvent::class, $repairListener);
166+
$dispatcher->addListener(RepairWarningEvent::class, $repairListener);
167+
$dispatcher->addListener(RepairErrorEvent::class, $repairListener);
173168

174169

175170
$updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($output) {

0 commit comments

Comments
 (0)