[limb-svn] r6525 - misc/migration

svn at limb-project.com svn at limb-project.com
Sat Nov 17 18:38:05 MSK 2007


Author: pachanga
Date: 2007-11-17 18:38:05 +0300 (Sat, 17 Nov 2007)
New Revision: 6525
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6525

Modified:
   misc/migration/mysql.inc.php
   misc/migration/mysql_create_migration.php
   misc/migration/mysql_diff.php
   misc/migration/mysql_dump.php
   misc/migration/mysql_load.php
   misc/migration/mysql_migrate.php
   misc/migration/mysql_sync_tests.php
Log:
-- making mysql migrations more generic

Modified: misc/migration/mysql.inc.php
===================================================================
--- misc/migration/mysql.inc.php	2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql.inc.php	2007-11-17 15:38:05 UTC (rev 6525)
@@ -174,30 +174,32 @@
   echo "done\n";
 }
 
-function get_migration_files_since($base_version)
+function get_migration_files_since($since, $migrations_dir = null)
 {
   $files = array();
-  $migrations_dir = dirname(__FILE__) . '/../init/migrate/';
+  if(!$migrations_dir)
+    $migrations_dir = dirname(__FILE__) . '/../sql/migrate/';
   foreach(glob($migrations_dir . '*') as $file)
   {
     list($version, ) = explode('_', basename($file));
     $version = intval($version);
-    if($version > $base_version)
+    if($version > $since)
       $files[$version] = $file;
   }
   ksort($files);
   return $files;
 }
 
-function get_last_migration_file()
+function get_last_migration_file($migrations_dir = null)
 {
-  $migrations_dir = dirname(__FILE__) . '/../init/migrate/';
+  if(!$migrations_dir)
+    $migrations_dir = dirname(__FILE__) . '/../sql/migrate/';
   $files = glob($migrations_dir . '*');
   krsort($files);
   return reset($files);
 }
 
-function mysql_migrate($host, $user, $password, $database, $since = null)
+function mysql_migrate($host, $user, $password, $database, $since = null, $migrations_dir = null)
 {
   if(!mysql_db_exists($host, $user, $password, $database))
     return;
@@ -211,7 +213,7 @@
   if(is_null($since))
     $since = (int)mysql_exec($host, $user, $password, $database, 'SELECT version FROM schema_info');
 
-  foreach(get_migration_files_since($since) as $version => $file)
+  foreach(get_migration_files_since($since, $migrations_dir) as $version => $file)
   {
     mysql_load($host, $user, $password, $database, $file);
     mysql_exec($host, $user, $password, $database, "UPDATE schema_info SET version=$version;");
@@ -226,20 +228,22 @@
   return (int)mysql_exec($host, $user, $password, $database, 'SELECT version FROM schema_info');
 }
 
-function mysql_test_migration($host, $user, $password)
+function mysql_test_migration($host, $user, $password, $sql_schema = null, $sql_data = null, $migrations_dir = null)
 {
   echo "Testing migration...\n";
 
   $tmp_db = mysql_create_tmp_db($host, $user, $password);
-  $sql_schema = dirname(__FILE__) . '/../init/schema.mysql';
-  $sql_data = dirname(__FILE__) . '/../init/data.mysql';
+  if(!$sql_schema)
+    $sql_schema = dirname(__FILE__) . '/../sql/schema.mysql';
+  if(!$sql_data)
+    $sql_data = dirname(__FILE__) . '/../sql/data.mysql';
 
   mysql_load($host, $user, $password, $tmp_db, $sql_schema);
   mysql_load($host, $user, $password, $tmp_db, $sql_data);
 
   try
   {
-    mysql_migrate($host, $user, $password, $tmp_db);
+    mysql_migrate($host, $user, $password, $tmp_db, null, $migrations_dir);
   }
   catch(Exception $e)
   {

Modified: misc/migration/mysql_create_migration.php
===================================================================
--- misc/migration/mysql_create_migration.php	2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_create_migration.php	2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,9 +1,18 @@
 <?php
-require_once(dirname(__FILE__) . '/../setup.php');
 require_once(dirname(__FILE__) . '/mysql.inc.php');
 
-$since = isset($argv[1]) ? $argv[1] : 0;
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
 
+$curr_dir = dirname(__FILE__);
+$diff_cmd = "php $curr_dir/mysql_diff.php";
+
 if(!isset($argv[1]))
 {
   echo "Specify migration name\n";
@@ -11,19 +20,9 @@
 }
 $name = $argv[1];
 
-$dir = dirname(__FILE__);
-
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
-
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
-$diff_cmd = "php $dir/mysql_diff.php";
-
 if($diff = `$diff_cmd`)
 {
-  $last = get_last_migration_file();
+  $last = get_last_migration_file("$sql_dir/migrate/");
   if(file_get_contents($last) == $diff)
   {
     echo "The last migration file '$last' is identical to the new migration, skipped\n";
@@ -31,13 +30,13 @@
   }
 
   $stamp = time();
-  $file = "$dir/../init/migrate/{$stamp}_{$name}.sql";
+  $file = "$sql_dir/migrate/{$stamp}_{$name}.sql";
 
   echo "Writing new migration to file '$file'...";
   file_put_contents($file, $diff);
   echo "done! (" . strlen($diff). " bytes)\n";
 
-  if(!mysql_test_migration($host, $user, $password))
+  if(!mysql_test_migration($host, $user, $password, $schema, $data))
     echo "\nWARNING: migration has errors, please correct them before committing! Try dry-running it with mysql_migrate.php --dry-run\n";
   
   echo "Updating version info...";
@@ -47,4 +46,3 @@
 else
   echo "There haven't been any changes according to the latest dump\n";
 
-?>

Modified: misc/migration/mysql_diff.php
===================================================================
--- misc/migration/mysql_diff.php	2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_diff.php	2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,23 +1,21 @@
 <?php
-require_once(dirname(__FILE__) . '/../setup.php');
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
 
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
-
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
-$schema = dirname(__FILE__) . '/../init/schema.mysql';
-$data = dirname(__FILE__) . '/../init/data.mysql';
-
 if(preg_match('~INSERT\s+INTO\s+.*schema_info\D+(\d+)~i', file_get_contents($data), $m))
   $since = $m[1];
 else
   $since = -1;
 
-//collecting all not applied migrations
+//collecting all non applied migrations
 $migrations = array();
-foreach(glob(dirname(__FILE__) . '/../init/migrate/*.sql') as $migration)
+foreach(glob("$sql_dir/migrate/*.sql") as $migration)
 {
   list($version,) = explode('_', basename($migration));
   if($since < intval($version))
@@ -984,4 +982,3 @@
            $builder->setMySqlVariable("FOREIGN_KEY_CHECKS", 1)."\n";
   }
 }
-?>

Modified: misc/migration/mysql_dump.php
===================================================================
--- misc/migration/mysql_dump.php	2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_dump.php	2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,18 +1,15 @@
 <?php
-require_once(dirname(__FILE__) . '/../setup.php');
 require_once(dirname(__FILE__) . '/mysql.inc.php');
 
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
 
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
-$charset = $dsn->getCharset();
+mysql_dump_schema($host, $user, $password, $database, $charset, $schema);
+mysql_dump_data($host, $user, $password, $database, $charset, $data);
 
-$sql_schema = dirname(__FILE__) . '/../init/schema.mysql';
-$sql_data = dirname(__FILE__) . '/../init/data.mysql';
-mysql_dump_schema($host, $user, $password, $database, $charset, $sql_schema);
-mysql_dump_data($host, $user, $password, $database, $charset, $sql_data);
-
-?>

Modified: misc/migration/mysql_load.php
===================================================================
--- misc/migration/mysql_load.php	2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_load.php	2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,20 +1,16 @@
 <?php
-require_once(dirname(__FILE__) . '/../setup.php');
 require_once(dirname(__FILE__) . '/mysql.inc.php');
 
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
 
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
-$charset = $dsn->getCharset();
-
-$sql_schema = dirname(__FILE__) . '/../init/schema.mysql';
-$sql_data = dirname(__FILE__) . '/../init/data.mysql';
-
 mysql_db_cleanup($host, $user, $password, $database);
-mysql_dump_load($host, $user, $password, $database, $charset, $sql_schema);
-mysql_dump_load($host, $user, $password, $database, $charset, $sql_data);
+mysql_dump_load($host, $user, $password, $database, $charset, $schema);
+mysql_dump_load($host, $user, $password, $database, $charset, $data);
 
-?>

Modified: misc/migration/mysql_migrate.php
===================================================================
--- misc/migration/mysql_migrate.php	2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_migrate.php	2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,13 +1,15 @@
 <?php
-require_once(dirname(__FILE__) . '/../setup.php');
 require_once(dirname(__FILE__) . '/mysql.inc.php');
 
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
 
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
 $since = null;//do we need this stuff?
 $dry_run = false;
 
@@ -20,14 +22,12 @@
 if($dry_run)
 {
   echo "===== Migrating production DB(dry-run) =====\n";
-  $sql_schema = dirname(__FILE__) . '/../init/schema.mysql';
-  $sql_data = dirname(__FILE__) . '/../init/data.mysql';
   $tmp_db = mysql_create_tmp_db($host, $user, $password);
-  mysql_load($host, $user, $password, $tmp_db, $sql_schema);
-  mysql_load($host, $user, $password, $tmp_db, $sql_data);
+  mysql_load($host, $user, $password, $tmp_db, $schema);
+  mysql_load($host, $user, $password, $tmp_db, $data);
   try
   {
-    mysql_migrate($host, $user, $password, $tmp_db, $since);
+    mysql_migrate($host, $user, $password, $tmp_db, $since, "$sql_dir/migrate/");
   }
   catch(Exception $e)
   {
@@ -42,7 +42,6 @@
 else
 {
   echo "===== Migrating production DB =====\n";
-  mysql_migrate($host, $user, $password, $database, $since);
+  mysql_migrate($host, $user, $password, $database, $since, "$sql_dir/migrate/");
 }
 
-?>

Modified: misc/migration/mysql_sync_tests.php
===================================================================
--- misc/migration/mysql_sync_tests.php	2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_sync_tests.php	2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,17 +1,14 @@
 <?php
-require_once(dirname(__FILE__) . '/../setup.php');
 require_once(dirname(__FILE__) . '/mysql.inc.php');
 
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$tests_database = $database . '_tests';
 
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
+mysql_db_cleanup($host, $user, $password, $tests_database);
 
-mysql_db_cleanup($host, $user, $password, $database . "_tests");
-
 mysql_copy_schema($host, $user, $password, $database,
-                  $host, $user, $password, $database . "_tests");
+                  $host, $user, $password, $tests_database);
 
-?>



More information about the limb-svn mailing list