Issue #2599152 by mikeryan, jhedstrom: ROLLBACK_PRESERVE is not respected
parent
23236e0f1d
commit
0bccb26cdf
|
|
@ -330,11 +330,14 @@ class MigrateExecutable implements MigrateExecutableInterface {
|
||||||
foreach ($id_map as $map_row) {
|
foreach ($id_map as $map_row) {
|
||||||
$destination_key = $id_map->currentDestination();
|
$destination_key = $id_map->currentDestination();
|
||||||
if ($destination_key) {
|
if ($destination_key) {
|
||||||
|
$map_row = $id_map->getRowByDestination($destination_key);
|
||||||
|
if ($map_row['rollback_action'] == MigrateIdMapInterface::ROLLBACK_DELETE) {
|
||||||
$this->getEventDispatcher()
|
$this->getEventDispatcher()
|
||||||
->dispatch(MigrateEvents::PRE_ROW_DELETE, new MigrateRowDeleteEvent($this->migration, $destination_key));
|
->dispatch(MigrateEvents::PRE_ROW_DELETE, new MigrateRowDeleteEvent($this->migration, $destination_key));
|
||||||
$destination->rollback($destination_key);
|
$destination->rollback($destination_key);
|
||||||
$this->getEventDispatcher()
|
$this->getEventDispatcher()
|
||||||
->dispatch(MigrateEvents::POST_ROW_DELETE, new MigrateRowDeleteEvent($this->migration, $destination_key));
|
->dispatch(MigrateEvents::POST_ROW_DELETE, new MigrateRowDeleteEvent($this->migration, $destination_key));
|
||||||
|
}
|
||||||
// We're now done with this row, so remove it from the map.
|
// We're now done with this row, so remove it from the map.
|
||||||
$id_map->deleteDestination($destination_key);
|
$id_map->deleteDestination($destination_key);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ namespace Drupal\migrate\Tests;
|
||||||
|
|
||||||
use Drupal\migrate\Entity\Migration;
|
use Drupal\migrate\Entity\Migration;
|
||||||
use Drupal\migrate\MigrateExecutable;
|
use Drupal\migrate\MigrateExecutable;
|
||||||
|
use Drupal\migrate\Plugin\MigrateIdMapInterface;
|
||||||
|
use Drupal\migrate\Row;
|
||||||
use Drupal\taxonomy\Entity\Term;
|
use Drupal\taxonomy\Entity\Term;
|
||||||
use Drupal\taxonomy\Entity\Vocabulary;
|
use Drupal\taxonomy\Entity\Vocabulary;
|
||||||
|
|
||||||
|
|
@ -112,6 +114,12 @@ class MigrateRollbackTest extends MigrateTestBase {
|
||||||
// Import and validate term entities were created.
|
// Import and validate term entities were created.
|
||||||
$term_executable = new MigrateExecutable($term_migration, $this);
|
$term_executable = new MigrateExecutable($term_migration, $this);
|
||||||
$term_executable->import();
|
$term_executable->import();
|
||||||
|
// Mark one row to be preserved on rollback.
|
||||||
|
$preserved_term_id = 2;
|
||||||
|
$map_row = $term_id_map->getRowBySource(['id' => $preserved_term_id]);
|
||||||
|
$dummy_row = new Row(['id' => $preserved_term_id], $ids);
|
||||||
|
$term_id_map->saveIdMapping($dummy_row, [$map_row['destid1']],
|
||||||
|
$map_row['source_row_status'], MigrateIdMapInterface::ROLLBACK_PRESERVE);
|
||||||
foreach ($term_data_rows as $row) {
|
foreach ($term_data_rows as $row) {
|
||||||
/** @var Term $term */
|
/** @var Term $term */
|
||||||
$term = Term::load($row['id']);
|
$term = Term::load($row['id']);
|
||||||
|
|
@ -124,7 +132,12 @@ class MigrateRollbackTest extends MigrateTestBase {
|
||||||
$term_executable->rollback();
|
$term_executable->rollback();
|
||||||
foreach ($term_data_rows as $row) {
|
foreach ($term_data_rows as $row) {
|
||||||
$term = Term::load($row['id']);
|
$term = Term::load($row['id']);
|
||||||
|
if ($row['id'] == $preserved_term_id) {
|
||||||
|
$this->assertNotNull($term);
|
||||||
|
}
|
||||||
|
else {
|
||||||
$this->assertNull($term);
|
$this->assertNull($term);
|
||||||
|
}
|
||||||
$map_row = $term_id_map->getRowBySource(['id' => $row['id']]);
|
$map_row = $term_id_map->getRowBySource(['id' => $row['id']]);
|
||||||
$this->assertFalse($map_row);
|
$this->assertFalse($map_row);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue