From 2dd73a04a2495af0d7aadb9027762fd92ebf00e1 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:16:45 -0600 Subject: [PATCH 01/16] DeleteWikis: rewrite to improve robustness and merge DeleteWiki into it --- maintenance/DeleteWikis.php | 138 +++++++++++++++++++++++++++--------- 1 file changed, 104 insertions(+), 34 deletions(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 5869f517ec..0a978226cc 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -10,61 +10,131 @@ public function __construct() { parent::__construct(); $this->addDescription( - 'Allows complete deletion of wikis with args controlling ' . - 'deletion levels. Will never DROP a database!' + 'Deletes wikis. If the --deletewiki option is provided, deletes a single wiki specified by database name. ' . + 'Otherwise, lists or deletes all wikis marked as deleted (will never DROP a database!). ' . + 'A notification is always sent regardless of mode.' ); - $this->addOption( 'delete', 'Actually performs deletions and not outputs wikis to be deleted', false ); - $this->addArg( 'user', 'Username or reference name of the person running this script. ' . + $this->addOption( 'deletewiki', 'Specify the database name to delete (single deletion mode).', false, true ); + $this->addOption( 'delete', 'Actually performs deletion and not just outputs what would be deleted.' ); + + $this->addOption( 'user', + 'Username or reference name of the person running this script. ' . 'Will be used in tracking and notification internally.', - true ); + true, true ); $this->requireExtension( 'CreateWiki' ); } public function execute(): void { - $databaseUtils = $this->getServiceContainer()->get( 'CreateWikiDatabaseUtils' ); - $wikiManagerFactory = $this->getServiceContainer()->get( 'WikiManagerFactory' ); - - $dbr = $databaseUtils->getGlobalReplicaDB(); - - $res = $dbr->newSelectQueryBuilder() - ->select( '*' ) - ->from( 'cw_wikis' ) - ->where( [ 'wiki_deleted' => 1 ] ) - ->caller( __METHOD__ ) - ->fetchResultSet(); + $user = $this->getOption( 'user' ); + if ( !$user ) { + $this->fatalError( 'Please specify the username of the user executing this script.' ); + } $deletedWikis = []; - foreach ( $res as $row ) { - $wiki = $row->wiki_dbname; - $dbCluster = $row->wiki_dbcluster; + try { + // Single deletion mode + $dbname = $this->getOption( 'deletewiki' ); + if ( $dbname ) { + $deletedWikis[] = $dbname; + if ( $this->hasOption( 'delete' ) ) { + $this->output( + "You are about to delete $dbname from CreateWiki. " . + "This will not DROP the database. If this is wrong, Ctrl-C now!\n" + ); + + // let's count down JUST to be safe! + $this->countDown( 10 ); + + $wikiManager = $this->getServiceContainer()->get( 'WikiManagerFactory' ) + ->newInstance( $dbname ); + $delete = $wikiManager->delete( force: true ); + + if ( $delete ) { + // We don't use fatalError here since that calls + // exit() which would stop the finally block from + // executing and we always want it to execute. + $this->output( "$delete\n" ); + return; + } + + $this->output( "Wiki $dbname deleted.\n" ); + } else { + $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); + } + + return; + } + // Multi deletion mode if ( $this->hasOption( 'delete' ) ) { - $wikiManager = $wikiManagerFactory->newInstance( $wiki ); - $delete = $wikiManager->delete( force: false ); + $this->output( + "You are about to delete all wikis that are marked as deleted from CreateWiki. " . + "This will not DROP any databases. If this is wrong, Ctrl-C now!\n" + ); - if ( $delete ) { - $this->output( "{$wiki}: {$delete}\n" ); - continue; - } + // let's count down JUST to be safe! + $this->countDown( 10 ); + } + + $databaseUtils = $this->getServiceContainer()->get( 'CreateWikiDatabaseUtils' ); + $wikiManagerFactory = $this->getServiceContainer()->get( 'WikiManagerFactory' ); + $dbr = $databaseUtils->getGlobalReplicaDB(); + + $res = $dbr->newSelectQueryBuilder() + ->table( 'cw_wikis' ) + ->fields( [ + 'wiki_dbcluster', + 'wiki_dbname', + ] ) + ->where( [ 'wiki_deleted' => 1 ] ) + ->caller( __METHOD__ ) + ->fetchResultSet(); + + foreach ( $res as $row ) { + $wiki = $row->wiki_dbname; + $dbCluster = $row->wiki_dbcluster; - $this->output( "$dbCluster: DROP DATABASE {$wiki};\n" ); $deletedWikis[] = $wiki; - } else { - $this->output( "$wiki: $dbCluster\n" ); + if ( $this->hasOption( 'delete' ) ) { + $wikiManager = $wikiManagerFactory->newInstance( $wiki ); + $delete = $wikiManager->delete( force: false ); + + if ( $delete ) { + $this->output( "{$wiki}: {$delete}\n" ); + continue; + } + + $this->output( "$dbCluster: DROP DATABASE {$wiki};\n" ); + } else { + $this->output( "$wiki: $dbCluster\n" ); + } } - } - $this->output( "Done.\n" ); + $this->output( "Done.\n" ); + } finally { + // Make sure we notify deletions regardless even + // if an exception occurred, we always want to notify which + // ones have already been deleted. + $this->notifyDeletions( $user, $deletedWikis ); + } + } - $user = $this->getArg( 0 ); - $deletedWikis = implode( ', ', $deletedWikis ); + /** + * Sends a notification about the deletion(s) performed. + * + * @param string $user The username that initiated the deletion. + * @param array $deletedWikis List of wiki names that were deleted or would be deleted. + */ + private function notifyDeletions( string $user, array $deletedWikis ): void { + $deletedWikisList = implode( ', ', $deletedWikis ); + $action = $this->hasOption( 'delete' ) ? 'has deleted' : 'is about to delete'; $message = "Hello!\nThis is an automatic notification from CreateWiki notifying you that " . - "just now {$user} has deleted the following wikis from the CreateWiki and " . - "associated extensions:\n{$deletedWikis}"; + "just now that $user $action the following wiki(s) from CreateWiki and " . + "associated extensions:\n{$deletedWikisList}"; $notificationData = [ 'type' => 'deletion', From edc15c6e35c3d929cc1b57d4ea1e79ae8420c56e Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:17:08 -0600 Subject: [PATCH 02/16] Remove --- maintenance/DeleteWiki.php | 46 -------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 maintenance/DeleteWiki.php diff --git a/maintenance/DeleteWiki.php b/maintenance/DeleteWiki.php deleted file mode 100644 index 3d72f6ebe0..0000000000 --- a/maintenance/DeleteWiki.php +++ /dev/null @@ -1,46 +0,0 @@ -addDescription( 'Deletes a single wiki. Does not drop databases.' ); - - $this->addOption( 'deletewiki', 'Specify the database name to delete.', false, true ); - $this->addOption( 'delete', 'Actually performs deletion and not outputs the wiki to be deleted.', false ); - - $this->requireExtension( 'CreateWiki' ); - } - - public function execute(): void { - $dbname = $this->getOption( 'deletewiki' ); - - if ( !$dbname ) { - $this->fatalError( 'Please specify the database to delete using the --deletewiki option.' ); - } - - if ( $this->hasOption( 'delete' ) ) { - $wikiManager = $this->getServiceContainer()->get( 'WikiManagerFactory' ) - ->newInstance( $dbname ); - - $delete = $wikiManager->delete( force: true ); - - if ( $delete ) { - $this->fatalError( $delete ); - } - - $this->output( "Wiki $dbname deleted.\n" ); - } else { - $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); - } - } -} - -// @codeCoverageIgnoreStart -return DeleteWiki::class; -// @codeCoverageIgnoreEnd From 3b2872cbe82041043f115bb44d213febd6822545 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:18:06 -0600 Subject: [PATCH 03/16] - --- maintenance/DeleteWikis.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 0a978226cc..54ff6569b9 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -134,7 +134,7 @@ private function notifyDeletions( string $user, array $deletedWikis ): void { $message = "Hello!\nThis is an automatic notification from CreateWiki notifying you that " . "just now that $user $action the following wiki(s) from CreateWiki and " . - "associated extensions:\n{$deletedWikisList}"; + "associated extensions:\n$deletedWikisList"; $notificationData = [ 'type' => 'deletion', From d08de02f30d5337be5d306c491c4eb43da08b75c Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:20:38 -0600 Subject: [PATCH 04/16] - --- maintenance/DeleteWikis.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 54ff6569b9..4458913a3c 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -122,12 +122,6 @@ public function execute(): void { } } - /** - * Sends a notification about the deletion(s) performed. - * - * @param string $user The username that initiated the deletion. - * @param array $deletedWikis List of wiki names that were deleted or would be deleted. - */ private function notifyDeletions( string $user, array $deletedWikis ): void { $deletedWikisList = implode( ', ', $deletedWikis ); $action = $this->hasOption( 'delete' ) ? 'has deleted' : 'is about to delete'; From da165250176ebbd9a6104c99af9e7cf0cbe7f284 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:24:50 -0600 Subject: [PATCH 05/16] Fix --- maintenance/DeleteWikis.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 4458913a3c..e46c0bb069 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -38,7 +38,6 @@ public function execute(): void { // Single deletion mode $dbname = $this->getOption( 'deletewiki' ); if ( $dbname ) { - $deletedWikis[] = $dbname; if ( $this->hasOption( 'delete' ) ) { $this->output( "You are about to delete $dbname from CreateWiki. " . @@ -61,8 +60,10 @@ public function execute(): void { } $this->output( "Wiki $dbname deleted.\n" ); + $deletedWikis[] = $dbname; } else { $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); + $deletedWikis[] = $dbname; } return; @@ -97,7 +98,6 @@ public function execute(): void { $wiki = $row->wiki_dbname; $dbCluster = $row->wiki_dbcluster; - $deletedWikis[] = $wiki; if ( $this->hasOption( 'delete' ) ) { $wikiManager = $wikiManagerFactory->newInstance( $wiki ); $delete = $wikiManager->delete( force: false ); @@ -108,8 +108,10 @@ public function execute(): void { } $this->output( "$dbCluster: DROP DATABASE {$wiki};\n" ); + $deletedWikis[] = $wiki; } else { $this->output( "$wiki: $dbCluster\n" ); + $deletedWikis[] = $wiki; } } From 5cf027a486ecf29b9529f9834763345517267479 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:45:01 -0600 Subject: [PATCH 06/16] More handling --- maintenance/DeleteWikis.php | 51 +++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index e46c0bb069..bb31c9811d 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -6,6 +6,9 @@ class DeleteWikis extends Maintenance { + private array $deletedWikis = []; + private bool $notified = false; + public function __construct() { parent::__construct(); @@ -26,13 +29,21 @@ public function __construct() { $this->requireExtension( 'CreateWiki' ); } + private function log( $msg ) { + $logger = $this->getServiceContainer()->get( 'CreateWikiLogger' ); + $logger->debug( "DeleteWikis: $msg" ); + $this->output( "$msg\n" ); + } + public function execute(): void { $user = $this->getOption( 'user' ); if ( !$user ) { $this->fatalError( 'Please specify the username of the user executing this script.' ); } - $deletedWikis = []; + $this->deletedWikis = []; + + register_shutdown_function( [ $this, 'shutdownHandler' ] ); try { // Single deletion mode @@ -52,18 +63,14 @@ public function execute(): void { $delete = $wikiManager->delete( force: true ); if ( $delete ) { - // We don't use fatalError here since that calls - // exit() which would stop the finally block from - // executing and we always want it to execute. - $this->output( "$delete\n" ); - return; + $this->fatalError( $delete ); } - $this->output( "Wiki $dbname deleted.\n" ); - $deletedWikis[] = $dbname; + $this->log( "Wiki $dbname deleted.\n" ); + $this->deletedWikis[] = $dbname; } else { $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); - $deletedWikis[] = $dbname; + $this->deletedWikis[] = $dbname; } return; @@ -103,15 +110,15 @@ public function execute(): void { $delete = $wikiManager->delete( force: false ); if ( $delete ) { - $this->output( "{$wiki}: {$delete}\n" ); + $this->log( "{$wiki}: {$delete}\n" ); continue; } - $this->output( "$dbCluster: DROP DATABASE {$wiki};\n" ); - $deletedWikis[] = $wiki; + $this->log( "$dbCluster: DROP DATABASE {$wiki};\n" ); + $this->deletedWikis[] = $wiki; } else { $this->output( "$wiki: $dbCluster\n" ); - $deletedWikis[] = $wiki; + $this->deletedWikis[] = $wiki; } } @@ -120,12 +127,22 @@ public function execute(): void { // Make sure we notify deletions regardless even // if an exception occurred, we always want to notify which // ones have already been deleted. - $this->notifyDeletions( $user, $deletedWikis ); + $this->notifyDeletions(); } } - private function notifyDeletions( string $user, array $deletedWikis ): void { - $deletedWikisList = implode( ', ', $deletedWikis ); + /** + * Shutdown handler to catch termination of the script. + */ + public function shutdownHandler(): void { + if ( !$this->notified ) { + $this->notifyDeletions(); + } + } + + private function notifyDeletions(): void { + $user = $this->getOption( 'user' ); + $deletedWikisList = implode( ', ', $this->deletedWikis ); $action = $this->hasOption( 'delete' ) ? 'has deleted' : 'is about to delete'; $message = "Hello!\nThis is an automatic notification from CreateWiki notifying you that " . @@ -144,6 +161,8 @@ private function notifyDeletions( string $user, array $deletedWikis ): void { // No receivers, it will send to configured email receivers: [] ); + + $this->notified = true; } } From 2c8ea6f3e08748f8e349efbcdef24d1f7cb8573e Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:47:44 -0600 Subject: [PATCH 07/16] Update --- maintenance/DeleteWikis.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index bb31c9811d..611db0f9cc 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -13,7 +13,7 @@ public function __construct() { parent::__construct(); $this->addDescription( - 'Deletes wikis. If the --deletewiki option is provided, deletes a single wiki specified by database name. ' . + 'Deletes wikis. If the --deletewiki option is provided, deletes a single wiki specified by database. ' . 'Otherwise, lists or deletes all wikis marked as deleted (will never DROP a database!). ' . 'A notification is always sent regardless of mode.' ); From 6026938fb43a093bbdca8a4a4ec13e642af94d79 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:51:42 -0600 Subject: [PATCH 08/16] Fix --- maintenance/DeleteWikis.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 611db0f9cc..55a30879bd 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -29,7 +29,7 @@ public function __construct() { $this->requireExtension( 'CreateWiki' ); } - private function log( $msg ) { + private function log( string $msg ): void { $logger = $this->getServiceContainer()->get( 'CreateWikiLogger' ); $logger->debug( "DeleteWikis: $msg" ); $this->output( "$msg\n" ); From 42b415e3f3ce13fbb818181a03ac7dccbf2bf403 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 17:56:35 -0600 Subject: [PATCH 09/16] Split methods --- maintenance/DeleteWikis.php | 146 ++++++++++++++++++------------------ 1 file changed, 75 insertions(+), 71 deletions(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 55a30879bd..da80a03fc8 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -46,82 +46,13 @@ public function execute(): void { register_shutdown_function( [ $this, 'shutdownHandler' ] ); try { - // Single deletion mode $dbname = $this->getOption( 'deletewiki' ); if ( $dbname ) { - if ( $this->hasOption( 'delete' ) ) { - $this->output( - "You are about to delete $dbname from CreateWiki. " . - "This will not DROP the database. If this is wrong, Ctrl-C now!\n" - ); - - // let's count down JUST to be safe! - $this->countDown( 10 ); - - $wikiManager = $this->getServiceContainer()->get( 'WikiManagerFactory' ) - ->newInstance( $dbname ); - $delete = $wikiManager->delete( force: true ); - - if ( $delete ) { - $this->fatalError( $delete ); - } - - $this->log( "Wiki $dbname deleted.\n" ); - $this->deletedWikis[] = $dbname; - } else { - $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); - $this->deletedWikis[] = $dbname; - } - + $this->processSingleDeletion( $dbname ); return; } - // Multi deletion mode - if ( $this->hasOption( 'delete' ) ) { - $this->output( - "You are about to delete all wikis that are marked as deleted from CreateWiki. " . - "This will not DROP any databases. If this is wrong, Ctrl-C now!\n" - ); - - // let's count down JUST to be safe! - $this->countDown( 10 ); - } - - $databaseUtils = $this->getServiceContainer()->get( 'CreateWikiDatabaseUtils' ); - $wikiManagerFactory = $this->getServiceContainer()->get( 'WikiManagerFactory' ); - $dbr = $databaseUtils->getGlobalReplicaDB(); - - $res = $dbr->newSelectQueryBuilder() - ->table( 'cw_wikis' ) - ->fields( [ - 'wiki_dbcluster', - 'wiki_dbname', - ] ) - ->where( [ 'wiki_deleted' => 1 ] ) - ->caller( __METHOD__ ) - ->fetchResultSet(); - - foreach ( $res as $row ) { - $wiki = $row->wiki_dbname; - $dbCluster = $row->wiki_dbcluster; - - if ( $this->hasOption( 'delete' ) ) { - $wikiManager = $wikiManagerFactory->newInstance( $wiki ); - $delete = $wikiManager->delete( force: false ); - - if ( $delete ) { - $this->log( "{$wiki}: {$delete}\n" ); - continue; - } - - $this->log( "$dbCluster: DROP DATABASE {$wiki};\n" ); - $this->deletedWikis[] = $wiki; - } else { - $this->output( "$wiki: $dbCluster\n" ); - $this->deletedWikis[] = $wiki; - } - } - + $this->processMultipleDeletions(); $this->output( "Done.\n" ); } finally { // Make sure we notify deletions regardless even @@ -131,6 +62,79 @@ public function execute(): void { } } + private function processSingleDeletion( string $dbname ): void { + if ( $this->hasOption( 'delete' ) ) { + $this->output( + "You are about to delete $dbname from CreateWiki. " . + "This will not DROP the database. If this is wrong, Ctrl-C now!\n" + ); + + // Let's count down JUST to be safe! + $this->countDown( 10 ); + + $wikiManager = $this->getServiceContainer()->get( 'WikiManagerFactory' ) + ->newInstance( $dbname ); + $delete = $wikiManager->delete( force: true ); + + if ( $delete ) { + $this->fatalError( $delete ); + } + + $this->log( "Wiki $dbname deleted.\n" ); + $this->deletedWikis[] = $dbname; + } else { + $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); + $this->deletedWikis[] = $dbname; + } + } + + private function processMultipleDeletions(): void { + if ( $this->hasOption( 'delete' ) ) { + $this->output( + "You are about to delete all wikis that are marked as deleted from CreateWiki. " . + "This will not DROP any databases. If this is wrong, Ctrl-C now!\n" + ); + + // Let's count down JUST to be safe! + $this->countDown( 10 ); + } + + $databaseUtils = $this->getServiceContainer()->get( 'CreateWikiDatabaseUtils' ); + $wikiManagerFactory = $this->getServiceContainer()->get( 'WikiManagerFactory' ); + $dbr = $databaseUtils->getGlobalReplicaDB(); + + $res = $dbr->newSelectQueryBuilder() + ->table( 'cw_wikis' ) + ->fields( [ + 'wiki_dbcluster', + 'wiki_dbname', + ] ) + ->where( [ 'wiki_deleted' => 1 ] ) + ->caller( __METHOD__ ) + ->fetchResultSet(); + + foreach ( $res as $row ) { + $wiki = $row->wiki_dbname; + $dbCluster = $row->wiki_dbcluster; + + if ( $this->hasOption( 'delete' ) ) { + $wikiManager = $wikiManagerFactory->newInstance( $wiki ); + $delete = $wikiManager->delete( force: false ); + + if ( $delete ) { + $this->log( "{$wiki}: {$delete}\n" ); + continue; + } + + $this->log( "$dbCluster: DROP DATABASE {$wiki};\n" ); + $this->deletedWikis[] = $wiki; + } else { + $this->output( "$wiki: $dbCluster\n" ); + $this->deletedWikis[] = $wiki; + } + } + } + /** * Shutdown handler to catch termination of the script. */ From f0632db4c9d6ee2c38a8cf7737cf84c05cfeea95 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 18:02:26 -0600 Subject: [PATCH 10/16] Fix --- maintenance/DeleteWikis.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index da80a03fc8..8cc5f99a82 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -29,10 +29,12 @@ public function __construct() { $this->requireExtension( 'CreateWiki' ); } - private function log( string $msg ): void { + private function log( string $msg, bool $output ): void { $logger = $this->getServiceContainer()->get( 'CreateWikiLogger' ); $logger->debug( "DeleteWikis: $msg" ); - $this->output( "$msg\n" ); + if ( $output ) { + $this->output( "$msg\n" ); + } } public function execute(): void { @@ -80,7 +82,7 @@ private function processSingleDeletion( string $dbname ): void { $this->fatalError( $delete ); } - $this->log( "Wiki $dbname deleted.\n" ); + $this->log( "Wiki $dbname deleted.", output: true ); $this->deletedWikis[] = $dbname; } else { $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); @@ -122,11 +124,13 @@ private function processMultipleDeletions(): void { $delete = $wikiManager->delete( force: false ); if ( $delete ) { - $this->log( "{$wiki}: {$delete}\n" ); + $this->log( "{$wiki}: {$delete}", output: true ); continue; } - $this->log( "$dbCluster: DROP DATABASE {$wiki};\n" ); + + $this->log( "Wiki $wiki deleted from $dbCluster.", output: false ); + $this->output( "$dbCluster: DROP DATABASE $wiki;\n" ); $this->deletedWikis[] = $wiki; } else { $this->output( "$wiki: $dbCluster\n" ); From 99a4ca3d1cadc31144e52a1b829a4b0b21322f05 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 18:04:15 -0600 Subject: [PATCH 11/16] - --- maintenance/DeleteWikis.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 8cc5f99a82..f97ddbccc4 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -124,7 +124,7 @@ private function processMultipleDeletions(): void { $delete = $wikiManager->delete( force: false ); if ( $delete ) { - $this->log( "{$wiki}: {$delete}", output: true ); + $this->log( "$wiki: $delete", output: true ); continue; } From 13612c927128bfe315ad470f3011f34411de6240 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 10 Mar 2025 00:11:11 +0000 Subject: [PATCH 12/16] CI: lint code to MediaWiki standards Check commit and GitHub actions for more details --- maintenance/DeleteWikis.php | 1 - 1 file changed, 1 deletion(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index f97ddbccc4..2c5ae20a0a 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -128,7 +128,6 @@ private function processMultipleDeletions(): void { continue; } - $this->log( "Wiki $wiki deleted from $dbCluster.", output: false ); $this->output( "$dbCluster: DROP DATABASE $wiki;\n" ); $this->deletedWikis[] = $wiki; From af45cd281131b102b7e2e1d5581c5750263cd5fd Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sun, 9 Mar 2025 21:40:09 -0600 Subject: [PATCH 13/16] Set notified --- maintenance/DeleteWikis.php | 1 + 1 file changed, 1 insertion(+) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 2c5ae20a0a..def4c4dc18 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -44,6 +44,7 @@ public function execute(): void { } $this->deletedWikis = []; + $this->notified = false; register_shutdown_function( [ $this, 'shutdownHandler' ] ); From ffde4ad5fce064f2f93b5be062263f9835b68271 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sat, 31 May 2025 23:31:00 -0600 Subject: [PATCH 14/16] . --- maintenance/DeleteWiki.php | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 maintenance/DeleteWiki.php diff --git a/maintenance/DeleteWiki.php b/maintenance/DeleteWiki.php new file mode 100644 index 0000000000..3d72f6ebe0 --- /dev/null +++ b/maintenance/DeleteWiki.php @@ -0,0 +1,46 @@ +addDescription( 'Deletes a single wiki. Does not drop databases.' ); + + $this->addOption( 'deletewiki', 'Specify the database name to delete.', false, true ); + $this->addOption( 'delete', 'Actually performs deletion and not outputs the wiki to be deleted.', false ); + + $this->requireExtension( 'CreateWiki' ); + } + + public function execute(): void { + $dbname = $this->getOption( 'deletewiki' ); + + if ( !$dbname ) { + $this->fatalError( 'Please specify the database to delete using the --deletewiki option.' ); + } + + if ( $this->hasOption( 'delete' ) ) { + $wikiManager = $this->getServiceContainer()->get( 'WikiManagerFactory' ) + ->newInstance( $dbname ); + + $delete = $wikiManager->delete( force: true ); + + if ( $delete ) { + $this->fatalError( $delete ); + } + + $this->output( "Wiki $dbname deleted.\n" ); + } else { + $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); + } + } +} + +// @codeCoverageIgnoreStart +return DeleteWiki::class; +// @codeCoverageIgnoreEnd From 7dce93a23b24fae310fb31b1f82b929be25049cc Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sat, 31 May 2025 23:38:36 -0600 Subject: [PATCH 15/16] Delete maintenance/DeleteWiki.php --- maintenance/DeleteWiki.php | 51 -------------------------------------- 1 file changed, 51 deletions(-) delete mode 100644 maintenance/DeleteWiki.php diff --git a/maintenance/DeleteWiki.php b/maintenance/DeleteWiki.php deleted file mode 100644 index 6aecaa49a8..0000000000 --- a/maintenance/DeleteWiki.php +++ /dev/null @@ -1,51 +0,0 @@ -addDescription( 'Deletes a single wiki. Does not drop databases.' ); - - $this->addOption( 'deletewiki', 'Specify the database name to delete.', false, true ); - $this->addOption( 'delete', 'Actually performs deletion and not outputs the wiki to be deleted.', false ); - - $this->requireExtension( 'CreateWiki' ); - } - - private function initServices(): void { - $services = $this->getServiceContainer(); - $this->wikiManagerFactory = $services->get( 'WikiManagerFactory' ); - } - - public function execute(): void { - $this->initServices(); - $dbname = $this->getOption( 'deletewiki' ); - if ( !$dbname ) { - $this->fatalError( 'Please specify the database to delete using the --deletewiki option.' ); - } - - if ( $this->hasOption( 'delete' ) ) { - $wikiManager = $this->wikiManagerFactory->newInstance( $dbname ); - $delete = $wikiManager->delete( force: true ); - if ( $delete ) { - $this->fatalError( $delete ); - } - - $this->output( "Wiki $dbname deleted.\n" ); - } else { - $this->output( "Wiki $dbname would be deleted. Use --delete to actually perform deletion.\n" ); - } - } -} - -// @codeCoverageIgnoreStart -return DeleteWiki::class; -// @codeCoverageIgnoreEnd From 67f52c5901607995089ee3c1007fe9c431ce33e6 Mon Sep 17 00:00:00 2001 From: CosmicAlpha Date: Sat, 31 May 2025 23:52:08 -0600 Subject: [PATCH 16/16] Fix --- maintenance/DeleteWikis.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/maintenance/DeleteWikis.php b/maintenance/DeleteWikis.php index 99d457598e..e9df5dc616 100644 --- a/maintenance/DeleteWikis.php +++ b/maintenance/DeleteWikis.php @@ -8,6 +8,7 @@ use Miraheze\CreateWiki\Services\CreateWikiNotificationsManager; use Miraheze\CreateWiki\Services\WikiManagerFactory; use function implode; +use function register_shutdown_function; class DeleteWikis extends Maintenance { @@ -92,8 +93,7 @@ private function processSingleDeletion( string $dbname ): void { // Let's count down JUST to be safe! $this->countDown( 10 ); - $wikiManager = $this->getServiceContainer()->get( 'WikiManagerFactory' ) - ->newInstance( $dbname ); + $wikiManager = $this->wikiManagerFactory->newInstance( $dbname ); $delete = $wikiManager->delete( force: true ); if ( $delete ) { @@ -139,16 +139,16 @@ private function processMultipleDeletions(): void { $delete = $wikiManager->delete( force: false ); if ( $delete ) { - $this->log( "$wiki: $delete", output: true ); + $this->log( "$dbname: $delete", output: true ); continue; } - $this->log( "Wiki $wiki deleted from $dbCluster.", output: false ); - $this->output( "$dbCluster: DROP DATABASE $wiki;\n" ); - $this->deletedWikis[] = $wiki; + $this->log( "Wiki $dbname deleted from $dbCluster.", output: false ); + $this->output( "$dbCluster: DROP DATABASE $dbname;\n" ); + $this->deletedWikis[] = $dbname; } else { - $this->output( "$wiki: $dbCluster\n" ); - $this->deletedWikis[] = $wiki; + $this->output( "$dbname: $dbCluster\n" ); + $this->deletedWikis[] = $dbname; } } }