diff --git a/core/modules/migrate/src/MigrationStorage.php b/core/modules/migrate/src/MigrationStorage.php deleted file mode 100644 index 282b0c9414ce5e7ad043d0bb750a633ad9f38bef..0000000000000000000000000000000000000000 --- a/core/modules/migrate/src/MigrationStorage.php +++ /dev/null @@ -1,187 +0,0 @@ -queryFactory = $query_factory; - } - - /** - * {@inheritdoc} - */ - public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { - return new static( - $entity_type, - $container->get('config.factory'), - $container->get('uuid'), - $container->get('language_manager'), - $container->get('entity.query.config') - ); - } - - /** - * {@inheritdoc} - */ - public function loadMultiple(array $ids = NULL) { - if ($ids) { - $ids = $this->getVariantIds($ids); - } - /** @var \Drupal\migrate\Plugin\MigrationInterface[] $migrations */ - $migrations = parent::loadMultiple($ids); - - foreach ($migrations as $migration) { - $dependencies = array_map([$this, 'getVariantIds'], $migration->getMigrationDependencies()); - $migration->set('migration_dependencies', $dependencies); - } - - // Build an array of dependencies and set the order of the migrations. - return $this->buildDependencyMigration($migrations, []); - } - - /** - * Splices variant IDs into a list of migration IDs. - * - * IDs which match the template_id:* pattern are shorthand for every variant - * of template_id. This method queries for those variant IDs and splices them - * into the original list. - * - * @param string[] $ids - * A set of migration IDs. - * - * @return string[] - * The expanded list of IDs. - */ - public function getVariantIds(array $ids) { - // Re-index the array numerically, since we need to limit the loop by size. - $ids = array_values($ids); - - $index = 0; - while ($index < count($ids)) { - if (substr($ids[$index], -2) == ':*') { - $template_id = substr($ids[$index], 0, -2); - $variants = $this->queryFactory->get($this->entityType, 'OR') - ->condition('id', $template_id) - ->condition('template', $template_id) - ->execute(); - array_splice($ids, $index, 1, $variants); - $index += count($variants); - } - else { - $index++; - } - } - return $ids; - } - - /** - * {@inheritdoc} - */ - public function buildDependencyMigration(array $migrations, array $dynamic_ids) { - // Migration dependencies defined in the migration storage can be - // 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\Plugin\MigrationInterface $migration */ - $id = $migration->id(); - $requirements[$id] = array(); - $dependency_graph[$id]['edges'] = array(); - $migration_dependencies = $migration->getMigrationDependencies(); - - if (isset($migration_dependencies['required'])) { - foreach ($migration_dependencies['required'] as $dependency) { - if (!isset($dynamic_ids[$dependency])) { - $this->addDependency($requirement_graph, $id, $dependency, $dynamic_ids); - } - $this->addDependency($dependency_graph, $id, $dependency, $dynamic_ids); - } - } - if (isset($migration_dependencies['optional'])) { - foreach ($migration_dependencies['optional'] as $dependency) { - $different = TRUE; - $this->addDependency($dependency_graph, $id, $dependency, $dynamic_ids); - } - } - } - $graph_object = new Graph($dependency_graph); - $dependency_graph = $graph_object->searchAndSort(); - if ($different) { - $graph_object = new Graph($requirement_graph); - $requirement_graph = $graph_object->searchAndSort(); - } - else { - $requirement_graph = $dependency_graph; - } - $weights = array(); - foreach ($migrations as $migration_id => $migration) { - // Populate a weights array to use with array_multisort later. - $weights[] = $dependency_graph[$migration_id]['weight']; - if (!empty($requirement_graph[$migration_id]['paths'])) { - $migration->set('requirements', $requirement_graph[$migration_id]['paths']); - } - } - array_multisort($weights, SORT_DESC, SORT_NUMERIC, $migrations); - - return $migrations; - } - - /** - * Add one or more dependencies to a graph. - * - * @param array $graph - * The graph so far, passed by reference. - * @param int $id - * The migration ID. - * @param string $dependency - * The dependency string. - * @param array $dynamic_ids - * The dynamic ID mapping. - */ - protected function addDependency(array &$graph, $id, $dependency, $dynamic_ids) { - $dependencies = isset($dynamic_ids[$dependency]) ? $dynamic_ids[$dependency] : array($dependency); - if (!isset($graph[$id]['edges'])) { - $graph[$id]['edges'] = array(); - } - $graph[$id]['edges'] += array_combine($dependencies, $dependencies); - } - -} diff --git a/core/modules/migrate/tests/src/Unit/MigrationStorageTest.php b/core/modules/migrate/tests/src/Unit/MigrationStorageTest.php deleted file mode 100644 index 3ff44fae83a6156777d9d7e4c90d06e0823a5ac6..0000000000000000000000000000000000000000 --- a/core/modules/migrate/tests/src/Unit/MigrationStorageTest.php +++ /dev/null @@ -1,118 +0,0 @@ -query = $this->getMock(QueryInterface::class); - $this->query->method('condition') - ->willReturnSelf(); - - $query_factory = $this->getMock(QueryFactoryInterface::class); - $query_factory->method('get') - ->willReturn($this->query); - - $this->storage = new TestMigrationStorage( - $this->getMock(EntityTypeInterface::class), - $this->getMock(ConfigFactoryInterface::class), - $this->getMock(UuidInterface::class), - $this->getMock(LanguageManagerInterface::class), - $query_factory - ); - } - - /** - * Tests getVariantIds() when variants exist. - * - * @covers ::getVariantIds - */ - public function testGetVariantIdsWithVariants() { - $this->query->method('execute') - ->willReturn(['d6_node__page', 'd6_node__article']); - - $ids = $this->storage->getVariantIds(['d6_node:*', 'd6_user']); - $this->assertSame(['d6_node__page', 'd6_node__article', 'd6_user'], $ids); - } - - /** - * Tests getVariantIds() when no variants exist. - * - * @covers ::getVariantIds - */ - public function testGetVariantIdsNoVariants() { - $this->query->method('execute') - ->willReturn([]); - - $ids = $this->storage->getVariantIds(['d6_node:*', 'd6_user']); - $this->assertSame(['d6_user'], $ids); - } - - /** - * Tests getVariantIds(). - * - * This tests getVariantIds() when no variants exist and there are no static - * (non-variant) dependencies. - * - * @covers ::getVariantIds - */ - public function testGetVariantIdsNoVariantsOrStaticDependencies() { - $this->query->method('execute') - ->willReturn([]); - - $ids = $this->storage->getVariantIds(['d6_node:*', 'd6_node_revision:*']); - $this->assertSame([], $ids); - } - -} - -/** - * Test version of \Drupal\migrate\MigrationStorage. - * - * This class exposes protected methods for testing. - */ -class TestMigrationStorage extends MigrationStorage { - - /** - * {@inheritdoc} - */ - public function getVariantIds(array $ids) { - return parent::getVariantIds($ids); - } - -}