From 67df125ef8631dd0547a438e8fa86a450de67dde Mon Sep 17 00:00:00 2001 From: mscherer Date: Fri, 12 Dec 2025 01:41:55 +0100 Subject: [PATCH] Show migration table name in status command output Display which migration tracking table is being used (cake_migrations or phinxlog) in the status command output. This helps users understand which table format they are using during upgrades. Also updates help text to use generic 'migration tracking table' instead of 'phinxlog' since the table name varies based on configuration. --- src/Command/StatusCommand.php | 13 ++++++++---- src/Db/Adapter/AdapterInterface.php | 15 ++++++++++++-- src/Db/Adapter/AdapterWrapper.php | 8 ++++++++ src/Db/Adapter/MigrationsTableStorage.php | 4 ++-- .../Adapter/UnifiedMigrationsTableStorage.php | 4 ++-- src/Migration/Manager.php | 20 ++++++++++++++++--- tests/TestCase/Command/StatusCommandTest.php | 2 ++ 7 files changed, 53 insertions(+), 13 deletions(-) diff --git a/src/Command/StatusCommand.php b/src/Command/StatusCommand.php index 1c773436..b8489746 100644 --- a/src/Command/StatusCommand.php +++ b/src/Command/StatusCommand.php @@ -64,7 +64,7 @@ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionPar 'migrations status -c secondary', 'migrations status -c secondary -f json', 'migrations status --cleanup', - 'Remove *MISSING* migrations from the phinxlog table', + 'Remove *MISSING* migrations from the migration tracking table', ])->addOption('plugin', [ 'short' => 'p', 'help' => 'The plugin to run migrations for', @@ -82,7 +82,7 @@ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionPar 'choices' => ['text', 'json'], 'default' => 'text', ])->addOption('cleanup', [ - 'help' => 'Remove MISSING migrations from the phinxlog table', + 'help' => 'Remove MISSING migrations from the migration tracking table', 'boolean' => true, 'default' => false, ]); @@ -123,6 +123,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int } $migrations = $manager->printStatus($format); + $tableName = $manager->getSchemaTableName(); switch ($format) { case 'json': @@ -134,7 +135,7 @@ public function execute(Arguments $args, ConsoleIo $io): ?int $io->out($migrationString); break; default: - $this->display($migrations, $io); + $this->display($migrations, $io, $tableName); break; } @@ -146,10 +147,14 @@ public function execute(Arguments $args, ConsoleIo $io): ?int * * @param array $migrations * @param \Cake\Console\ConsoleIo $io The console io + * @param string $tableName The migration tracking table name * @return void */ - protected function display(array $migrations, ConsoleIo $io): void + protected function display(array $migrations, ConsoleIo $io, string $tableName): void { + $io->out(sprintf('using migration table %s', $tableName)); + $io->out(''); + if ($migrations) { $rows = []; $rows[] = ['Status', 'Migration ID', 'Migration Name']; diff --git a/src/Db/Adapter/AdapterInterface.php b/src/Db/Adapter/AdapterInterface.php index 8ada1014..c44af6cd 100644 --- a/src/Db/Adapter/AdapterInterface.php +++ b/src/Db/Adapter/AdapterInterface.php @@ -651,9 +651,9 @@ public function createDatabase(string $name, array $options = []): void; public function hasDatabase(string $name): bool; /** - * Cleanup missing migrations from the phinxlog table + * Cleanup missing migrations from the migration tracking table. * - * Removes entries from the phinxlog table for migrations that no longer exist + * Removes entries from the migrations table for migrations that no longer exist * in the migrations directory (marked as MISSING in status output). * * @return void @@ -715,4 +715,15 @@ public function getIo(): ?ConsoleIo; * @return \Cake\Database\Connection The connection */ public function getConnection(): Connection; + + /** + * Gets the schema table name. + * + * Returns the table name used for migration tracking based on configuration: + * - 'cake_migrations' for unified mode + * - 'phinxlog' or '{plugin}_phinxlog' for legacy mode + * + * @return string The migration tracking table name + */ + public function getSchemaTableName(): string; } diff --git a/src/Db/Adapter/AdapterWrapper.php b/src/Db/Adapter/AdapterWrapper.php index dba0f368..75ee7199 100644 --- a/src/Db/Adapter/AdapterWrapper.php +++ b/src/Db/Adapter/AdapterWrapper.php @@ -572,4 +572,12 @@ public function getIo(): ?ConsoleIo { return $this->getAdapter()->getIo(); } + + /** + * @inheritDoc + */ + public function getSchemaTableName(): string + { + return $this->getAdapter()->getSchemaTableName(); + } } diff --git a/src/Db/Adapter/MigrationsTableStorage.php b/src/Db/Adapter/MigrationsTableStorage.php index e67c40bd..a859d262 100644 --- a/src/Db/Adapter/MigrationsTableStorage.php +++ b/src/Db/Adapter/MigrationsTableStorage.php @@ -60,9 +60,9 @@ public function getVersions(array $orderBy): SelectQuery } /** - * Cleanup missing migrations from the phinxlog table + * Cleanup missing migrations from the migration tracking table. * - * Removes entries from the phinxlog table for migrations that no longer exist + * Removes entries from the migrations table for migrations that no longer exist * in the migrations directory (marked as MISSING in status output). * * @param array $missingVersions The list of missing migration versions. diff --git a/src/Db/Adapter/UnifiedMigrationsTableStorage.php b/src/Db/Adapter/UnifiedMigrationsTableStorage.php index 2562247d..fab2cf68 100644 --- a/src/Db/Adapter/UnifiedMigrationsTableStorage.php +++ b/src/Db/Adapter/UnifiedMigrationsTableStorage.php @@ -47,9 +47,9 @@ public function __construct( } /** - * Cleanup missing migrations from the phinxlog table + * Cleanup missing migrations from the migration tracking table. * - * Removes entries from the phinxlog table for migrations that no longer exist + * Removes entries from the migrations table for migrations that no longer exist * in the migrations directory (marked as MISSING in status output). * * @param array $missingVersions The list of missing migration versions. diff --git a/src/Migration/Manager.php b/src/Migration/Manager.php index 96785b15..bb32ce69 100644 --- a/src/Migration/Manager.php +++ b/src/Migration/Manager.php @@ -1331,9 +1331,23 @@ public function resetSeeds(): void } /** - * Cleanup missing migrations from the phinxlog table + * Gets the schema table name being used for migration tracking. * - * Removes entries from the phinxlog table for migrations that no longer exist + * Returns the actual table name based on current configuration: + * - 'cake_migrations' for unified mode + * - 'phinxlog' or '{plugin}_phinxlog' for legacy mode + * + * @return string The migration tracking table name + */ + public function getSchemaTableName(): string + { + return $this->getEnvironment()->getAdapter()->getSchemaTableName(); + } + + /** + * Cleanup missing migrations from the migration tracking table. + * + * Removes entries from the migrations table for migrations that no longer exist * in the migrations directory (marked as MISSING in status output). * * @return int The number of missing migrations removed @@ -1345,7 +1359,7 @@ public function cleanupMissingMigrations(): int $versions = $env->getVersionLog(); $adapter = $env->getAdapter(); - // Find missing migrations (those in phinxlog but not in filesystem) + // Find missing migrations (those in migration table but not in filesystem) $missingVersions = []; foreach ($versions as $versionId => $versionInfo) { if (!isset($defaultMigrations[$versionId])) { diff --git a/tests/TestCase/Command/StatusCommandTest.php b/tests/TestCase/Command/StatusCommandTest.php index e342d6d4..48acaf22 100644 --- a/tests/TestCase/Command/StatusCommandTest.php +++ b/tests/TestCase/Command/StatusCommandTest.php @@ -28,6 +28,8 @@ public function testExecuteSimple(): void { $this->exec('migrations status -c test'); $this->assertExitSuccess(); + // Check for table name info + $this->assertOutputContains('using migration table'); // Check for headers $this->assertOutputContains('Status'); $this->assertOutputContains('Migration ID');