Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /**
|
Chris@0
|
4 * @file
|
Chris@0
|
5 * Command-line tools to aid performing and developing upgrade migrations.
|
Chris@0
|
6 */
|
Chris@0
|
7
|
Chris@0
|
8 use Drupal\migrate_upgrade\MigrateUpgradeDrushRunner;
|
Chris@0
|
9
|
Chris@0
|
10 /**
|
Chris@0
|
11 * Implements hook_drush_command().
|
Chris@0
|
12 */
|
Chris@0
|
13 function migrate_upgrade_drush_command() {
|
Chris@0
|
14 $items['migrate-upgrade'] = [
|
Chris@0
|
15 'description' => 'Perform one or more upgrade processes.',
|
Chris@0
|
16 'options' => [
|
Chris@0
|
17 'legacy-db-url' => 'A Drupal 6 style database URL. Required.',
|
Chris@0
|
18 'legacy-db-prefix' => 'Prefix of the legacy Drupal installation.',
|
Chris@0
|
19 'legacy-root' => 'Site address or root of the legacy Drupal installation',
|
Chris@0
|
20 'configure-only' => 'Set up the appropriate upgrade processes but do not perform them',
|
Chris@0
|
21 'migration-prefix' => 'With configure-only, a prefix to apply to generated migration ids. Defaults to \'upgrade_\'',
|
Chris@0
|
22 ],
|
Chris@0
|
23 'examples' => [
|
Chris@0
|
24 'migrate-upgrade --legacy-db-url=\'mysql://root:pass@127.0.0.1/d6\'' => 'Upgrade a Drupal 6 database to Drupal 8',
|
Chris@0
|
25 'migrate-upgrade --legacy-db-url=\'mysql://root:pass@127.0.0.1/d7\' --configure-only --migration-prefix=d7_custom_' => 'Generate migrations for a custom migration from Drupal 7 to Drupal 8',
|
Chris@0
|
26 ],
|
Chris@0
|
27 'drupal dependencies' => ['migrate_upgrade'],
|
Chris@0
|
28 ];
|
Chris@0
|
29 $items['migrate-upgrade-rollback'] = [
|
Chris@0
|
30 'description' => 'Rolls back and removes upgrade migrations.',
|
Chris@0
|
31 'examples' => [
|
Chris@0
|
32 'migrate-upgrade-rollback' => 'Rolls back a previously-run upgrade',
|
Chris@0
|
33 ],
|
Chris@0
|
34 'drupal dependencies' => ['migrate_upgrade'],
|
Chris@0
|
35 ];
|
Chris@0
|
36
|
Chris@0
|
37 return $items;
|
Chris@0
|
38 }
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * Execute the upgrade command, configuring the necessary migrations and
|
Chris@0
|
42 * optionally perform the imports.
|
Chris@0
|
43 */
|
Chris@0
|
44 function drush_migrate_upgrade() {
|
Chris@0
|
45 $runner = new MigrateUpgradeDrushRunner();
|
Chris@0
|
46
|
Chris@0
|
47 try {
|
Chris@0
|
48 $runner->configure();
|
Chris@0
|
49 if (drush_get_option('configure-only')) {
|
Chris@0
|
50 $runner->export();
|
Chris@0
|
51 }
|
Chris@0
|
52 else {
|
Chris@0
|
53 $runner->import();
|
Chris@0
|
54 \Drupal::state()->set('migrate_drupal_ui.performed', REQUEST_TIME);
|
Chris@0
|
55 }
|
Chris@0
|
56 // Remove the global database state.
|
Chris@0
|
57 \Drupal::state()->delete('migrate.fallback_state_key');
|
Chris@0
|
58 }
|
Chris@0
|
59 catch (\Exception $e) {
|
Chris@0
|
60 drush_log($e->getMessage(), 'error');
|
Chris@0
|
61 }
|
Chris@0
|
62 }
|
Chris@0
|
63
|
Chris@0
|
64 /**
|
Chris@0
|
65 * Rolls back any upgrade migrations that are present, and deletes the migrations
|
Chris@0
|
66 * themselves.
|
Chris@0
|
67 */
|
Chris@0
|
68 function drush_migrate_upgrade_rollback() {
|
Chris@0
|
69 if ($date_performed = \Drupal::state()->get('migrate_drupal_ui.performed')) {
|
Chris@0
|
70 if (drush_confirm(dt('All migrations tagged as \'Drupal\' will be rolled back. Are you sure?'))) {
|
Chris@0
|
71 $runner = new MigrateUpgradeDrushRunner();
|
Chris@0
|
72
|
Chris@0
|
73 try {
|
Chris@0
|
74 drush_log(dt('Rolling back the upgrades performed @date',
|
Chris@0
|
75 ['@date' => \Drupal::service('date.formatter')->format($date_performed)]));
|
Chris@0
|
76 $runner->rollback();
|
Chris@0
|
77 \Drupal::state()->delete('migrate_drupal_ui.performed');
|
Chris@0
|
78 drush_log(dt('Rolled back upgrades'));
|
Chris@0
|
79 }
|
Chris@0
|
80 catch (\Exception $e) {
|
Chris@0
|
81 drush_log($e->getMessage(), 'error');
|
Chris@0
|
82 }
|
Chris@0
|
83 }
|
Chris@0
|
84 else {
|
Chris@0
|
85 drush_user_abort();
|
Chris@0
|
86 }
|
Chris@0
|
87 }
|
Chris@0
|
88 else {
|
Chris@0
|
89 drush_log(dt('No upgrade operation has been performed.'), 'warning');
|
Chris@0
|
90 }
|
Chris@0
|
91 }
|