From fcc5f3b20973a41bbccbef10f59e576f1b503573 Mon Sep 17 00:00:00 2001
From: webchick <webchick@24967.no-reply.drupal.org>
Date: Mon, 12 May 2014 22:06:21 -0700
Subject: [PATCH] Issue #2263453 by chx, benjy: Split migration_dependencies
 into two keys.

---
 .../lib/Drupal/migrate/MigrationStorage.php   | 32 ++++++++-----------
 .../Plugin/migrate/destination/EntityFile.php |  3 ++
 .../migrate.migration.d6_aggregator_item.yml  |  3 +-
 .../install/migrate.migration.d6_block.yml    |  6 ++--
 .../install/migrate.migration.d6_book.yml     |  3 +-
 ...igrate.migration.d6_cck_field_revision.yml |  5 +--
 .../migrate.migration.d6_cck_field_values.yml |  7 ++--
 .../install/migrate.migration.d6_comment.yml  | 11 ++++---
 ...te.migration.d6_comment_entity_display.yml |  3 +-
 ...gration.d6_comment_entity_form_display.yml |  3 +-
 ...te.migration.d6_comment_field_instance.yml |  5 +--
 .../migrate.migration.d6_custom_block.yml     |  3 +-
 .../install/migrate.migration.d6_field.yml    |  9 +++---
 ....migration.d6_field_formatter_settings.yml |  5 +--
 .../migrate.migration.d6_field_instance.yml   |  5 +--
 ...tion.d6_field_instance_widget_settings.yml |  3 +-
 .../install/migrate.migration.d6_file.yml     |  2 ++
 .../install/migrate.migration.d6_node.yml     | 12 ++++---
 .../migrate.migration.d6_node_revision.yml    |  3 +-
 .../migrate.migration.d6_node_settings.yml    |  3 +-
 .../migrate.migration.d6_profile_values.yml   |  9 +++---
 .../migrate.migration.d6_taxonomy_term.yml    |  3 +-
 .../migrate.migration.d6_term_node.yml        |  7 ++--
 ...igrate.migration.d6_term_node_revision.yml |  5 +--
 .../install/migrate.migration.d6_upload.yml   |  5 +--
 ...ate.migration.d6_upload_entity_display.yml |  3 +-
 ...igration.d6_upload_entity_form_display.yml |  3 +-
 ...ate.migration.d6_upload_field_instance.yml |  5 +--
 .../install/migrate.migration.d6_user.yml     | 12 ++++---
 ...gration.d6_user_picture_entity_display.yml |  3 +-
 ...on.d6_user_picture_entity_form_display.yml |  3 +-
 ...gration.d6_user_picture_field_instance.yml |  3 +-
 ...migrate.migration.d6_user_picture_file.yml |  5 ++-
 ...gration.d6_user_profile_field_instance.yml |  3 +-
 ...migration.d6_vocabulary_entity_display.yml |  3 +-
 ...tion.d6_vocabulary_entity_form_display.yml |  3 +-
 .../migrate.migration.d6_vocabulary_field.yml |  3 +-
 ...migration.d6_vocabulary_field_instance.yml |  3 +-
 38 files changed, 123 insertions(+), 84 deletions(-)

diff --git a/core/modules/migrate/lib/Drupal/migrate/MigrationStorage.php b/core/modules/migrate/lib/Drupal/migrate/MigrationStorage.php
index 30c63fee7669..7577956274d1 100644
--- a/core/modules/migrate/lib/Drupal/migrate/MigrationStorage.php
+++ b/core/modules/migrate/lib/Drupal/migrate/MigrationStorage.php
@@ -20,34 +20,28 @@ class MigrationStorage extends ConfigEntityStorage implements MigrateBuildDepend
    */
   public function buildDependencyMigration(array $migrations, array $dynamic_ids) {
     // Migration dependencies defined in the migration storage can be
-    // soft dependencies: if a soft dependency does not run, the current
-    // migration is still OK to go. This is indicated by adding ": false"
-    // (without quotes) after the name of the dependency. Hard dependencies
-    // (default) are called requirements. Both hard and soft dependencies (if
-    // run at all) must run before the current one.
+    // optional or required. If an optional dependency does not run, the current
+    // migration is still OK to go. Both optional and required dependencies
+    // (if run at all) must run before the current migration.
     $dependency_graph = array();
     $requirement_graph = array();
     $different = FALSE;
     foreach ($migrations as $migration) {
-      /** @var \Drupal\migrate\Entity\MigrationInterface $migration */
+      /** @var \Drupal\migrate\Entity\Migration $migration */
       $id = $migration->id();
       $requirements[$id] = array();
       $dependency_graph[$id]['edges'] = array();
-      if (isset($migration->migration_dependencies) && is_array($migration->migration_dependencies)) {
-        foreach ($migration->migration_dependencies as $dependency) {
-          if (is_string($dependency) && !isset($dynamic_ids[$dependency])) {
+      if (isset($migration->migration_dependencies['required'])) {
+        foreach ($migration->migration_dependencies['required'] as $dependency) {
+          if (!isset($dynamic_ids[$dependency])) {
             $this->addDependency($requirement_graph, $id, $dependency, $dynamic_ids);
           }
-          if (is_array($dependency)) {
-            list($dependency_string, $required) = each($dependency);
-            $dependency = $dependency_string;
-            if ($required) {
-              $this->addDependency($requirement_graph, $id, $dependency, $dynamic_ids);
-            }
-            else {
-              $different = TRUE;
-            }
-          }
+          $this->addDependency($dependency_graph, $id, $dependency, $dynamic_ids);
+        }
+      }
+      if (isset($migration->migration_dependencies['optional'])) {
+        foreach ($migration->migration_dependencies['optional'] as $dependency) {
+          $different = TRUE;
           $this->addDependency($dependency_graph, $id, $dependency, $dynamic_ids);
         }
       }
diff --git a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/destination/EntityFile.php b/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/destination/EntityFile.php
index 6ae4f308455c..21a435286fe6 100644
--- a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/destination/EntityFile.php
+++ b/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/destination/EntityFile.php
@@ -14,6 +14,9 @@
 use Drupal\migrate\Row;
 
 /**
+ * Every migration that uses this destination must have an optional
+ * dependency on the d6_file migration to ensure it runs first.
+ *
  * @MigrateDestination(
  *   id = "entity:file"
  * )
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_item.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_item.yml
index 21478724b868..184fdb832feb 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_item.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_aggregator_item.yml
@@ -18,4 +18,5 @@ process:
 destination:
   plugin: entity:aggregator_item
 migration_dependencies:
-  - d6_aggregator_feed
+  required:
+    - d6_aggregator_feed
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_block.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_block.yml
index 5c334507b98f..e4c269c6484b 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_block.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_block.yml
@@ -58,5 +58,7 @@ process:
 destination:
   plugin: entity:block
 migration_dependencies:
-  - d6_custom_block
-  - d6_menu: false
+  required:
+    - d6_custom_block
+  optional:
+    - d6_menu
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_book.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_book.yml
index b74618603456..03758d597228 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_book.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_book.yml
@@ -16,4 +16,5 @@ process:
 destination:
   plugin: book
 migration_dependencies:
-  - d6_node
+  required:
+    - d6_node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_revision.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_revision.yml
index d16570709b47..4448c641e307 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_revision.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_revision.yml
@@ -10,5 +10,6 @@ process:
 destination:
   plugin: entity_revision:node
 migration_dependencies:
-  - d6_cck_field_values
-  - d6_node_revision
+  required:
+    - d6_cck_field_values
+    - d6_node_revision
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_values.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_values.yml
index 3df7ead32f34..9893e0908604 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_values.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_cck_field_values.yml
@@ -13,6 +13,7 @@ process:
 destination:
   plugin: entity:node
 migration_dependencies:
-  - d6_node
-  - d6_field_formatter_settings
-  - d6_field_instance_widget_settings
+  required:
+    - d6_node
+    - d6_field_formatter_settings
+    - d6_field_instance_widget_settings
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment.yml
index a9fe824af6bf..961cb406b416 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment.yml
@@ -44,8 +44,9 @@ process:
 destination:
   plugin: entity:comment
 migration_dependencies:
-  - d6_node
-  - d6_user
-  - d6_comment_entity_display
-  - d6_comment_entity_form_display
-  - d6_filter_format
+  required:
+    - d6_node
+    - d6_user
+    - d6_comment_entity_display
+    - d6_comment_entity_form_display
+    - d6_filter_format
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_display.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_display.yml
index 49e64055d04c..a99f84e36c20 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_display.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_display.yml
@@ -20,4 +20,5 @@ process:
 destination:
   plugin: component_entity_display
 migration_dependencies:
-  - d6_comment_field_instance
+  required:
+    - d6_comment_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display.yml
index 4577104bc504..d82c8129c4c6 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_entity_form_display.yml
@@ -19,4 +19,5 @@ process:
 destination:
   plugin: component_entity_form_display
 migration_dependencies:
-  - d6_comment_field_instance
+  required:
+    - d6_comment_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field_instance.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field_instance.yml
index a3f9612e8ef4..c7631c2015fd 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field_instance.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_comment_field_instance.yml
@@ -24,5 +24,6 @@ process:
 destination:
   plugin: entity:field_instance_config
 migration_dependencies:
-  - d6_comment_field
-  - d6_node_type
+  required:
+    - d6_comment_field
+    - d6_node_type
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_custom_block.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_custom_block.yml
index 8efb51059d0d..709d1ea39554 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_custom_block.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_custom_block.yml
@@ -16,4 +16,5 @@ process:
 destination:
   plugin: entity:custom_block
 migration_dependencies:
-  - d6_filter_format
+  required:
+    - d6_filter_format
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
index cb8f5d3d08fb..9ce7638d4e03 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
@@ -77,7 +77,8 @@ process:
 destination:
   plugin: entity:field_config
 migration_dependencies:
-  # It is not possible to make this a requirement as d6_field_settings has no
-  # source id. However it also has no requirements so it will always run so a
-  # dependency is enough.
-  - d6_field_settings: false
+  optional:
+    # It is not possible to make this required as d6_field_settings has no
+    # source id. However it also has no required dependencies so it will always
+    # run so an optional dependency is enough.
+    - d6_field_settings
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
index d41bc0a2a07c..582c4705c87b 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
@@ -294,5 +294,6 @@ process:
 destination:
   plugin: component_entity_display
 migration_dependencies:
-  - d6_field_instance
-  - d6_view_modes
+  required:
+    - d6_field_instance
+    - d6_view_modes
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance.yml
index 4bda9319f606..74e35362c389 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance.yml
@@ -44,5 +44,6 @@ process:
 destination:
   plugin: entity:field_instance_config
 migration_dependencies:
-  - d6_node_type
-  - d6_field
+  required:
+    - d6_node_type
+    - d6_field
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml
index aab0a708b3b1..61ed23b68788 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_instance_widget_settings.yml
@@ -54,4 +54,5 @@ process:
 destination:
   plugin: component_entity_form_display
 migration_dependencies:
-  - d6_field_instance
+  required:
+    - d6_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_file.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_file.yml
index cc39a89dacba..d54e1d4f627c 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_file.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_file.yml
@@ -1,3 +1,5 @@
+# Every migration that saves into {file_managed} must have the d6_file
+# migration as an optional dependency to ensure d6_file runs first.
 id: d6_file
 label: Drupal 6 files
 source:
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node.yml
index 6ace5da74380..b74df844f0c8 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node.yml
@@ -29,8 +29,10 @@ process:
 destination:
   plugin: entity:node
 migration_dependencies:
-  - d6_node_type
-  - d6_filter_format
-  - d6_field_instance_widget_settings: false
-  - d6_field_formatter_settings: false
-  - d6_node_settings: false
+  required:
+    - d6_node_type
+    - d6_filter_format
+  optional:
+    - d6_field_instance_widget_settings
+    - d6_field_formatter_settings
+    - d6_node_settings
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_revision.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_revision.yml
index c4d4807abebd..537b255ea161 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_revision.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_revision.yml
@@ -29,4 +29,5 @@ process:
 destination:
   plugin: entity_revision:node
 migration_dependencies:
-  - d6_node
+  required:
+    - d6_node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml
index 372371cc4d6a..558538b9b478 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_node_settings.yml
@@ -10,4 +10,5 @@ destination:
   plugin: config
   config_name: node.settings
 migration_dependencies:
-  - d6_node_type
+  required:
+    - d6_node_type
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_profile_values.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_profile_values.yml
index 4f5f1a29e60a..572b0de0f3d5 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_profile_values.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_profile_values.yml
@@ -12,7 +12,8 @@ process:
 destination:
   plugin: entity:user
 migration_dependencies:
-  - d6_user
-  - d6_user_profile_field_instance
-  - d6_user_profile_entity_display
-  - d6_user_profile_entity_form_display
+  required:
+    - d6_user
+    - d6_user_profile_field_instance
+    - d6_user_profile_entity_display
+    - d6_user_profile_entity_form_display
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_term.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_term.yml
index f57a254abd37..fa8764f8428c 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_term.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_taxonomy_term.yml
@@ -22,4 +22,5 @@ process:
 destination:
   plugin: entity:taxonomy_term
 migration_dependencies:
-  - d6_taxonomy_vocabulary
+  required:
+    - d6_taxonomy_vocabulary
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node.yml
index 129798f877c7..f5173c6118ce 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node.yml
@@ -14,6 +14,7 @@ process:
 destination:
   plugin: entity:node
 migration_dependencies:
-  - d6_vocabulary_entity_display
-  - d6_vocabulary_entity_form_display
-  - d6_node
+  required:
+    - d6_vocabulary_entity_display
+    - d6_vocabulary_entity_form_display
+    - d6_node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node_revision.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node_revision.yml
index a9d1f204092a..761d3a78a9a9 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node_revision.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_term_node_revision.yml
@@ -14,5 +14,6 @@ process:
 destination:
   plugin: entity_revision:node
 migration_dependencies:
-  - d6_term_node
-  - d6_node_revision
+  required:
+    - d6_term_node
+    - d6_node_revision
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload.yml
index b831add628e4..241bbe6eee47 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload.yml
@@ -19,5 +19,6 @@ process:
 destination:
   plugin: entity:node
 migration_dependencies:
-  - d6_file
-  - d6_node
+  required:
+    - d6_file
+    - d6_node
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_display.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_display.yml
index ae727c848da8..f91541163ab2 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_display.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_display.yml
@@ -21,4 +21,5 @@ process:
 destination:
   plugin: component_entity_display
 migration_dependencies:
-  - d6_upload_field_instance
+  required:
+    - d6_upload_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_form_display.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_form_display.yml
index 43ead276d66c..f6d8ef95a7a9 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_entity_form_display.yml
@@ -23,4 +23,5 @@ process:
 destination:
   plugin: component_entity_form_display
 migration_dependencies:
-  - d6_upload_field_instance
+  required:
+    - d6_upload_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field_instance.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field_instance.yml
index 6346412f9986..8a85b40d5099 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field_instance.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_upload_field_instance.yml
@@ -17,5 +17,6 @@ process:
 destination:
   plugin: entity:field_instance_config
 migration_dependencies:
-  - d6_upload_field
-  - d6_node_type
+  required:
+    - d6_upload_field
+    - d6_node_type
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user.yml
index c1b9f274cc92..7e25d0402ab2 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user.yml
@@ -33,8 +33,10 @@ destination:
   plugin: entity:user
   md5_passwords: true
 migration_dependencies:
-  - d6_filter_format
-  - d6_user_role
-  - d6_user_picture_entity_display
-  - d6_user_picture_entity_form_display
-  - d6_user_picture_file: false
+  required:
+    - d6_filter_format
+    - d6_user_role
+    - d6_user_picture_entity_display
+    - d6_user_picture_entity_form_display
+  optional:
+    - d6_user_picture_file
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_display.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_display.yml
index e87032ba3e05..ae743523644d 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_display.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_display.yml
@@ -24,4 +24,5 @@ process:
 destination:
   plugin: component_entity_display
 migration_dependencies:
-  - d6_user_picture_field_instance
+  required:
+    - d6_user_picture_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_form_display.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_form_display.yml
index c977440b51a3..a91e2b41119f 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_entity_form_display.yml
@@ -24,4 +24,5 @@ process:
 destination:
   plugin: component_entity_form_display
 migration_dependencies:
-  - d6_user_picture_field_instance
+  required:
+    - d6_user_picture_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field_instance.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field_instance.yml
index e4645e65a96d..22962bf41183 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field_instance.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_field_instance.yml
@@ -24,4 +24,5 @@ process:
 destination:
   plugin: entity:field_instance_config
 migration_dependencies:
-  - d6_user_picture_field
+  required:
+    - d6_user_picture_field
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_file.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_file.yml
index 687674f89063..b97950b51d80 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_file.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_picture_file.yml
@@ -16,4 +16,7 @@ destination:
   plugin: entity:file
   source_path_property: picture
 migration_dependencies:
-  - d6_file: false
+  # Every migration that saves into {file_managed} must have the d6_file
+  # migration as an optional dependency to ensure it runs first.
+  optional:
+    - d6_file
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field_instance.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field_instance.yml
index d967473f5d23..34a77ac6900c 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field_instance.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_user_profile_field_instance.yml
@@ -15,4 +15,5 @@ process:
 destination:
   plugin: entity:field_instance_config
 migration_dependencies:
-  - d6_user_profile_field
+  required:
+    - d6_user_profile_field
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_display.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_display.yml
index 5c62e04ae95d..a81af3935489 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_display.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_display.yml
@@ -22,4 +22,5 @@ process:
 destination:
   plugin: component_entity_display
 migration_dependencies:
-  - d6_vocabulary_field_instance
+  required:
+    - d6_vocabulary_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_form_display.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_form_display.yml
index 6f82b2960ac8..249b3b3ae4d3 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_form_display.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_entity_form_display.yml
@@ -20,4 +20,5 @@ process:
 destination:
   plugin: component_entity_form_display
 migration_dependencies:
-  - d6_vocabulary_field_instance
+  required:
+    - d6_vocabulary_field_instance
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field.yml
index d497dbf0b282..13d3bf68a8fe 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field.yml
@@ -20,4 +20,5 @@ process:
 destination:
   plugin: entity:field_config
 migration_dependencies:
-  - d6_taxonomy_vocabulary
+  required:
+    - d6_taxonomy_vocabulary
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field_instance.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field_instance.yml
index c5c763d8a5dc..215f4707d3e3 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field_instance.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_vocabulary_field_instance.yml
@@ -17,4 +17,5 @@ process:
 destination:
   plugin: entity:field_instance_config
 migration_dependencies:
-  - d6_vocabulary_field
+  required:
+    - d6_vocabulary_field
-- 
GitLab