mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-30 21:40:43 +02:00
Merge branch '3.1.x' into 3.2.x
* 3.1.x: [ticket/14831] Rename migration and replace preg_replace() with simpler methods [ticket/14831] Compare depends_on for migrations and remove prefixless names [ticket/14831] Add migration for deduplicating entries and fix typo [ticket/14831] Add method for getting valid migration name [ticket/14831] Fall back to possible migration names instead of adding prefix [ticket/14831] Make sure migrations always start with backslash
This commit is contained in:
@@ -242,6 +242,34 @@ class migrator
|
||||
$this->container->get('dispatcher')->enable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a valid migration name from the migration state array in case the
|
||||
* supplied name is not in the migration state list.
|
||||
*
|
||||
* @param string $name Migration name
|
||||
* @return string Migration name
|
||||
*/
|
||||
protected function get_valid_name($name)
|
||||
{
|
||||
// Try falling back to a valid migration name with or without leading backslash
|
||||
if (!isset($this->migration_state[$name]))
|
||||
{
|
||||
$prepended_name = ($name[0] == '\\' ? '' : '\\') . $name;
|
||||
$prefixless_name = $name[0] == '\\' ? substr($name, 1) : $name;
|
||||
|
||||
if (isset($this->migration_state[$prepended_name]))
|
||||
{
|
||||
$name = $prepended_name;
|
||||
}
|
||||
else if (isset($this->migration_state[$prefixless_name]))
|
||||
{
|
||||
$name = $prefixless_name;
|
||||
}
|
||||
}
|
||||
|
||||
return $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Effectively runs a single update step from the next migration to be applied.
|
||||
*
|
||||
@@ -251,6 +279,8 @@ class migrator
|
||||
{
|
||||
foreach ($this->migrations as $name)
|
||||
{
|
||||
$name = $this->get_valid_name($name);
|
||||
|
||||
if (!isset($this->migration_state[$name]) ||
|
||||
!$this->migration_state[$name]['migration_schema_done'] ||
|
||||
!$this->migration_state[$name]['migration_data_done'])
|
||||
@@ -306,6 +336,9 @@ class migrator
|
||||
|
||||
foreach ($state['migration_depends_on'] as $depend)
|
||||
{
|
||||
$depend = $this->get_valid_name($depend);
|
||||
|
||||
// Test all possible namings before throwing exception
|
||||
if ($this->unfulfillable($depend) !== false)
|
||||
{
|
||||
throw new \phpbb\db\migration\exception('MIGRATION_NOT_FULFILLABLE', $name, $depend);
|
||||
@@ -829,6 +862,8 @@ class migrator
|
||||
*/
|
||||
public function unfulfillable($name)
|
||||
{
|
||||
$name = $this->get_valid_name($name);
|
||||
|
||||
if (isset($this->migration_state[$name]) || isset($this->fulfillable_migrations[$name]))
|
||||
{
|
||||
return false;
|
||||
@@ -844,6 +879,7 @@ class migrator
|
||||
|
||||
foreach ($depends as $depend)
|
||||
{
|
||||
$depend = $this->get_valid_name($depend);
|
||||
$unfulfillable = $this->unfulfillable($depend);
|
||||
if ($unfulfillable !== false)
|
||||
{
|
||||
|
Reference in New Issue
Block a user