diff options
-rw-r--r-- | core/ajax/update.php | 5 | ||||
-rw-r--r-- | core/command/upgrade.php | 38 | ||||
-rw-r--r-- | lib/private/db/migrator.php | 21 |
3 files changed, 45 insertions, 19 deletions
diff --git a/core/ajax/update.php b/core/ajax/update.php index 8ed0fad57e9..631a8a7871c 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -61,6 +61,11 @@ if (OC::checkUpgrade(false)) { $eventSource->send('success', (string)$l->t('[%d / %d]: %s', [$event[0], $event[1], $event->getSubject()])); } }); + $dispatcher->addListener('\OC\DB\Migrator::checkTable', function($event) use ($eventSource, $l) { + if ($event instanceof GenericEvent) { + $eventSource->send('success', (string)$l->t('[%d / %d]: Checking table %s', [$event[0], $event[1], $event->getSubject()])); + } + }); $updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($eventSource, $l) { $eventSource->send('success', (string)$l->t('Turned on maintenance mode')); diff --git a/core/command/upgrade.php b/core/command/upgrade.php index c2de699d862..cbb1f26f938 100644 --- a/core/command/upgrade.php +++ b/core/command/upgrade.php @@ -139,26 +139,32 @@ class Upgrade extends Command { $updater->setSkip3rdPartyAppsDisable($skip3rdPartyAppsDisable); $dispatcher = \OC::$server->getEventDispatcher(); $progress = new ProgressBar($output); - $progress->setFormat("%message%\n %current%/%max% [%bar%] %percent:3s%%"); - $dispatcher->addListener('\OC\DB\Migrator::executeSql', function($event) use ($progress, $output) { + $progress->setFormat(" %message%\n %current%/%max% [%bar%] %percent:3s%%"); + $listener = function($event) use ($progress, $output) { if ($event instanceof GenericEvent) { - if ($event[0] === 1) { - $output->writeln(''); - $progress->start($event[1]); - } $message = $event->getSubject(); - if (strlen($message) > 30) { - $message = substr($message, 0, 27) . '...'; - } - $progress->setMessage($message); - $progress->setProgress($event[0]); - $progress->display(); - if ($event[0] === $event[1]) { - $progress->finish(); - $output->writeln(''); + 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(''); + } } } - }); + }; + $dispatcher->addListener('\OC\DB\Migrator::executeSql', $listener); + $dispatcher->addListener('\OC\DB\Migrator::checkTable', $listener); $updater->listen('\OC\Updater', 'maintenanceEnabled', function () use($output) { $output->writeln('<info>Turned on maintenance mode</info>'); diff --git a/lib/private/db/migrator.php b/lib/private/db/migrator.php index f477da3bad0..8b8a34d9865 100644 --- a/lib/private/db/migrator.php +++ b/lib/private/db/migrator.php @@ -56,6 +56,9 @@ class Migrator { /** @var EventDispatcher */ private $dispatcher; + /** @var bool */ + private $noEmit = false; + /** * @param \Doctrine\DBAL\Connection|Connection $connection * @param ISecureRandom $random @@ -76,6 +79,7 @@ class Migrator { * @param \Doctrine\DBAL\Schema\Schema $targetSchema */ public function migrate(Schema $targetSchema) { + $this->noEmit = true; $this->applySchema($targetSchema); } @@ -100,21 +104,22 @@ class Migrator { * @throws \OC\DB\MigrationException */ public function checkMigrate(Schema $targetSchema) { - /** - * @var \Doctrine\DBAL\Schema\Table[] $tables - */ + $this->noEmit = true; + /**@var \Doctrine\DBAL\Schema\Table[] $tables */ $tables = $targetSchema->getTables(); $filterExpression = $this->getFilterExpression(); $this->connection->getConfiguration()-> setFilterSchemaAssetsExpression($filterExpression); $existingTables = $this->connection->getSchemaManager()->listTableNames(); + $step = 0; foreach ($tables as $table) { if (strpos($table->getName(), '.')) { list(, $tableName) = explode('.', $table->getName()); } else { $tableName = $table->getName(); } + $this->emitCheckStep($tableName, $step++, count($tables)); // don't need to check for new tables if (array_search($tableName, $existingTables) !== false) { $this->checkTableMigrate($table); @@ -269,9 +274,19 @@ class Migrator { } protected function emit($sql, $step, $max) { + if ($this->noEmit) { + return; + } if(is_null($this->dispatcher)) { return; } $this->dispatcher->dispatch('\OC\DB\Migrator::executeSql', new GenericEvent($sql, [$step+1, $max])); } + + private function emitCheckStep($tableName, $step, $max) { + if(is_null($this->dispatcher)) { + return; + } + $this->dispatcher->dispatch('\OC\DB\Migrator::checkTable', new GenericEvent($tableName, [$step+1, $max])); + } } |