function drush_migrate_import in Migrate 6.2
Same name and namespace in other branches
- 6 migrate.drush.inc \drush_migrate_import()
- 7.2 migrate.drush.inc \drush_migrate_import()
Perform import on one or more migrations.
Parameters
$machine_names: A comma delimited list of machine names, or the special name 'all'
File
- ./
migrate.drush.inc, line 1027 - Drush support for the migrate module
Code
function drush_migrate_import($args = NULL) {
try {
$migrations = drush_migrate_get_migrations($args);
$options = array();
if ($idlist = drush_get_option('idlist', FALSE)) {
$options['idlist'] = $idlist;
}
if ($file_function = drush_get_option('file_function', '')) {
$options['file_function'] = $file_function;
}
if (drush_get_option('force', FALSE) == 1) {
$options['force'] = TRUE;
}
$limit = drush_get_option('limit');
if ($limit) {
$parts = explode(' ', $limit);
$options['limit']['value'] = $parts[0];
$options['limit']['unit'] = $parts[1];
if (!$options['limit']['unit']) {
$options['limit']['unit'] = 'items';
}
elseif ($options['limit']['unit'] != 'seconds' && $options['limit']['unit'] != 'second' && $options['limit']['unit'] != 'items' && $options['limit']['unit'] != 'item') {
drush_set_error(NULL, dt("Invalid limit unit '!unit'", array(
'!unit' => $options['limit']['unit'],
)));
return;
}
}
$feedback = drush_get_option('feedback');
if ($feedback) {
$parts = explode(' ', $feedback);
$options['feedback']['value'] = $parts[0];
$options['feedback']['unit'] = $parts[1];
if ($options['feedback']['unit'] != 'seconds' && $options['feedback']['unit'] != 'second' && $options['feedback']['unit'] != 'items' && $options['feedback']['unit'] != 'item') {
drush_set_error(NULL, dt("Invalid feedback frequency unit '!unit'", array(
'!unit' => $options['feedback']['unit'],
)));
return;
}
}
$instrument = drush_get_option('instrument');
global $_migrate_track_memory, $_migrate_track_timer;
switch ($instrument) {
case 'timer':
$_migrate_track_timer = TRUE;
break;
case 'memory':
$_migrate_track_memory = TRUE;
break;
case 'all':
$_migrate_track_timer = TRUE;
$_migrate_track_memory = TRUE;
break;
}
$stop = FALSE;
foreach ($migrations as $machine_name => $migration) {
drush_log(dt("Importing '!description' migration", array(
'!description' => $machine_name,
)));
if (drush_get_option('update')) {
$migration
->prepareUpdate();
}
if (drush_get_option('needs-update')) {
$map_rows = $migration
->getMap()
->getRowsNeedingUpdate(10000);
$idlist = array();
foreach ($map_rows as $row) {
$idlist[] = $row->sourceid1;
}
$options['idlist'] = implode(',', $idlist);
}
// The goal here is to do one migration in the parent process and then
// spawn subshells as needed when memory is depleted. We show feedback
// after each subshell depletes itself. Best we can do in PHP.
if (!drush_get_context('DRUSH_BACKEND')) {
// Our first pass and in the parent process. Run a migration right here.
$status = $migration
->processImport($options);
if ($status == MigrationBase::RESULT_SKIPPED) {
drush_log(dt("Skipping migration !name due to unfulfilled dependencies:\n !depends\nUse the --force option to run it anyway.", array(
'!name' => $machine_name,
'!depends' => implode("\n ", $migration
->incompleteDependencies()),
)), 'warning');
}
elseif ($status == MigrationBase::RESULT_STOPPED) {
break;
}
elseif ($status == MigrationBase::RESULT_INCOMPLETE) {
$stop = TRUE;
}
// Subsequent run in the parent process. Spawn subshells ad infinitum.
$migration_string = implode(',', array_keys($migrations));
while ($status == MigrationBase::RESULT_INCOMPLETE) {
$return = drush_migrate_invoke_process($migration_string);
// 'object' holds the return code we care about.
$status = $return['object']['status'];
$migration_string = $return['object']['migrations'];
if ($status == MigrationBase::RESULT_SKIPPED) {
drush_log(dt("Skipping migration !name due to unfulfilled dependencies:\n !depends\nUse the --force option to run it anyway.", array(
'!name' => $machine_name,
'!depends' => implode("\n ", $migration
->incompleteDependencies()),
)), 'warning');
}
elseif ($status == MigrationBase::RESULT_STOPPED) {
$stop = TRUE;
break;
}
}
}
else {
// I'm in a subshell. Import then set return value so parent process can respawn or move on.
$status = $migration
->processImport($options);
if ($status == MigrationBase::RESULT_SKIPPED) {
drush_log(dt("Skipping migration !name due to unfulfilled dependencies:\n !depends\n", array(
'!name' => $machine_name,
'!depends' => implode("\n ", $migration
->incompleteDependencies()),
)), 'warning');
}
elseif ($status == MigrationBase::RESULT_INCOMPLETE) {
$stop = TRUE;
}
drush_backend_set_result(array(
'status' => $status,
'migrations' => implode(',', array_keys($migrations)),
));
}
if ($stop) {
break;
}
unset($migrations[$machine_name]);
}
} catch (MigrateException $e) {
drush_print($e
->getMessage());
exit;
}
if ($_migrate_track_memory) {
drush_migrate_print_memory();
}
if ($_migrate_track_timer && !drush_get_context('DRUSH_DEBUG')) {
drush_print_timers();
}
}