Merge pull request #9381 from nextcloud/feature/noid/add-autocomplete-to-migration-commands
Add autocomplete to migration commands
This commit is contained in:
commit
6180feeb9d
|
@ -26,27 +26,35 @@ namespace OC\Core\Command\Db\Migrations;
|
||||||
|
|
||||||
use OC\DB\MigrationService;
|
use OC\DB\MigrationService;
|
||||||
use OC\Migration\ConsoleOutput;
|
use OC\Migration\ConsoleOutput;
|
||||||
|
use OCP\App\IAppManager;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
|
use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface;
|
||||||
|
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
class ExecuteCommand extends Command {
|
class ExecuteCommand extends Command implements CompletionAwareInterface {
|
||||||
|
|
||||||
/** @var IDBConnection */
|
/** @var IDBConnection */
|
||||||
private $connection;
|
private $connection;
|
||||||
|
|
||||||
/** @var IConfig */
|
/** @var IConfig */
|
||||||
private $config;
|
private $config;
|
||||||
|
|
||||||
|
/** @var IAppManager */
|
||||||
|
protected $appManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ExecuteCommand constructor.
|
* ExecuteCommand constructor.
|
||||||
*
|
*
|
||||||
* @param IDBConnection $connection
|
* @param IDBConnection $connection
|
||||||
* @param IConfig $config
|
* @param IConfig $config
|
||||||
|
* @param IAppManager $appManager
|
||||||
*/
|
*/
|
||||||
public function __construct(IDBConnection $connection, IConfig $config) {
|
public function __construct(IDBConnection $connection, IAppManager $appManager, IConfig $config) {
|
||||||
$this->connection = $connection;
|
$this->connection = $connection;
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
|
|
||||||
|
@ -88,4 +96,37 @@ class ExecuteCommand extends Command {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $optionName
|
||||||
|
* @param CompletionContext $context
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function completeOptionValues($optionName, CompletionContext $context) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $argumentName
|
||||||
|
* @param CompletionContext $context
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function completeArgumentValues($argumentName, CompletionContext $context) {
|
||||||
|
if ($argumentName === 'app') {
|
||||||
|
$allApps = \OC_App::getAllApps();
|
||||||
|
return array_diff($allApps, \OC_App::getEnabledApps(true, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($argumentName === 'version') {
|
||||||
|
$appName = $context->getWordAtIndex($context->getWordIndex() - 1);
|
||||||
|
|
||||||
|
$ms = new MigrationService($appName, $this->connection);
|
||||||
|
$migrations = $ms->getAvailableVersions();
|
||||||
|
|
||||||
|
array_unshift($migrations, 'next', 'latest');
|
||||||
|
return $migrations;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,14 +26,17 @@ namespace OC\Core\Command\Db\Migrations;
|
||||||
|
|
||||||
use OC\DB\MigrationService;
|
use OC\DB\MigrationService;
|
||||||
use OC\Migration\ConsoleOutput;
|
use OC\Migration\ConsoleOutput;
|
||||||
|
use OCP\App\IAppManager;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
|
use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface;
|
||||||
|
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Exception\RuntimeException;
|
use Symfony\Component\Console\Exception\RuntimeException;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
class GenerateCommand extends Command {
|
class GenerateCommand extends Command implements CompletionAwareInterface {
|
||||||
|
|
||||||
protected static $_templateSimple =
|
protected static $_templateSimple =
|
||||||
'<?php
|
'<?php
|
||||||
|
@ -82,11 +85,16 @@ class {{classname}} extends SimpleMigrationStep {
|
||||||
/** @var IDBConnection */
|
/** @var IDBConnection */
|
||||||
protected $connection;
|
protected $connection;
|
||||||
|
|
||||||
|
/** @var IAppManager */
|
||||||
|
protected $appManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param IDBConnection $connection
|
* @param IDBConnection $connection
|
||||||
|
* @param IAppManager $appManager
|
||||||
*/
|
*/
|
||||||
public function __construct(IDBConnection $connection) {
|
public function __construct(IDBConnection $connection, IAppManager $appManager) {
|
||||||
$this->connection = $connection;
|
$this->connection = $connection;
|
||||||
|
$this->appManager = $appManager;
|
||||||
|
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
}
|
}
|
||||||
|
@ -119,6 +127,36 @@ class {{classname}} extends SimpleMigrationStep {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $optionName
|
||||||
|
* @param CompletionContext $context
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function completeOptionValues($optionName, CompletionContext $context) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $argumentName
|
||||||
|
* @param CompletionContext $context
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function completeArgumentValues($argumentName, CompletionContext $context) {
|
||||||
|
if ($argumentName === 'app') {
|
||||||
|
$allApps = \OC_App::getAllApps();
|
||||||
|
return array_diff($allApps, \OC_App::getEnabledApps(true, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($argumentName === 'version') {
|
||||||
|
$appName = $context->getWordAtIndex($context->getWordIndex() - 1);
|
||||||
|
|
||||||
|
$version = explode('.', $this->appManager->getAppVersion($appName));
|
||||||
|
return [$version[0] . sprintf('%1$03d', $version[1])];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param MigrationService $ms
|
* @param MigrationService $ms
|
||||||
* @param string $className
|
* @param string $className
|
||||||
|
|
|
@ -39,13 +39,9 @@ class GenerateFromSchemaFileCommand extends GenerateCommand {
|
||||||
/** @var IConfig */
|
/** @var IConfig */
|
||||||
protected $config;
|
protected $config;
|
||||||
|
|
||||||
/** @var IAppManager */
|
|
||||||
protected $appManager;
|
|
||||||
|
|
||||||
public function __construct(IConfig $config, IAppManager $appManager, IDBConnection $connection) {
|
public function __construct(IConfig $config, IAppManager $appManager, IDBConnection $connection) {
|
||||||
parent::__construct($connection);
|
parent::__construct($connection, $appManager);
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->appManager = $appManager;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,12 +26,14 @@ namespace OC\Core\Command\Db\Migrations;
|
||||||
use OC\DB\MigrationService;
|
use OC\DB\MigrationService;
|
||||||
use OC\Migration\ConsoleOutput;
|
use OC\Migration\ConsoleOutput;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
|
use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface;
|
||||||
|
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
class MigrateCommand extends Command {
|
class MigrateCommand extends Command implements CompletionAwareInterface {
|
||||||
|
|
||||||
/** @var IDBConnection */
|
/** @var IDBConnection */
|
||||||
private $connection;
|
private $connection;
|
||||||
|
@ -62,4 +64,37 @@ class MigrateCommand extends Command {
|
||||||
$ms->migrate($version);
|
$ms->migrate($version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $optionName
|
||||||
|
* @param CompletionContext $context
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function completeOptionValues($optionName, CompletionContext $context) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $argumentName
|
||||||
|
* @param CompletionContext $context
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function completeArgumentValues($argumentName, CompletionContext $context) {
|
||||||
|
if ($argumentName === 'app') {
|
||||||
|
$allApps = \OC_App::getAllApps();
|
||||||
|
return array_diff($allApps, \OC_App::getEnabledApps(true, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($argumentName === 'version') {
|
||||||
|
$appName = $context->getWordAtIndex($context->getWordIndex() - 1);
|
||||||
|
|
||||||
|
$ms = new MigrationService($appName, $this->connection);
|
||||||
|
$migrations = $ms->getAvailableVersions();
|
||||||
|
|
||||||
|
array_unshift($migrations, 'next', 'latest');
|
||||||
|
return $migrations;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,12 +25,14 @@ namespace OC\Core\Command\Db\Migrations;
|
||||||
use OC\DB\MigrationService;
|
use OC\DB\MigrationService;
|
||||||
use OC\Migration\ConsoleOutput;
|
use OC\Migration\ConsoleOutput;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
|
use Stecman\Component\Symfony\Console\BashCompletion\Completion\CompletionAwareInterface;
|
||||||
|
use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
class StatusCommand extends Command {
|
class StatusCommand extends Command implements CompletionAwareInterface {
|
||||||
|
|
||||||
/** @var IDBConnection */
|
/** @var IDBConnection */
|
||||||
private $connection;
|
private $connection;
|
||||||
|
@ -60,6 +62,28 @@ class StatusCommand extends Command {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $optionName
|
||||||
|
* @param CompletionContext $context
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function completeOptionValues($optionName, CompletionContext $context) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $argumentName
|
||||||
|
* @param CompletionContext $context
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function completeArgumentValues($argumentName, CompletionContext $context) {
|
||||||
|
if ($argumentName === 'app') {
|
||||||
|
$allApps = \OC_App::getAllApps();
|
||||||
|
return array_diff($allApps, \OC_App::getEnabledApps(true, true));
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param MigrationService $ms
|
* @param MigrationService $ms
|
||||||
* @return array associative array of human readable info name as key and the actual information as value
|
* @return array associative array of human readable info name as key and the actual information as value
|
||||||
|
|
|
@ -92,9 +92,9 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) {
|
||||||
$application->add(new OC\Core\Command\Db\AddMissingIndices(\OC::$server->getDatabaseConnection()));
|
$application->add(new OC\Core\Command\Db\AddMissingIndices(\OC::$server->getDatabaseConnection()));
|
||||||
$application->add(new OC\Core\Command\Db\Migrations\StatusCommand(\OC::$server->getDatabaseConnection()));
|
$application->add(new OC\Core\Command\Db\Migrations\StatusCommand(\OC::$server->getDatabaseConnection()));
|
||||||
$application->add(new OC\Core\Command\Db\Migrations\MigrateCommand(\OC::$server->getDatabaseConnection()));
|
$application->add(new OC\Core\Command\Db\Migrations\MigrateCommand(\OC::$server->getDatabaseConnection()));
|
||||||
$application->add(new OC\Core\Command\Db\Migrations\GenerateCommand(\OC::$server->getDatabaseConnection()));
|
$application->add(new OC\Core\Command\Db\Migrations\GenerateCommand(\OC::$server->getDatabaseConnection(), \OC::$server->getAppManager()));
|
||||||
$application->add(new OC\Core\Command\Db\Migrations\GenerateFromSchemaFileCommand(\OC::$server->getConfig(), \OC::$server->getAppManager(), \OC::$server->getDatabaseConnection()));
|
$application->add(new OC\Core\Command\Db\Migrations\GenerateFromSchemaFileCommand(\OC::$server->getConfig(), \OC::$server->getAppManager(), \OC::$server->getDatabaseConnection()));
|
||||||
$application->add(new OC\Core\Command\Db\Migrations\ExecuteCommand(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()));
|
$application->add(new OC\Core\Command\Db\Migrations\ExecuteCommand(\OC::$server->getDatabaseConnection(), \OC::$server->getAppManager(), \OC::$server->getConfig()));
|
||||||
|
|
||||||
$application->add(new OC\Core\Command\Encryption\Disable(\OC::$server->getConfig()));
|
$application->add(new OC\Core\Command\Encryption\Disable(\OC::$server->getConfig()));
|
||||||
$application->add(new OC\Core\Command\Encryption\Enable(\OC::$server->getConfig(), \OC::$server->getEncryptionManager()));
|
$application->add(new OC\Core\Command\Encryption\Enable(\OC::$server->getConfig(), \OC::$server->getEncryptionManager()));
|
||||||
|
|
Loading…
Reference in New Issue