Adding progress to occ maintenance:repair
This commit is contained in:
parent
ba0099f73a
commit
cdcd49b473
|
@ -25,24 +25,36 @@
|
||||||
namespace OC\Core\Command\Maintenance;
|
namespace OC\Core\Command\Maintenance;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use OCP\IConfig;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Helper\ProgressBar;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Input\InputOption;
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||||
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
|
use Symfony\Component\EventDispatcher\GenericEvent;
|
||||||
|
|
||||||
class Repair extends Command {
|
class Repair extends Command {
|
||||||
/** @var \OC\Repair $repair */
|
/** @var \OC\Repair $repair */
|
||||||
protected $repair;
|
protected $repair;
|
||||||
/** @var \OCP\IConfig */
|
/** @var IConfig */
|
||||||
protected $config;
|
protected $config;
|
||||||
|
/** @var EventDispatcherInterface */
|
||||||
|
private $dispatcher;
|
||||||
|
/** @var ProgressBar */
|
||||||
|
private $progress;
|
||||||
|
/** @var OutputInterface */
|
||||||
|
private $output;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \OC\Repair $repair
|
* @param \OC\Repair $repair
|
||||||
* @param \OCP\IConfig $config
|
* @param IConfig $config
|
||||||
*/
|
*/
|
||||||
public function __construct(\OC\Repair $repair, \OCP\IConfig $config) {
|
public function __construct(\OC\Repair $repair, IConfig $config, EventDispatcherInterface $dispatcher) {
|
||||||
$this->repair = $repair;
|
$this->repair = $repair;
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
|
$this->dispatcher = $dispatcher;
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,21 +99,48 @@ class Repair extends Command {
|
||||||
$maintenanceMode = $this->config->getSystemValue('maintenance', false);
|
$maintenanceMode = $this->config->getSystemValue('maintenance', false);
|
||||||
$this->config->setSystemValue('maintenance', true);
|
$this->config->setSystemValue('maintenance', true);
|
||||||
|
|
||||||
$this->repair->listen('\OC\Repair', 'step', function ($description) use ($output) {
|
$this->progress = new ProgressBar($output);
|
||||||
$output->writeln(' - ' . $description);
|
$this->output = $output;
|
||||||
});
|
$this->dispatcher->addListener('\OC\Repair::startProgress', [$this, 'handleRepairFeedBack']);
|
||||||
$this->repair->listen('\OC\Repair', 'info', function ($description) use ($output) {
|
$this->dispatcher->addListener('\OC\Repair::advance', [$this, 'handleRepairFeedBack']);
|
||||||
$output->writeln(' - ' . $description);
|
$this->dispatcher->addListener('\OC\Repair::finishProgress', [$this, 'handleRepairFeedBack']);
|
||||||
});
|
$this->dispatcher->addListener('\OC\Repair::step', [$this, 'handleRepairFeedBack']);
|
||||||
$this->repair->listen('\OC\Repair', 'warning', function ($description) use ($output) {
|
$this->dispatcher->addListener('\OC\Repair::info', [$this, 'handleRepairFeedBack']);
|
||||||
$output->writeln(' - WARNING: ' . $description);
|
$this->dispatcher->addListener('\OC\Repair::warning', [$this, 'handleRepairFeedBack']);
|
||||||
});
|
$this->dispatcher->addListener('\OC\Repair::error', [$this, 'handleRepairFeedBack']);
|
||||||
$this->repair->listen('\OC\Repair', 'error', function ($description) use ($output) {
|
|
||||||
$output->writeln(' - ERROR: ' . $description);
|
|
||||||
});
|
|
||||||
|
|
||||||
$this->repair->run();
|
$this->repair->run();
|
||||||
|
|
||||||
$this->config->setSystemValue('maintenance', $maintenanceMode);
|
$this->config->setSystemValue('maintenance', $maintenanceMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function handleRepairFeedBack($event) {
|
||||||
|
if (!$event instanceof GenericEvent) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch ($event->getSubject()) {
|
||||||
|
case '\OC\Repair::startProgress':
|
||||||
|
$this->progress->start($event->getArgument(0));
|
||||||
|
break;
|
||||||
|
case '\OC\Repair::advance':
|
||||||
|
$this->progress->advance($event->getArgument(0));
|
||||||
|
break;
|
||||||
|
case '\OC\Repair::finishProgress':
|
||||||
|
$this->progress->finish();
|
||||||
|
$this->output->writeln('');
|
||||||
|
break;
|
||||||
|
case '\OC\Repair::step':
|
||||||
|
$this->output->writeln(' - ' . $event->getArgument(0));
|
||||||
|
break;
|
||||||
|
case '\OC\Repair::info':
|
||||||
|
$this->output->writeln(' - ' . $event->getArgument(0));
|
||||||
|
break;
|
||||||
|
case '\OC\Repair::warning':
|
||||||
|
$this->output->writeln(' - WARNING: ' . $event->getArgument(0));
|
||||||
|
break;
|
||||||
|
case '\OC\Repair::error':
|
||||||
|
$this->output->writeln(' - ERROR: ' . $event->getArgument(0));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,9 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) {
|
||||||
$application->add(new OC\Core\Command\Maintenance\Mimetype\UpdateDB(\OC::$server->getMimeTypeDetector(), \OC::$server->getMimeTypeLoader()));
|
$application->add(new OC\Core\Command\Maintenance\Mimetype\UpdateDB(\OC::$server->getMimeTypeDetector(), \OC::$server->getMimeTypeLoader()));
|
||||||
$application->add(new OC\Core\Command\Maintenance\Mimetype\UpdateJS(\OC::$server->getMimeTypeDetector()));
|
$application->add(new OC\Core\Command\Maintenance\Mimetype\UpdateJS(\OC::$server->getMimeTypeDetector()));
|
||||||
$application->add(new OC\Core\Command\Maintenance\Mode(\OC::$server->getConfig()));
|
$application->add(new OC\Core\Command\Maintenance\Mode(\OC::$server->getConfig()));
|
||||||
$application->add(new OC\Core\Command\Maintenance\Repair(new \OC\Repair(\OC\Repair::getRepairSteps()), \OC::$server->getConfig()));
|
$application->add(new OC\Core\Command\Maintenance\Repair(
|
||||||
|
new \OC\Repair(\OC\Repair::getRepairSteps(), \OC::$server->getEventDispatcher()), \OC::$server->getConfig(),
|
||||||
|
\OC::$server->getEventDispatcher()));
|
||||||
$application->add(new OC\Core\Command\Maintenance\SingleUser(\OC::$server->getConfig()));
|
$application->add(new OC\Core\Command\Maintenance\SingleUser(\OC::$server->getConfig()));
|
||||||
|
|
||||||
$application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig(), \OC::$server->getLogger()));
|
$application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig(), \OC::$server->getLogger()));
|
||||||
|
|
|
@ -55,12 +55,15 @@ class DropOldTables implements IRepairStep {
|
||||||
* @throws \Exception in case of failure
|
* @throws \Exception in case of failure
|
||||||
*/
|
*/
|
||||||
public function run(IOutput $output) {
|
public function run(IOutput $output) {
|
||||||
|
$tables = $this->oldDatabaseTables();
|
||||||
|
$output->startProgress(count($tables));
|
||||||
foreach ($this->oldDatabaseTables() as $tableName) {
|
foreach ($this->oldDatabaseTables() as $tableName) {
|
||||||
if ($this->connection->tableExists($tableName)){
|
if ($this->connection->tableExists($tableName)){
|
||||||
$output->info(sprintf('Table %s has been deleted', $tableName));
|
|
||||||
$this->connection->dropTable($tableName);
|
$this->connection->dropTable($tableName);
|
||||||
}
|
}
|
||||||
|
$output->advance();
|
||||||
}
|
}
|
||||||
|
$output->finishProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue