Example #1
0
function main($args)
{
    //input sanity check
    if (!is_array($args) || is_array($args) && !array_key_exists('name', $args)) {
        print_help(true);
    }
    $migration_name = $args['name'];
    //clear any filesystem stats cache
    clearstatcache();
    //check to make sure our migration directory exists
    if (!is_dir(MIGRATION_DIR)) {
        die_with_error("ERROR: migration directory '" . MIGRATION_DIR . "' does not exist. Specify MIGRATION_DIR in config/config.inc.php and try again.");
    }
    //generate a complete complete
    $highest_version = VersionUtil::get_highest_migration(MIGRATION_DIR);
    $next_version = VersionUtil::to_migration_number($highest_version + 1);
    $klass = NamingUtil::camelcase($migration_name);
    $file_name = $next_version . '_' . $klass . '.php';
    $full_path = realpath(MIGRATION_DIR) . '/' . $file_name;
    $template_str = get_template($klass);
    //check to make sure our destination directory is writable
    if (!is_writable(MIGRATION_DIR . '/')) {
        die_with_error("ERROR: migration directory '" . MIGRATION_DIR . "' is not writable by the current user. Check permissions and try again.");
    }
    //write it out!
    $file_result = file_put_contents($full_path, $template_str);
    if ($file_result === FALSE) {
        die_with_error("Error writing to migrations directory/file. Do you have sufficient privileges?");
    } else {
        echo "\nCreated migration: {$file_name}\n\n";
    }
}
Example #2
0
 public function execute($args)
 {
     $output = "";
     if (!$this->adapter->supports_migrations()) {
         die("This database does not support migrations.");
     }
     $this->task_args = $args;
     echo "Started: " . date('Y-m-d g:ia T') . "\n\n";
     echo "[db:migrate]: \n";
     try {
         // Check that the schema_info table exists, and if not, automatically create it
         $this->verify_environment();
         $goto_version = 1;
         //$this->extract_args($args);
         $db_version = $this->get_db_version();
         //did the user specify a version?
         if (array_key_exists('VERSION', $this->task_args)) {
             $goto_version = (int) $this->task_args['VERSION'];
         } else {
             //get the highest file version
             $goto_version = VersionUtil::get_highest_migration(MIGRATION_DIR);
         }
         if ($db_version == $goto_version) {
             //nothing to do
             echo "\tNo migrations to run. DB is already at the current version ({$db_version}).\n";
         } else {
             if ($db_version > $goto_version) {
                 //GOING DOWN
                 $output = $this->migrate_down($goto_version, $db_version);
             } else {
                 if ($db_version < $goto_version) {
                     //GOING UP
                     $output = $this->migrate_up($db_version, $goto_version);
                 }
             }
         }
         if (!empty($output)) {
             echo $output . "\n\n";
         }
     } catch (MissingSchemaInfoTableException $ex) {
         echo "\tSchema info table does not exist. I tried creating it but failed. Check permissions.";
     } catch (MissingMigrationDirException $ex) {
         echo "\tMigration directory does not exist: " . MIGRATION_DIR;
     } catch (Exception $ex) {
         die("\n\n" . $ex->getMessage() . "\n\n");
     }
     echo "\n\nFinished: " . date('Y-m-d g:ia T') . "\n\n";
 }
Example #3
0
 public function test_get_highest_migration()
 {
     $this->assertEquals(3, VersionUtil::get_highest_migration(MIGRATION_DIR));
 }