Fix migration manager issues | check classes before running migration
This commit is contained in:
@@ -51,7 +51,6 @@
|
||||
<mkdir dir="${basedir}/build/app"/>
|
||||
<mkdir dir="${basedir}/build/release/data"/>
|
||||
<mkdir dir="${basedir}/build/release/data/${env.appname}_${env.Version}"/>
|
||||
<mkdir dir="${basedir}/src/lib"/>
|
||||
|
||||
|
||||
<property name="prepare.done" value="true"/>
|
||||
|
||||
@@ -26,6 +26,7 @@ class RoboFile extends \Robo\Tasks
|
||||
$this->includeCientConfig($client);
|
||||
$this->say("DB Migrating " . $action . " for ". $client);
|
||||
$migrationManager = new \Classes\Migration\MigrationManager();
|
||||
$migrationManager->setMigrationPath(APP_BASE_PATH .'/migrations/');
|
||||
$res = $migrationManager->runMigration($action);
|
||||
$this->say("DB Migrating Result : " . print_r($res, true));
|
||||
}
|
||||
@@ -34,6 +35,7 @@ class RoboFile extends \Robo\Tasks
|
||||
$this->includeCientConfig($client);
|
||||
$this->say("Run all pending migrations " . " for ". $client);
|
||||
$migrationManager = new \Classes\Migration\MigrationManager();
|
||||
$migrationManager->setMigrationPath(APP_BASE_PATH .'/migrations/');
|
||||
$migrationManager->queueMigrations();
|
||||
$migrations = $migrationManager->getPendingMigrations();
|
||||
foreach ($migrations as $migration) {
|
||||
|
||||
@@ -48,7 +48,9 @@ $notificationManager = new \Classes\NotificationManager();
|
||||
\Classes\BaseService::getInstance()->setNotificationManager($notificationManager);
|
||||
\Classes\BaseService::getInstance()->setSettingsManager($settingsManager);
|
||||
\Classes\BaseService::getInstance()->setCustomFieldManager(new \Classes\CustomFieldManager());
|
||||
\Classes\BaseService::getInstance()->setMigrationManager(new \Classes\Migration\MigrationManager());
|
||||
$migrationManager = new \Classes\Migration\MigrationManager();
|
||||
$migrationManager->setMigrationPath(APP_BASE_PATH .'/migrations/');
|
||||
\Classes\BaseService::getInstance()->setMigrationManager($migrationManager);
|
||||
|
||||
$notificationManager->setBaseService($baseService);
|
||||
|
||||
|
||||
@@ -14,18 +14,13 @@ use Utils\LogManager;
|
||||
class MigrationManager
|
||||
{
|
||||
|
||||
private $migration_path;
|
||||
private $migrationPath;
|
||||
|
||||
protected $db = null;
|
||||
|
||||
public function __construct()
|
||||
public function setMigrationPath($migrationPath)
|
||||
{
|
||||
$this->migration_path = APP_BASE_PATH .'/migrations/';
|
||||
}
|
||||
|
||||
public function setMigrationPath($migration_path)
|
||||
{
|
||||
$this->migration_path = $migration_path;
|
||||
$this->migrationPath = $migrationPath;
|
||||
}
|
||||
|
||||
public function getMigrationById($id)
|
||||
@@ -63,10 +58,10 @@ class MigrationManager
|
||||
{
|
||||
|
||||
$migrations = array();
|
||||
$ams = scandir($this->migration_path);
|
||||
$ams = scandir($this->migrationPath);
|
||||
foreach ($ams as $am) {
|
||||
if (is_file($this->migration_path . $am)) {
|
||||
$migrations[$am] = $this->migration_path . $am;
|
||||
if (is_file($this->migrationPath . $am) && $am !== '.' && $am !== '..' && !empty($am)) {
|
||||
$migrations[$am] = $this->migrationPath . $am;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,6 +79,15 @@ class MigrationManager
|
||||
if ($file == 'list.php') {
|
||||
continue;
|
||||
}
|
||||
$this->createMigration($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function createMigration($file)
|
||||
{
|
||||
if (file_exists($this->migrationPath . $file)) {
|
||||
$migration = new Migration();
|
||||
$migration->file = $file;
|
||||
$parts = explode("_", $file);
|
||||
@@ -92,9 +96,9 @@ class MigrationManager
|
||||
$migration->updated = date("Y-m-d H:i:s");
|
||||
$migration->status = 'Pending';
|
||||
$migration->Save();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function runPendingMigrations()
|
||||
@@ -134,6 +138,27 @@ class MigrationManager
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $migrationFileName
|
||||
* @return AbstractMigration
|
||||
*/
|
||||
|
||||
public function getMigrationObject($migrationFileName)
|
||||
{
|
||||
$path = $this->migrationPath . $migrationFileName;
|
||||
$migrationName = str_replace('.php', '', $migrationFileName);
|
||||
$migrationName = '\\Classes\\Migration\\'.$migrationName;
|
||||
|
||||
if (!class_exists($migrationName)) {
|
||||
include $path;
|
||||
}
|
||||
if (!class_exists($migrationName)) {
|
||||
return false;
|
||||
}
|
||||
/* @var AbstractMigration $migClass */
|
||||
return new $migrationName($migrationFileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Migration $migration
|
||||
* @return bool
|
||||
@@ -144,20 +169,14 @@ class MigrationManager
|
||||
return false;
|
||||
}
|
||||
|
||||
$path = $this->migration_path . $migration->file;
|
||||
if (!file_exists($path)) {
|
||||
/* @var AbstractMigration $migObject */
|
||||
$migObject = $this->getMigrationObject($migration->file);
|
||||
if (!$migObject) {
|
||||
return false;
|
||||
}
|
||||
$migrationName = str_replace('.php', '', $migration->file);
|
||||
if (!class_exists('\\Classes\\Migration\\'.$migrationName)) {
|
||||
include $path;
|
||||
}
|
||||
/* @var AbstractMigration $migClass */
|
||||
$migrationName = '\\Classes\\Migration\\'.$migrationName;
|
||||
$migClass = new $migrationName($migration->file);
|
||||
$res = $migClass->up();
|
||||
$res = $migObject->up();
|
||||
if (!$res) {
|
||||
$migration->last_error = $migClass->getLastError();
|
||||
$migration->last_error = $migObject->getLastError();
|
||||
$migration->status = "UpError";
|
||||
$migration->updated = date("Y-m-d H:i:s");
|
||||
$migration->Save();
|
||||
@@ -179,21 +198,14 @@ class MigrationManager
|
||||
return false;
|
||||
}
|
||||
|
||||
$path = $this->migration_path . $migration->file;
|
||||
if (!file_exists($path)) {
|
||||
/* @var AbstractMigration $migObject */
|
||||
$migObject = $this->getMigrationObject($migration->file);
|
||||
if (!$migObject) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$migrationName = str_replace('.php', '', $migration->file);
|
||||
if (!class_exists($migrationName)) {
|
||||
include $path;
|
||||
}
|
||||
/* @var AbstractMigration $migClass */
|
||||
$migrationName = '\\Classes\\Migration\\'.$migrationName;
|
||||
$migClass = new $migrationName($migration->file);
|
||||
$res = $migClass->down();
|
||||
$res = $migObject->down();
|
||||
if (!$res) {
|
||||
$migration->last_error = $migClass->getLastError();
|
||||
$migration->last_error = $migObject->getLastError();
|
||||
$migration->status = "DownError";
|
||||
$migration->updated = date("Y-m-d H:i:s");
|
||||
$migration->Save();
|
||||
@@ -211,7 +223,7 @@ class MigrationManager
|
||||
$migration = new Migration();
|
||||
$migration->Load("1 = 1 order by id desc limit 1");
|
||||
|
||||
include $this->migration_path . "list.php";
|
||||
include $this->migrationPath . "list.php";
|
||||
/* @var array $migrationList */
|
||||
if (count($migrationList) > 0 && (empty($migration->id) || $migrationList[0].".php" != $migration->file)) {
|
||||
LogManager::getInstance()->info("ensureMigrations - execute migrations");
|
||||
|
||||
46
test/integration/MigrationManagerIntegration.php
Normal file
46
test/integration/MigrationManagerIntegration.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 9/17/17
|
||||
* Time: 7:06 PM
|
||||
*/
|
||||
|
||||
namespace Test\Integration;
|
||||
|
||||
|
||||
use Classes\Migration\MigrationManager;
|
||||
use Model\Migration;
|
||||
|
||||
class MigrationManagerIntegration extends \TestTemplate
|
||||
{
|
||||
/* @var MigrationManager $migrationManager */
|
||||
private $migrationManager;
|
||||
protected function setUp(){
|
||||
parent::setUp();
|
||||
$this->migrationManager = new MigrationManager();
|
||||
for ($i = 0; $i < 5; $i++) {
|
||||
$migration = new Migration();
|
||||
$migration->file = 'migration'.$i;
|
||||
$migration->version = '190000';
|
||||
$migration->created = date("Y-m-d H:i:s", intval(time()) - 10 * $i);
|
||||
$migration->updated = date("Y-m-d H:i:s", intval(time()) - 10 * $i);
|
||||
$migration->status = 'Pending';
|
||||
$migration->Save();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected function tearDown(){
|
||||
parent::tearDown();
|
||||
$migration = new Migration();
|
||||
$migration->DB()->execute("delete from Migrations");
|
||||
}
|
||||
|
||||
public function testGetCurrentMigrations() {
|
||||
$migrations = $this->migrationManager->getCurrentMigrations();
|
||||
self::assertEquals(5, count($migrations));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user