summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-05-07 18:46:50 +0200
committerGitHub <noreply@github.com>2018-05-07 18:46:50 +0200
commit6180feeb9d6c3c7edceb6a996a48695504f673fb (patch)
tree1caf76490d1c5b502c57a7fcdb986c39cda6facd
parentb348431bce472b3e354b675b7647e33b51b1633b (diff)
parentf772b7b4dd408061c8b1151331b9efc6e2e7b96c (diff)
downloadnextcloud-server-6180feeb9d6c3c7edceb6a996a48695504f673fb.tar.gz
nextcloud-server-6180feeb9d6c3c7edceb6a996a48695504f673fb.zip
Merge pull request #9381 from nextcloud/feature/noid/add-autocomplete-to-migration-commands
Add autocomplete to migration commands
-rw-r--r--core/Command/Db/Migrations/ExecuteCommand.php45
-rw-r--r--core/Command/Db/Migrations/GenerateCommand.php42
-rw-r--r--core/Command/Db/Migrations/GenerateFromSchemaFileCommand.php6
-rw-r--r--core/Command/Db/Migrations/MigrateCommand.php37
-rw-r--r--core/Command/Db/Migrations/StatusCommand.php26
-rw-r--r--core/register_command.php4
6 files changed, 147 insertions, 13 deletions
diff --git a/core/Command/Db/Migrations/ExecuteCommand.php b/core/Command/Db/Migrations/ExecuteCommand.php
index 88dfe648090..c3fdc128047 100644
--- a/core/Command/Db/Migrations/ExecuteCommand.php
+++ b/core/Command/Db/Migrations/ExecuteCommand.php
@@ -26,27 +26,35 @@ namespace OC\Core\Command\Db\Migrations;
use OC\DB\MigrationService;
use OC\Migration\ConsoleOutput;
+use OCP\App\IAppManager;
use OCP\IConfig;
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\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
-class ExecuteCommand extends Command {
+class ExecuteCommand extends Command implements CompletionAwareInterface {
/** @var IDBConnection */
private $connection;
+
/** @var IConfig */
private $config;
+ /** @var IAppManager */
+ protected $appManager;
+
/**
* ExecuteCommand constructor.
*
* @param IDBConnection $connection
* @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->config = $config;
@@ -88,4 +96,37 @@ class ExecuteCommand extends Command {
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 [];
+ }
+
}
diff --git a/core/Command/Db/Migrations/GenerateCommand.php b/core/Command/Db/Migrations/GenerateCommand.php
index e37c51e85fb..50d58a9ea16 100644
--- a/core/Command/Db/Migrations/GenerateCommand.php
+++ b/core/Command/Db/Migrations/GenerateCommand.php
@@ -26,14 +26,17 @@ namespace OC\Core\Command\Db\Migrations;
use OC\DB\MigrationService;
use OC\Migration\ConsoleOutput;
+use OCP\App\IAppManager;
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\Exception\RuntimeException;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
-class GenerateCommand extends Command {
+class GenerateCommand extends Command implements CompletionAwareInterface {
protected static $_templateSimple =
'<?php
@@ -82,11 +85,16 @@ class {{classname}} extends SimpleMigrationStep {
/** @var IDBConnection */
protected $connection;
+ /** @var IAppManager */
+ protected $appManager;
+
/**
* @param IDBConnection $connection
+ * @param IAppManager $appManager
*/
- public function __construct(IDBConnection $connection) {
+ public function __construct(IDBConnection $connection, IAppManager $appManager) {
$this->connection = $connection;
+ $this->appManager = $appManager;
parent::__construct();
}
@@ -120,6 +128,36 @@ class {{classname}} extends SimpleMigrationStep {
}
/**
+ * @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 string $className
* @param string $schemaBody
diff --git a/core/Command/Db/Migrations/GenerateFromSchemaFileCommand.php b/core/Command/Db/Migrations/GenerateFromSchemaFileCommand.php
index 3ccaa563e89..e4fb940bb2c 100644
--- a/core/Command/Db/Migrations/GenerateFromSchemaFileCommand.php
+++ b/core/Command/Db/Migrations/GenerateFromSchemaFileCommand.php
@@ -39,13 +39,9 @@ class GenerateFromSchemaFileCommand extends GenerateCommand {
/** @var IConfig */
protected $config;
- /** @var IAppManager */
- protected $appManager;
-
public function __construct(IConfig $config, IAppManager $appManager, IDBConnection $connection) {
- parent::__construct($connection);
+ parent::__construct($connection, $appManager);
$this->config = $config;
- $this->appManager = $appManager;
}
diff --git a/core/Command/Db/Migrations/MigrateCommand.php b/core/Command/Db/Migrations/MigrateCommand.php
index e5dddaebf2d..5a4ca1a6927 100644
--- a/core/Command/Db/Migrations/MigrateCommand.php
+++ b/core/Command/Db/Migrations/MigrateCommand.php
@@ -26,12 +26,14 @@ namespace OC\Core\Command\Db\Migrations;
use OC\DB\MigrationService;
use OC\Migration\ConsoleOutput;
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\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
-class MigrateCommand extends Command {
+class MigrateCommand extends Command implements CompletionAwareInterface {
/** @var IDBConnection */
private $connection;
@@ -62,4 +64,37 @@ class MigrateCommand extends Command {
$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 [];
+ }
+
}
diff --git a/core/Command/Db/Migrations/StatusCommand.php b/core/Command/Db/Migrations/StatusCommand.php
index 9fa497a126f..1e5f102cea7 100644
--- a/core/Command/Db/Migrations/StatusCommand.php
+++ b/core/Command/Db/Migrations/StatusCommand.php
@@ -25,12 +25,14 @@ namespace OC\Core\Command\Db\Migrations;
use OC\DB\MigrationService;
use OC\Migration\ConsoleOutput;
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\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
-class StatusCommand extends Command {
+class StatusCommand extends Command implements CompletionAwareInterface {
/** @var IDBConnection */
private $connection;
@@ -61,6 +63,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
* @return array associative array of human readable info name as key and the actual information as value
*/
diff --git a/core/register_command.php b/core/register_command.php
index 578b4f799b6..93a36c415ee 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -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\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\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\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\Enable(\OC::$server->getConfig(), \OC::$server->getEncryptionManager()));