summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2018-04-12 17:47:40 +0200
committerRoeland Jago Douma <roeland@famdouma.nl>2018-05-30 21:28:05 +0200
commitb40629ac8caf5d488053a9ab2e89210bf14e1b4c (patch)
treee4a5c79218778a494250768832d55640939c65ec
parent2dd49206c74eaa8e9149b117775f4747483ba5bd (diff)
downloadnextcloud-server-b40629ac8caf5d488053a9ab2e89210bf14e1b4c.tar.gz
nextcloud-server-b40629ac8caf5d488053a9ab2e89210bf14e1b4c.zip
Add human readable description to migration steps
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r--core/Command/Db/Migrations/StatusCommand.php11
-rw-r--r--core/Migrations/Version14000Date20180129121024.php7
-rw-r--r--core/Migrations/Version14000Date20180404140050.php8
-rw-r--r--lib/private/DB/MigrationService.php27
-rw-r--r--lib/public/Migration/IMigrationStep.php15
-rw-r--r--lib/public/Migration/SimpleMigrationStep.php17
6 files changed, 80 insertions, 5 deletions
diff --git a/core/Command/Db/Migrations/StatusCommand.php b/core/Command/Db/Migrations/StatusCommand.php
index 1e5f102cea7..b548f109c48 100644
--- a/core/Command/Db/Migrations/StatusCommand.php
+++ b/core/Command/Db/Migrations/StatusCommand.php
@@ -58,7 +58,14 @@ class StatusCommand extends Command implements CompletionAwareInterface {
$infos = $this->getMigrationsInfos($ms);
foreach ($infos as $key => $value) {
- $output->writeln(" <comment>>></comment> $key: " . str_repeat(' ', 50 - strlen($key)) . $value);
+ if (is_array($value)) {
+ $output->writeln(" <comment>>></comment> $key:");
+ foreach ($value as $subKey => $subValue) {
+ $output->writeln(" <comment>>></comment> $subKey: " . str_repeat(' ', 46 - strlen($subKey)) . $subValue);
+ }
+ } else {
+ $output->writeln(" <comment>>></comment> $key: " . str_repeat(' ', 50 - strlen($key)) . $value);
+ }
}
}
@@ -96,6 +103,7 @@ class StatusCommand extends Command implements CompletionAwareInterface {
$numExecutedUnavailableMigrations = count($executedUnavailableMigrations);
$numNewMigrations = count(array_diff(array_keys($availableMigrations), $executedMigrations));
+ $pending = $ms->describeMigrationStep('lastest');
$infos = [
'App' => $ms->getApp(),
@@ -110,6 +118,7 @@ class StatusCommand extends Command implements CompletionAwareInterface {
'Executed Unavailable Migrations' => $numExecutedUnavailableMigrations,
'Available Migrations' => count($availableMigrations),
'New Migrations' => $numNewMigrations,
+ 'Pending Migrations' => count($pending) ? $pending : 'None'
];
return $infos;
diff --git a/core/Migrations/Version14000Date20180129121024.php b/core/Migrations/Version14000Date20180129121024.php
index eedd99d014e..9512d4adafd 100644
--- a/core/Migrations/Version14000Date20180129121024.php
+++ b/core/Migrations/Version14000Date20180129121024.php
@@ -30,6 +30,13 @@ use OCP\Migration\IOutput;
* Delete the admin|personal sections and settings tables
*/
class Version14000Date20180129121024 extends SimpleMigrationStep {
+ public function name(): string {
+ return 'Drop obsolete settings tables';
+ }
+
+ public function description(): string {
+ return 'Drops the following obsolete tables: "admin_sections", "admin_settings", "personal_sections" and "personal_settings"';
+ }
/**
* @param IOutput $output
diff --git a/core/Migrations/Version14000Date20180404140050.php b/core/Migrations/Version14000Date20180404140050.php
index d7077caa149..86705f21d53 100644
--- a/core/Migrations/Version14000Date20180404140050.php
+++ b/core/Migrations/Version14000Date20180404140050.php
@@ -41,6 +41,14 @@ class Version14000Date20180404140050 extends SimpleMigrationStep {
$this->connection = $connection;
}
+ public function name(): string {
+ return 'Add lowercase user id column to users table';
+ }
+
+ public function description(): string {
+ return 'Adds "uid_lower" column to the users table and fills the column to allow indexed case-insensitive searches';
+ }
+
/**
* @param IOutput $output
* @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
diff --git a/lib/private/DB/MigrationService.php b/lib/private/DB/MigrationService.php
index 77ac23fe5d2..cc2889dae0c 100644
--- a/lib/private/DB/MigrationService.php
+++ b/lib/private/DB/MigrationService.php
@@ -387,14 +387,36 @@ class MigrationService {
}
/**
+ * Get the human readable descriptions for the migration steps to run
+ *
+ * @param string $to
+ * @return string[] [$name => $description]
+ */
+ public function describeMigrationStep($to = 'latest') {
+ $toBeExecuted = $this->getMigrationsToExecute($to);
+ $description = [];
+ foreach ($toBeExecuted as $version) {
+ $migration = $this->createInstance($version);
+ if ($migration->name()) {
+ $description[$migration->name()] = $migration->description();
+ }
+ }
+ return $description;
+ }
+
+ /**
* @param string $version
- * @return mixed
+ * @return IMigrationStep
* @throws \InvalidArgumentException
*/
protected function createInstance($version) {
$class = $this->getClass($version);
try {
$s = \OC::$server->query($class);
+
+ if (!$s instanceof IMigrationStep) {
+ throw new \InvalidArgumentException('Not a valid migration');
+ }
} catch (QueryException $e) {
if (class_exists($class)) {
$s = new $class();
@@ -414,9 +436,6 @@ class MigrationService {
*/
public function executeStep($version) {
$instance = $this->createInstance($version);
- if (!$instance instanceof IMigrationStep) {
- throw new \InvalidArgumentException('Not a valid migration');
- }
$instance->preSchemaChange($this->output, function() {
return new SchemaWrapper($this->connection);
diff --git a/lib/public/Migration/IMigrationStep.php b/lib/public/Migration/IMigrationStep.php
index e12d962683e..6b9da280d78 100644
--- a/lib/public/Migration/IMigrationStep.php
+++ b/lib/public/Migration/IMigrationStep.php
@@ -29,6 +29,21 @@ use OCP\DB\ISchemaWrapper;
* @since 13.0.0
*/
interface IMigrationStep {
+ /**
+ * Human readable name of the migration step
+ *
+ * @return string
+ * @since 14.0.0
+ */
+ public function name(): string;
+
+ /**
+ * Human readable description of the migration steps
+ *
+ * @return string
+ * @since 14.0.0
+ */
+ public function description(): string;
/**
* @param IOutput $output
diff --git a/lib/public/Migration/SimpleMigrationStep.php b/lib/public/Migration/SimpleMigrationStep.php
index da46c687644..c515592bde9 100644
--- a/lib/public/Migration/SimpleMigrationStep.php
+++ b/lib/public/Migration/SimpleMigrationStep.php
@@ -29,6 +29,23 @@ use OCP\DB\ISchemaWrapper;
* @since 13.0.0
*/
abstract class SimpleMigrationStep implements IMigrationStep {
+ /**
+ * Human readable name of the migration step
+ *
+ * @return string
+ */
+ public function name(): string {
+ return '';
+ }
+
+ /**
+ * Human readable description of the migration step
+ *
+ * @return string
+ */
+ public function description(): string {
+ return '';
+ }
/**
* @param IOutput $output