diff --git a/src/Configurations/DefaultConfiguration.php b/src/Configurations/DefaultConfiguration.php old mode 100644 new mode 100755 index fc71bbb..c1379de --- a/src/Configurations/DefaultConfiguration.php +++ b/src/Configurations/DefaultConfiguration.php @@ -48,16 +48,32 @@ class DefaultConfiguration implements IConfiguration /** @var ?IDiffGenerator */ protected $dummyDataDiffGenerator; + /** @var bool */ + protected $checkChecksum; + + /** @var bool */ + protected $checkMissingPreviousExecuted; /** * @param array $phpParams */ - public function __construct(string $dir, IDriver $driver, bool $withDummyData = true, array $phpParams = []) + public function __construct( + string $dir, + IDriver $driver, + bool $withDummyData = true, + array $phpParams = [], + bool $checkChecksum, + bool $checkDependMigration, + bool $checkMissingPreviousExecuted, + ) { $this->dir = $dir; $this->driver = $driver; $this->withDummyData = $withDummyData; $this->phpParams = $phpParams; + $this->checkChecksum = $checkChecksum; + $this->checkDependMigration = $checkDependMigration; + $this->checkMissingPreviousExecuted = $checkMissingPreviousExecuted; } @@ -66,6 +82,9 @@ public function getGroups(): array if ($this->groups === null) { $structures = new Group(); $structures->enabled = true; + $structures->checkChecksum = $this->checkChecksum; + $structures->checkDependMigration = $this->checkDependMigration; + $structures->checkMissingPreviousExecuted = $this->checkMissingPreviousExecuted; $structures->name = 'structures'; $structures->directory = $this->dir . '/structures'; $structures->dependencies = []; @@ -73,12 +92,18 @@ public function getGroups(): array $basicData = new Group(); $basicData->enabled = true; + $basicData->checkChecksum = $this->checkChecksum; + $basicData->checkDependMigration = $this->checkDependMigration; + $basicData->checkMissingPreviousExecuted = $this->checkMissingPreviousExecuted; $basicData->name = 'basic-data'; $basicData->directory = $this->dir . '/basic-data'; $basicData->dependencies = ['structures']; $dummyData = new Group(); $dummyData->enabled = $this->withDummyData; + $dummyData->checkChecksum = $this->checkChecksum; + $basicData->checkDependMigration = $this->checkDependMigration; + $dummyData->checkMissingPreviousExecuted = $this->checkMissingPreviousExecuted; $dummyData->name = 'dummy-data'; $dummyData->directory = $this->dir . '/dummy-data'; $dummyData->dependencies = ['structures', 'basic-data']; diff --git a/src/Controllers/BaseController.php b/src/Controllers/BaseController.php old mode 100644 new mode 100755 index 2295c10..56ffdbe --- a/src/Controllers/BaseController.php +++ b/src/Controllers/BaseController.php @@ -40,16 +40,26 @@ public function __construct(IDriver $driver) abstract public function run(): void; - /** - * @param list $dependencies - */ - public function addGroup(string $name, string $dir, array $dependencies = []): self + /** + * @param list $dependencies + */ + public function addGroup( + string $name, + string $dir, + array $dependencies = [], + bool $checkChecksum = true, + bool $checkMissingPreviousExecuted = true, + bool $checkDependMigration = true, + ): self { $group = new Group; $group->name = $name; $group->directory = $dir; $group->dependencies = $dependencies; $group->enabled = false; + $group->checkChecksum = $checkChecksum; + $group->checkMissingPreviousExecuted = $checkMissingPreviousExecuted; + $group->checkDependMigration = $checkDependMigration; $this->groups[$name] = $group; return $this; diff --git a/src/Engine/OrderResolver.php b/src/Engine/OrderResolver.php old mode 100644 new mode 100755 index 0f77c18..b93dfe1 --- a/src/Engine/OrderResolver.php +++ b/src/Engine/OrderResolver.php @@ -17,6 +17,7 @@ class OrderResolver { + /** * @param list $migrations * @param list $groups @@ -58,7 +59,7 @@ public function resolve(array $migrations, array $groups, array $files, string $ if (isset($files[$groupName][$filename])) { $file = $files[$groupName][$filename]; - if ($migration->checksum !== $file->checksum) { + if ($group->checkChecksum && $migration->checksum !== $file->checksum) { throw new LogicException(sprintf( 'Previously executed migration "%s/%s" has been changed. File checksum is "%s", but executed migration had checksum "%s".', $groupName, $filename, $file->checksum, $migration->checksum @@ -66,7 +67,7 @@ public function resolve(array $migrations, array $groups, array $files, string $ } unset($files[$groupName][$filename]); - } elseif ($group->enabled) { + } elseif ($group->checkMissingPreviousExecuted && $group->enabled) { throw new LogicException(sprintf( 'Previously executed migration "%s/%s" is missing.', $groupName, $filename @@ -87,6 +88,10 @@ public function resolve(array $migrations, array $groups, array $files, string $ continue; } + if (!$group->checkDependMigration) { + continue; + } + foreach ($this->getFirstFiles($files) as $file) { if (strcmp($file->name, $lastMigrations[$group->name]) >= 0) { continue; diff --git a/src/Entities/Group.php b/src/Entities/Group.php old mode 100644 new mode 100755 index 146db30..8e866ff --- a/src/Entities/Group.php +++ b/src/Entities/Group.php @@ -23,6 +23,15 @@ class Group /** @var bool */ public $enabled; + /** @var bool */ + public $checkChecksum = true; + + /** @var bool */ + public $checkDependMigration = true; + + /** @var bool */ + public $checkMissingPreviousExecuted = true; + /** @var string absolute path do directory */ public $directory;