Esempio n. 1
0
 /**
  * Run a migration to the current version or the given target version.
  *
  * @param string $to The version to migrate to.
  *
  * @throws AntiMattr\MongoDB\Migrations\Exception\UnknownVersionException
  * @throws AntiMattr\MongoDB\Migrations\Exception\NoMigrationsToExecuteException
  */
 public function migrate($to = null)
 {
     if ($to === null) {
         $to = $this->configuration->getLatestVersion();
     }
     $from = $this->configuration->getCurrentVersion();
     $from = (string) $from;
     $to = (string) $to;
     $migrations = $this->configuration->getMigrations();
     if (!isset($migrations[$to]) && $to > 0) {
         throw new UnknownVersionException($to);
     }
     $direction = $from > $to ? 'down' : 'up';
     $migrationsToExecute = $this->configuration->getMigrationsToExecute($direction, $to);
     if ($from === $to && empty($migrationsToExecute) && $migrations) {
         return;
     }
     $this->outputWriter->write(sprintf('Migrating <info>%s</info> to <comment>%s</comment> from <comment>%s</comment>', $direction, $to, $from));
     if (empty($migrationsToExecute)) {
         throw new NoMigrationsToExecuteException('Could not find any migrations to execute.');
     }
     $time = 0;
     foreach ($migrationsToExecute as $version) {
         $versionSql = $version->execute($direction);
         $time += $version->getTime();
     }
     $this->outputWriter->write("\n  <comment>------------------------</comment>\n");
     $this->outputWriter->write(sprintf("  <info>++</info> finished in %s", $time));
     $this->outputWriter->write(sprintf("  <info>++</info> %s migrations executed", count($migrationsToExecute)));
 }
 public function __construct(Version $version)
 {
     $this->configuration = $version->getConfiguration();
     $this->outputWriter = $this->configuration->getOutputWriter();
     $this->connection = $this->configuration->getConnection();
     $this->connection = $this->connection->selectDatabase($this->configuration->getMigrationsDatabaseName());
     $this->version = $version;
 }
 /**
  * @param AntiMattr\MongoDB\Migrations\Configuration\Configuration
  * @param Symfony\Component\Console\Output\OutputInterface
  */
 protected function outputHeader(Configuration $configuration, OutputInterface $output)
 {
     $name = $configuration->getName();
     $name = $name ? $name : 'AntiMattr Database Migrations';
     $name = str_repeat(' ', 20) . $name . str_repeat(' ', 20);
     $output->writeln('<question>' . str_repeat(' ', strlen($name)) . '</question>');
     $output->writeln('<question>' . $name . '</question>');
     $output->writeln('<question>' . str_repeat(' ', strlen($name)) . '</question>');
     $output->writeln('');
 }
Esempio n. 4
0
 public function __construct(Configuration $configuration, $version, $class)
 {
     $this->configuration = $configuration;
     $this->outputWriter = $configuration->getOutputWriter();
     $this->class = $class;
     $this->connection = $configuration->getConnection();
     $this->db = $configuration->getDatabase();
     $this->migration = $this->createMigration();
     $this->version = $version;
 }
 /**
  * @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);
 }
 public static function configureMigrations(ContainerInterface $container, Configuration $configuration)
 {
     $dir = $container->getParameter('mongo_db_migrations.dir_name');
     if (!file_exists($dir)) {
         mkdir($dir, 0777, true);
     }
     $configuration->setMigrationsCollectionName($container->getParameter('mongo_db_migrations.collection_name'));
     $configuration->setMigrationsDatabaseName($container->getParameter('mongo_db_migrations.database_name'));
     $configuration->setMigrationsDirectory($dir);
     $configuration->setMigrationsNamespace($container->getParameter('mongo_db_migrations.namespace'));
     $configuration->setName($container->getParameter('mongo_db_migrations.name'));
     $configuration->registerMigrationsFromDirectory($dir);
     $configuration->setMigrationsScriptDirectory($container->getParameter('mongo_db_migrations.script_dir_name'));
     self::injectContainerToMigrations($container, $configuration->getMigrations());
 }
 /**
  * @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>)');
             }
         }
     }
 }
 /**
  * @param  Configuration $configuration
  * @return string
  */
 protected function getDirectory(Configuration $configuration)
 {
     $dir = $configuration->getMigrationsDirectory() ?: getcwd();
     return rtrim($dir, '/');
 }
Esempio n. 9
0
 public function markNotMigrated()
 {
     $this->configuration->createMigrationCollection();
     $collection = $this->configuration->getCollection();
     $collection->remove(array("v" => $this->version));
 }