server/core/command/maintenance/repair.php
Vincent Petry ca690c4d02 Added RepairStep interface and default repair step lists
The updater is using "before update" repair steps and "regular" repair
steps.
The "regular" repair steps are also used by the CLI tool.

Currently no steps exist but can be added later in the static methods in
the \OC\Repair class.

Added unit test to test messaging, error and exception cases.
2014-06-12 17:38:26 +02:00

59 lines
1.6 KiB
PHP

<?php
/**
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace OC\Core\Command\Maintenance;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class Repair extends Command {
/**
* @var \OC\Repair $repair
*/
protected $repair;
/**
* @param \OC\Repair $repair
* @param \OC\Config $config
*/
public function __construct(\OC\Repair $repair, \OC\Config $config) {
$this->repair = $repair;
$this->config = $config;
parent::__construct();
}
protected function configure() {
$this
->setName('maintenance:repair')
->setDescription('repair this installation');
}
protected function execute(InputInterface $input, OutputInterface $output) {
// TODO: inject DB connection/factory when possible
$connection = \OC_DB::getConnection();
$connection->disableQueryStatementCaching();
$maintenanceMode = $this->config->getValue('maintenance', false);
$this->config->setValue('maintenance', true);
$this->repair->listen('\OC\Repair', 'step', function ($description) use ($output) {
$output->writeln(' - ' . $description);
});
$this->repair->listen('\OC\Repair', 'info', function ($description) use ($output) {
$output->writeln(' - ' . $description);
});
$this->repair->listen('\OC\Repair', 'error', function ($description) use ($output) {
$output->writeln(' - ERROR: ' . $description);
});
$this->repair->run();
$this->config->setValue('maintenance', $maintenanceMode);
}
}