/**
  * @param Symfony\Component\Console\Input\InputInterface
  * @param Symfony\Component\Console\Output\OutputInterface
  */
 public function execute(InputInterface $input, OutputInterface $output)
 {
     $version = $input->getArgument('version');
     $configuration = $this->getMigrationConfiguration($input, $output);
     $migration = $this->createMigration($configuration);
     $this->outputHeader($configuration, $output);
     $noInteraction = !$input->isInteractive();
     $executedVersions = $configuration->getMigratedVersions();
     $availableVersions = $configuration->getAvailableVersions();
     $executedUnavailableVersions = array_diff($executedVersions, $availableVersions);
     if ($executedUnavailableVersions) {
         $output->writeln(sprintf('<error>WARNING! You have %s previously executed migrations in the database that are not registered migrations.</error>', count($executedUnavailableVersions)));
         foreach ($executedUnavailableVersions as $executedUnavailableVersion) {
             $output->writeln(sprintf('    <comment>>></comment> %s (<comment>%s</comment>)', Configuration::formatVersion($executedUnavailableVersion), $executedUnavailableVersion));
         }
         if (!$noInteraction) {
             $confirmation = $this->getHelper('dialog')->askConfirmation($output, '<question>Are you sure you wish to continue? (y/n)</question>', false);
             if (!$confirmation) {
                 $output->writeln('<error>Migration cancelled!</error>');
                 return 1;
             }
         }
     }
     // warn the user if no dry run and interaction is on
     if (!$noInteraction) {
         $confirmation = $this->getHelper('dialog')->askConfirmation($output, '<question>WARNING! You are about to execute a database migration that could result in data lost. Are you sure you wish to continue? (y/n)</question>', false);
         if (!$confirmation) {
             $output->writeln('<error>Migration cancelled!</error>');
             return 1;
         }
     }
     $migration->migrate($version);
 }
 /**
  * @param Symfony\Component\Console\Input\InputInterface
  * @param Symfony\Component\Console\Output\OutputInterface
  */
 public function execute(InputInterface $input, OutputInterface $output)
 {
     $configuration = $this->getMigrationConfiguration($input, $output);
     $configMap = $configuration->getDetailsMap();
     // Format current version string
     $currentVersion = $configMap['current_version'];
     if ($currentVersion) {
         $currentVersionFormatted = sprintf('%s (<comment>%s</comment>)', Configuration::formatVersion($currentVersion), $currentVersion);
     } else {
         $currentVersionFormatted = 0;
     }
     // Format latest version string
     $latestVersion = $configMap['latest_version'];
     if ($latestVersion) {
         $latestVersionFormatted = sprintf('%s (<comment>%s</comment>)', Configuration::formatVersion($latestVersion), $latestVersion);
     } else {
         $latestVersionFormatted = 0;
     }
     $output->writeln("\n <info>==</info> Configuration\n");
     $numExecutedUnavailableMigrations = $configMap['num_executed_unavailable_migrations'];
     $numNewMigrations = $configMap['num_new_migrations'];
     $info = array('Name' => $configMap['name'], 'Database Driver' => $configMap['database_driver'], 'Database Name' => $configMap['migrations_database_name'], 'Configuration Source' => $configuration instanceof AbstractFileConfiguration ? $configuration->getFile() : 'manually configured', 'Version Collection Name' => $configMap['migrations_collection_name'], 'Migrations Namespace' => $configMap['migrations_namespace'], 'Migrations Directory' => $configMap['migrations_directory'], 'Current Version' => $currentVersionFormatted, 'Latest Version' => $latestVersionFormatted, 'Executed Migrations' => $configMap['num_executed_migrations'], 'Executed Unavailable Migrations' => $numExecutedUnavailableMigrations > 0 ? '<error>' . $numExecutedUnavailableMigrations . '</error>' : 0, 'Available Migrations' => $configMap['num_available_migrations'], 'New Migrations' => $numNewMigrations > 0 ? '<question>' . $numNewMigrations . '</question>' : 0);
     foreach ($info as $name => $value) {
         $this->writeInfoLine($output, $name, $value);
     }
     $showVersions = $input->getOption('show-versions') ? true : false;
     if ($showVersions === true) {
         if ($migrations = $configuration->getMigrations()) {
             $output->writeln("\n <info>==</info> Available Migration Versions\n");
             $migratedVersions = $configuration->getMigratedVersions();
             foreach ($migrations as $version) {
                 $isMigrated = in_array($version->getVersion(), $migratedVersions);
                 $status = $isMigrated ? '<info>migrated</info>' : '<error>not migrated</error>';
                 $output->writeln('    <comment>>></comment> ' . $configuration->formatVersion($version->getVersion()) . ' (<comment>' . $version->getVersion() . '</comment>)' . str_repeat(' ', 30 - strlen($name)) . $status);
             }
         }
         if ($executedUnavailableMigrations) {
             $output->writeln("\n <info>==</info> Previously Executed Unavailable Migration Versions\n");
             foreach ($executedUnavailableMigrations as $executedUnavailableMigration) {
                 $output->writeln('    <comment>>></comment> ' . $configuration->formatVersion($executedUnavailableMigration) . ' (<comment>' . $executedUnavailableMigration . '</comment>)');
             }
         }
     }
 }