From: Jan Schneider Date: Wed, 26 Jan 2011 16:41:55 +0000 (+0100) Subject: Add script to run any migration scripts from arbitrary directories. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=04d5c8d87242c091be9a3b22aeb26f8ea85c7678;p=horde.git Add script to run any migration scripts from arbitrary directories. --- diff --git a/framework/Db/bin/horde-db-migrate b/framework/Db/bin/horde-db-migrate new file mode 100755 index 000000000..0404687e7 --- /dev/null +++ b/framework/Db/bin/horde-db-migrate @@ -0,0 +1,102 @@ +#!/usr/bin/env php + + * @author Jan Schneider + */ + +require_once 'Horde/Autoloader/Default.php'; + +// Parse command line arguments +array_shift($_SERVER['argv']); +$args = $params = array(); +foreach ($_SERVER['argv'] as $arg) { + if (substr($arg, 0, 2) == '--') { + $param = substr($arg, 2); + $param = explode('=', $param, 2); + if (count($param) != 2) { + die("The --${param[0]} parameter must have a value.\n"); + } + $params[$param[0]] = $param[1]; + } else { + $args[] = $arg; + } +} +if (empty($args[1])) { + die("horde-db-migrate [--parameter=value ...] directory module [(up|down|version) [debug]]\n"); +} +if (!isset($params['adapter'])) { + die("The --adapter parameter is required. Other parameters may be required depending on the adapter.\n"); +} + +$dir = $args[0]; +$module = $args[1]; +if (!is_dir($dir)) { + die("$dir is not a migration directory"); +} + +$action = 'up'; +if (!empty($args[2])) { + switch ($args[2]) { + case 'up': + case 'down': + $action = $args[2]; + break; + + default: + $action = 'migrate'; + $targetVersion = $args[2]; + break; + } +} + +// Build Horde_Db adapter. +$class = 'Horde_Db_Adapter_' . str_replace(' ', '_', ucwords(str_replace('_', ' ', basename($params['adapter'])))); +if (!class_exists($class)) { + die($params['adapter'] . " is not a valid adapter name.\n"); +} +unset($params['adapter']); +try { + $db = new $class($params); +} catch (Exception $e) { + die($e->getMessage() . "\n"); +} +$logger = new Horde_Log_Logger(new Horde_Log_Handler_Stream(STDOUT)); +if (!empty($args[3]) && strpos($args[3], 'debug') !== false) { + $db->setLogger($logger); +} +$migrator = new Horde_Db_Migration_Migrator($db, $logger, array('migrationsPath' => $dir, 'schemaTableName' => $module . '_schema_info')); + +echo 'Current schema version: ' . $migrator->getCurrentVersion() . "\n"; + +try { + switch ($action) { + case 'up': + echo "Migrating DB up.\n"; + $migrator->up(); + break; + + case 'down': + echo "Migrating DB down.\n"; + $migrator->down(); + break; + + case 'migrate': + echo 'Migrating DB to schema version ' . $targetVersion . ".\n"; + $migrator->migrate($targetVersion); + break; + } +} catch (Exception $e) { + die($e->getMessage() . "\n"); +} + +echo 'Ending schema version: ' . $migrator->getCurrentVersion() . "\n";