From 9e34eeff23fdd46a8e9bddfbab39d45eab232827 Mon Sep 17 00:00:00 2001 From: Bryan Davis Date: Sun, 19 Nov 2017 17:36:54 -0700 Subject: [PATCH] Maintenance: add fatalError() method Deprecate the second argument to Maintenance::error() in favor of a new Maintenance::fatalError() method. This is intended to make it easier to review flow control in maintenance scripts. Change-Id: I75699008638f7e99b11210c7bb9e2e131fca7c9e --- RELEASE-NOTES-1.31 | 2 + maintenance/Maintenance.php | 36 ++++++++++------ maintenance/backup.inc | 4 -- maintenance/benchmarks/benchmarkJSMinPlus.php | 2 +- maintenance/benchmarks/benchmarkParse.php | 2 +- maintenance/benchmarks/benchmarkPurge.php | 2 +- maintenance/benchmarks/benchmarkTidy.php | 6 +-- maintenance/changePassword.php | 6 +-- maintenance/checkComposerLockUpToDate.php | 10 ++--- maintenance/cleanupSpam.php | 4 +- maintenance/cleanupTitles.php | 2 +- maintenance/cleanupUploadStash.php | 2 +- maintenance/compareParsers.php | 2 +- .../convertExtensionToRegistration.php | 18 ++++---- maintenance/copyFileBackend.php | 14 +++---- maintenance/copyJobQueue.php | 4 +- maintenance/createAndPromote.php | 8 ++-- maintenance/createCommonPasswordCdb.php | 6 +-- maintenance/deleteBatch.php | 4 +- maintenance/deleteDefaultMessages.php | 2 +- maintenance/deleteEqualMessages.php | 4 +- maintenance/dumpBackup.php | 2 +- maintenance/dumpIterator.php | 6 +-- maintenance/edit.php | 8 ++-- maintenance/eraseArchivedFile.php | 6 +-- maintenance/exportSites.php | 2 +- maintenance/findHooks.php | 2 +- maintenance/findOrphanedFiles.php | 4 +- maintenance/fixDoubleRedirects.php | 2 +- maintenance/fixTimestamps.php | 6 +-- maintenance/formatInstallDoc.php | 6 +-- maintenance/generateJsonI18n.php | 16 +++---- maintenance/generateSitemap.php | 2 +- maintenance/getConfiguration.php | 2 +- maintenance/getText.php | 6 +-- maintenance/hhvm/makeRepo.php | 6 +-- maintenance/importDump.php | 6 +-- maintenance/importImages.php | 6 +-- maintenance/importTextFiles.php | 6 +-- maintenance/install.php | 6 +-- maintenance/invalidateUserSessions.php | 6 +-- .../language/generateCollationData.php | 12 ++---- .../language/generateNormalizerDataAr.php | 9 ++-- maintenance/language/langmemusage.php | 2 +- maintenance/makeTestEdits.php | 2 +- maintenance/manageJobs.php | 2 +- maintenance/mctest.php | 4 +- maintenance/mergeMessageFileList.php | 4 +- maintenance/migrateFileRepoLayout.php | 4 +- maintenance/migrateUserGroup.php | 2 +- maintenance/minify.php | 17 +++----- maintenance/moveBatch.php | 4 +- maintenance/mwdocgen.php | 6 +-- maintenance/pageExists.php | 2 +- maintenance/populateContentModel.php | 4 +- maintenance/populateImageSha1.php | 4 +- maintenance/populateRevisionLength.php | 4 +- maintenance/populateRevisionSha1.php | 4 +- maintenance/protect.php | 4 +- maintenance/pruneFileCache.php | 8 ++-- maintenance/purgeParserCache.php | 4 +- maintenance/reassignEdits.php | 2 +- maintenance/rebuildFileCache.php | 8 ++-- maintenance/rebuildLocalisationCache.php | 2 +- maintenance/rebuildSitesCache.php | 2 +- maintenance/rebuildrecentchanges.php | 2 +- maintenance/rebuildtextindex.php | 10 ++--- maintenance/recountCategories.php | 2 +- maintenance/refreshImageMetadata.php | 4 +- maintenance/refreshLinks.php | 4 +- maintenance/removeUnusedAccounts.php | 2 +- maintenance/renameDbPrefix.php | 2 +- maintenance/resetUserEmail.php | 4 +- maintenance/rollbackEdits.php | 2 +- maintenance/runJobs.php | 2 +- maintenance/shell.php | 2 +- maintenance/sql.php | 14 ++++--- maintenance/sqlite.php | 2 +- maintenance/storage/checkStorage.php | 42 +++++++++++-------- maintenance/storage/compressOld.php | 4 +- maintenance/storage/dumpRev.php | 2 +- maintenance/storage/orphanStats.php | 2 +- maintenance/syncFileBackend.php | 6 +-- maintenance/undelete.php | 4 +- maintenance/update.php | 20 ++++----- maintenance/updateDoubleWidthSearch.php | 2 +- maintenance/updateExtensionJsonSchema.php | 4 +- maintenance/updateRestrictions.php | 4 +- maintenance/updateSpecialPages.php | 2 +- maintenance/userOptions.php | 2 +- maintenance/validateRegistrationFile.php | 4 +- maintenance/view.php | 6 +-- maintenance/wrapOldPasswords.php | 4 +- 93 files changed, 260 insertions(+), 262 deletions(-) diff --git a/RELEASE-NOTES-1.31 b/RELEASE-NOTES-1.31 index f1fd9d3ac3..5f91df67c9 100644 --- a/RELEASE-NOTES-1.31 +++ b/RELEASE-NOTES-1.31 @@ -102,6 +102,8 @@ changes to languages because of Phabricator reports. override DifferenceEngine::getDiffBodyCacheKeyParams() instead. * The deprecated MW_DIFF_VERSION constant was removed. DifferenceEngine::MW_DIFF_VERSION should be used instead. +* Use of Maintenance::error( $err, $die ) to exit script was deprecated. Use + Maintenance::fatalError() instead. == Compatibility == MediaWiki 1.31 requires PHP 5.5.9 or later. There is experimental support for diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php index d37b990b2d..10082e9503 100644 --- a/maintenance/Maintenance.php +++ b/maintenance/Maintenance.php @@ -398,19 +398,31 @@ abstract class Maintenance { * Throw an error to the user. Doesn't respect --quiet, so don't use * this for non-error output * @param string $err The error to display - * @param int $die If > 0, go ahead and die out using this int as the code + * @param int $die Deprecated since 1.31, use Maintenance::fatalError() instead */ protected function error( $err, $die = 0 ) { + if ( intval( $die ) !== 0 ) { + wfDeprecated( __METHOD__ . '( $err, $die )', '1.31' ); + $this->fatalError( $err, intval( $die ) ); + } $this->outputChanneled( false ); if ( PHP_SAPI == 'cli' ) { fwrite( STDERR, $err . "\n" ); } else { print $err; } - $die = intval( $die ); - if ( $die > 0 ) { - die( $die ); - } + } + + /** + * Output a message and terminate the current script. + * + * @param string $msg Error message + * @param int $exitCode PHP exit status. Should be in range 1-254. + * @since 1.31 + */ + protected function fatalError( $msg, $exitCode = 1 ) { + $this->error( $msg ); + exit( $exitCode ); } private $atLineStart = true; @@ -559,7 +571,7 @@ abstract class Maintenance { $joined = implode( ', ', $missing ); $msg = "The following extensions are required to be installed " . "for this script to run: $joined. Please enable them and then try again."; - $this->error( $msg, 1 ); + $this->fatalError( $msg ); } } @@ -652,17 +664,17 @@ abstract class Maintenance { # Abort if called from a web server if ( isset( $_SERVER ) && isset( $_SERVER['REQUEST_METHOD'] ) ) { - $this->error( 'This script must be run from the command line', true ); + $this->fatalError( 'This script must be run from the command line' ); } if ( $IP === null ) { - $this->error( "\$IP not set, aborting!\n" . - '(Did you forget to call parent::__construct() in your maintenance script?)', 1 ); + $this->fatalError( "\$IP not set, aborting!\n" . + '(Did you forget to call parent::__construct() in your maintenance script?)' ); } # Make sure we can handle script parameters if ( !defined( 'HPHP_VERSION' ) && !ini_get( 'register_argc_argv' ) ) { - $this->error( 'Cannot get command line arguments, register_argc_argv is set to false', true ); + $this->fatalError( 'Cannot get command line arguments, register_argc_argv is set to false' ); } // Send PHP warnings and errors to stderr instead of stdout. @@ -1177,9 +1189,9 @@ abstract class Maintenance { } if ( !is_readable( $settingsFile ) ) { - $this->error( "A copy of your installation's LocalSettings.php\n" . + $this->fatalError( "A copy of your installation's LocalSettings.php\n" . "must exist and be readable in the source directory.\n" . - "Use --conf to specify it.", true ); + "Use --conf to specify it." ); } $wgCommandLineMode = true; diff --git a/maintenance/backup.inc b/maintenance/backup.inc index 60b8a7a9bb..341a2992ff 100644 --- a/maintenance/backup.inc +++ b/maintenance/backup.inc @@ -419,10 +419,6 @@ class BackupDumper extends Maintenance { fwrite( $this->stderr, $string . "\n" ); } } - - function fatalError( $msg ) { - $this->error( "$msg\n", 1 ); - } } class ExportProgressFilter extends DumpFilter { diff --git a/maintenance/benchmarks/benchmarkJSMinPlus.php b/maintenance/benchmarks/benchmarkJSMinPlus.php index dc92516018..fa93f230be 100644 --- a/maintenance/benchmarks/benchmarkJSMinPlus.php +++ b/maintenance/benchmarks/benchmarkJSMinPlus.php @@ -41,7 +41,7 @@ class BenchmarkJSMinPlus extends Benchmarker { $content = file_get_contents( $this->getOption( 'file' ) ); MediaWiki\restoreWarnings(); if ( $content === false ) { - $this->error( 'Unable to open input file', 1 ); + $this->fatalError( 'Unable to open input file' ); } $filename = basename( $this->getOption( 'file' ) ); diff --git a/maintenance/benchmarks/benchmarkParse.php b/maintenance/benchmarks/benchmarkParse.php index 1753250bcd..a613f96cc8 100644 --- a/maintenance/benchmarks/benchmarkParse.php +++ b/maintenance/benchmarks/benchmarkParse.php @@ -106,7 +106,7 @@ class BenchmarkParse extends Maintenance { $loops = $this->getOption( 'loops', 1 ); if ( $loops < 1 ) { - $this->error( 'Invalid number of loops specified', true ); + $this->fatalError( 'Invalid number of loops specified' ); } $startUsage = getrusage(); $startTime = microtime( true ); diff --git a/maintenance/benchmarks/benchmarkPurge.php b/maintenance/benchmarks/benchmarkPurge.php index e006cf53e6..8566c0b4eb 100644 --- a/maintenance/benchmarks/benchmarkPurge.php +++ b/maintenance/benchmarks/benchmarkPurge.php @@ -37,7 +37,7 @@ class BenchmarkPurge extends Benchmarker { public function execute() { global $wgUseSquid, $wgSquidServers; if ( !$wgUseSquid ) { - $this->error( "Squid purge benchmark doesn't do much without squid support on.", true ); + $this->fatalError( "Squid purge benchmark doesn't do much without squid support on." ); } else { $this->output( "There are " . count( $wgSquidServers ) . " defined squid servers:\n" ); if ( $this->hasOption( 'count' ) ) { diff --git a/maintenance/benchmarks/benchmarkTidy.php b/maintenance/benchmarks/benchmarkTidy.php index 14791745fe..6698db3e89 100644 --- a/maintenance/benchmarks/benchmarkTidy.php +++ b/maintenance/benchmarks/benchmarkTidy.php @@ -15,19 +15,19 @@ class BenchmarkTidy extends Maintenance { public function execute() { $html = file_get_contents( $this->getOption( 'file' ) ); if ( $html === false ) { - $this->error( "Unable to open input file", 1 ); + $this->fatalError( "Unable to open input file" ); } if ( $this->hasOption( 'driver' ) || $this->hasOption( 'tidy-config' ) ) { $config = json_decode( $this->getOption( 'tidy-config', '{}' ), true ); if ( !is_array( $config ) ) { - $this->error( "Invalid JSON tidy config", 1 ); + $this->fatalError( "Invalid JSON tidy config" ); } $config += [ 'driver' => $this->getOption( 'driver', 'RemexHtml' ) ]; $driver = MWTidy::factory( $config ); } else { $driver = MWTidy::singleton(); if ( !$driver ) { - $this->error( "Tidy disabled or not installed", 1 ); + $this->fatalError( "Tidy disabled or not installed" ); } } diff --git a/maintenance/changePassword.php b/maintenance/changePassword.php index 9fa66324f5..d7db3212dc 100644 --- a/maintenance/changePassword.php +++ b/maintenance/changePassword.php @@ -46,10 +46,10 @@ class ChangePassword extends Maintenance { } elseif ( $this->hasOption( "userid" ) ) { $user = User::newFromId( $this->getOption( 'userid' ) ); } else { - $this->error( "A \"user\" or \"userid\" must be set to change the password for", true ); + $this->fatalError( "A \"user\" or \"userid\" must be set to change the password for" ); } if ( !$user || !$user->getId() ) { - $this->error( "No such user: " . $this->getOption( 'user' ), true ); + $this->fatalError( "No such user: " . $this->getOption( 'user' ) ); } $password = $this->getOption( 'password' ); try { @@ -64,7 +64,7 @@ class ChangePassword extends Maintenance { $user->saveSettings(); $this->output( "Password set for " . $user->getName() . "\n" ); } catch ( PasswordError $pwe ) { - $this->error( $pwe->getText(), true ); + $this->fatalError( $pwe->getText() ); } } } diff --git a/maintenance/checkComposerLockUpToDate.php b/maintenance/checkComposerLockUpToDate.php index e5b4c13ec7..22f59697b1 100644 --- a/maintenance/checkComposerLockUpToDate.php +++ b/maintenance/checkComposerLockUpToDate.php @@ -24,9 +24,8 @@ class CheckComposerLockUpToDate extends Maintenance { // Maybe they're using mediawiki/vendor? $lockLocation = "$IP/vendor/composer.lock"; if ( !file_exists( $lockLocation ) ) { - $this->error( - 'Could not find composer.lock file. Have you run "composer install --no-dev"?', - 1 + $this->fatalError( + 'Could not find composer.lock file. Have you run "composer install --no-dev"?' ); } } @@ -51,10 +50,9 @@ class CheckComposerLockUpToDate extends Maintenance { } } if ( $found ) { - $this->error( + $this->fatalError( 'Error: your composer.lock file is not up to date. ' . - 'Run "composer update --no-dev" to install newer dependencies', - 1 + 'Run "composer update --no-dev" to install newer dependencies' ); } else { // We couldn't find any out-of-date dependencies, so assume everything is ok! diff --git a/maintenance/cleanupSpam.php b/maintenance/cleanupSpam.php index fc3cc5b8df..3d039fa292 100644 --- a/maintenance/cleanupSpam.php +++ b/maintenance/cleanupSpam.php @@ -47,7 +47,7 @@ class CleanupSpam extends Maintenance { $username = wfMessage( 'spambot_username' )->text(); $wgUser = User::newSystemUser( $username ); if ( !$wgUser ) { - $this->error( "Invalid username specified in 'spambot_username' message: $username", true ); + $this->fatalError( "Invalid username specified in 'spambot_username' message: $username" ); } // Hack: Grant bot rights so we don't flood RecentChanges $wgUser->addGroup( 'bot' ); @@ -55,7 +55,7 @@ class CleanupSpam extends Maintenance { $spec = $this->getArg(); $like = LinkFilter::makeLikeArray( $spec ); if ( !$like ) { - $this->error( "Not a valid hostname specification: $spec", true ); + $this->fatalError( "Not a valid hostname specification: $spec" ); } if ( $this->hasOption( 'all' ) ) { diff --git a/maintenance/cleanupTitles.php b/maintenance/cleanupTitles.php index 50e17d8dad..24d6d86cca 100644 --- a/maintenance/cleanupTitles.php +++ b/maintenance/cleanupTitles.php @@ -165,7 +165,7 @@ class TitleCleanup extends TableCleanup { $title = $verified; } if ( is_null( $title ) ) { - $this->error( "Something awry; empty title.", true ); + $this->fatalError( "Something awry; empty title." ); } $ns = $title->getNamespace(); $dest = $title->getDBkey(); diff --git a/maintenance/cleanupUploadStash.php b/maintenance/cleanupUploadStash.php index 14c6a6b18a..aeaf1503a7 100644 --- a/maintenance/cleanupUploadStash.php +++ b/maintenance/cleanupUploadStash.php @@ -122,7 +122,7 @@ class UploadStashCleanup extends Maintenance { $iterator = $tempRepo->getBackend()->getFileList( [ 'dir' => $dir, 'adviseStat' => 1 ] ); $this->output( "Deleting orphaned temp files...\n" ); if ( strpos( $dir, '/local-temp' ) === false ) { // sanity check - $this->error( "Temp repo is not using the temp container.", 1 ); // die + $this->fatalError( "Temp repo is not using the temp container." ); } $i = 0; $batch = []; // operation batch diff --git a/maintenance/compareParsers.php b/maintenance/compareParsers.php index f2540c7afa..3b09385a06 100644 --- a/maintenance/compareParsers.php +++ b/maintenance/compareParsers.php @@ -97,7 +97,7 @@ class CompareParsers extends DumpIterator { if ( $this->hasOption( 'tidy' ) ) { global $wgUseTidy; if ( !$wgUseTidy ) { - $this->error( 'Tidy was requested but $wgUseTidy is not set in LocalSettings.php', true ); + $this->fatalError( 'Tidy was requested but $wgUseTidy is not set in LocalSettings.php' ); } $this->options->setTidy( true ); } diff --git a/maintenance/convertExtensionToRegistration.php b/maintenance/convertExtensionToRegistration.php index 0554949500..24391c1ce4 100644 --- a/maintenance/convertExtensionToRegistration.php +++ b/maintenance/convertExtensionToRegistration.php @@ -82,7 +82,7 @@ class ConvertExtensionToRegistration extends Maintenance { unset( $var ); $arg = $this->getArg( 0 ); if ( !is_file( $arg ) ) { - $this->error( "$arg is not a file.", true ); + $this->fatalError( "$arg is not a file." ); } require $arg; unset( $arg ); @@ -160,14 +160,14 @@ class ConvertExtensionToRegistration extends Maintenance { protected function handleExtensionFunctions( $realName, $value ) { foreach ( $value as $func ) { if ( $func instanceof Closure ) { - $this->error( "Error: Closures cannot be converted to JSON. " . - "Please move your extension function somewhere else.", 1 + $this->fatalError( "Error: Closures cannot be converted to JSON. " . + "Please move your extension function somewhere else." ); } // check if $func exists in the global scope if ( function_exists( $func ) ) { - $this->error( "Error: Global functions cannot be converted to JSON. " . - "Please move your extension function ($func) into a class.", 1 + $this->fatalError( "Error: Global functions cannot be converted to JSON. " . + "Please move your extension function ($func) into a class." ); } } @@ -239,14 +239,14 @@ class ConvertExtensionToRegistration extends Maintenance { } foreach ( $handlers as $func ) { if ( $func instanceof Closure ) { - $this->error( "Error: Closures cannot be converted to JSON. " . - "Please move the handler for $hookName somewhere else.", 1 + $this->fatalError( "Error: Closures cannot be converted to JSON. " . + "Please move the handler for $hookName somewhere else." ); } // Check if $func exists in the global scope if ( function_exists( $func ) ) { - $this->error( "Error: Global functions cannot be converted to JSON. " . - "Please move the handler for $hookName inside a class.", 1 + $this->fatalError( "Error: Global functions cannot be converted to JSON. " . + "Please move the handler for $hookName inside a class." ); } } diff --git a/maintenance/copyFileBackend.php b/maintenance/copyFileBackend.php index ee103b8848..b46cac7ae9 100644 --- a/maintenance/copyFileBackend.php +++ b/maintenance/copyFileBackend.php @@ -81,7 +81,7 @@ class CopyFileBackend extends Maintenance { 'adviseStat' => true // avoid HEADs ] ); if ( $srcPathsRel === null ) { - $this->error( "Could not list files in $container.", 1 ); // die + $this->fatalError( "Could not list files in $container." ); } } @@ -93,7 +93,7 @@ class CopyFileBackend extends Maintenance { 'adviseStat' => true // avoid HEADs ] ); if ( $dstPathsRel === null ) { - $this->error( "Could not list files in $container.", 1 ); // die + $this->fatalError( "Could not list files in $container." ); } $this->statCache = []; foreach ( $dstPathsRel as $dstPathRel ) { @@ -174,12 +174,12 @@ class CopyFileBackend extends Maintenance { $srcPathsRel = $src->getFileList( [ 'dir' => $src->getRootStoragePath() . "/$backendRel" ] ); if ( $srcPathsRel === null ) { - $this->error( "Could not list files in source container.", 1 ); // die + $this->fatalError( "Could not list files in source container." ); } $dstPathsRel = $dst->getFileList( [ 'dir' => $dst->getRootStoragePath() . "/$backendRel" ] ); if ( $dstPathsRel === null ) { - $this->error( "Could not list files in destination container.", 1 ); // die + $this->fatalError( "Could not list files in destination container." ); } // Get the list of destination files $relFilesDstSha1 = []; @@ -263,7 +263,7 @@ class CopyFileBackend extends Maintenance { $status = $dst->prepare( [ 'dir' => dirname( $dstPath ), 'bypassReadOnly' => 1 ] ); if ( !$status->isOK() ) { $this->error( print_r( $status->getErrorsArray(), true ) ); - $this->error( "$wikiId: Could not copy $srcPath to $dstPath.", 1 ); // die + $this->fatalError( "$wikiId: Could not copy $srcPath to $dstPath." ); } $ops[] = [ 'op' => 'store', 'src' => $fsFile->getPath(), 'dst' => $dstPath, 'overwrite' => 1 ]; @@ -280,7 +280,7 @@ class CopyFileBackend extends Maintenance { $elapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 ); if ( !$status->isOK() ) { $this->error( print_r( $status->getErrorsArray(), true ) ); - $this->error( "$wikiId: Could not copy file batch.", 1 ); // die + $this->fatalError( "$wikiId: Could not copy file batch." ); } elseif ( count( $copiedRel ) ) { $this->output( "\n\tCopied these file(s) [{$elapsed_ms}ms]:\n\t" . implode( "\n\t", $copiedRel ) . "\n\n" ); @@ -317,7 +317,7 @@ class CopyFileBackend extends Maintenance { $elapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 ); if ( !$status->isOK() ) { $this->error( print_r( $status->getErrorsArray(), true ) ); - $this->error( "$wikiId: Could not delete file batch.", 1 ); // die + $this->fatalError( "$wikiId: Could not delete file batch." ); } elseif ( count( $deletedRel ) ) { $this->output( "\n\tDeleted these file(s) [{$elapsed_ms}ms]:\n\t" . implode( "\n\t", $deletedRel ) . "\n\n" ); diff --git a/maintenance/copyJobQueue.php b/maintenance/copyJobQueue.php index 08e40fd648..7dd40b839f 100644 --- a/maintenance/copyJobQueue.php +++ b/maintenance/copyJobQueue.php @@ -48,9 +48,9 @@ class CopyJobQueue extends Maintenance { $dstKey = $this->getOption( 'dst' ); if ( !isset( $wgJobQueueMigrationConfig[$srcKey] ) ) { - $this->error( "\$wgJobQueueMigrationConfig not set for '$srcKey'.", 1 ); + $this->fatalError( "\$wgJobQueueMigrationConfig not set for '$srcKey'." ); } elseif ( !isset( $wgJobQueueMigrationConfig[$dstKey] ) ) { - $this->error( "\$wgJobQueueMigrationConfig not set for '$dstKey'.", 1 ); + $this->fatalError( "\$wgJobQueueMigrationConfig not set for '$dstKey'." ); } $types = ( $this->getOption( 'type' ) === 'all' ) diff --git a/maintenance/createAndPromote.php b/maintenance/createAndPromote.php index 1872716fb5..8035c3eb5c 100644 --- a/maintenance/createAndPromote.php +++ b/maintenance/createAndPromote.php @@ -63,15 +63,15 @@ class CreateAndPromote extends Maintenance { $user = User::newFromName( $username ); if ( !is_object( $user ) ) { - $this->error( "invalid username.", true ); + $this->fatalError( "invalid username." ); } $exists = ( 0 !== $user->idForName() ); if ( $exists && !$force ) { - $this->error( "Account exists. Perhaps you want the --force option?", true ); + $this->fatalError( "Account exists. Perhaps you want the --force option?" ); } elseif ( !$exists && !$password ) { - $this->error( "Argument required!", false ); + $this->error( "Argument required!" ); $this->maybeHelp( true ); } elseif ( $exists ) { $inGroups = $user->getGroups(); @@ -133,7 +133,7 @@ class CreateAndPromote extends Maintenance { $user->saveSettings(); } } catch ( PasswordError $pwe ) { - $this->error( $pwe->getText(), true ); + $this->fatalError( $pwe->getText() ); } } diff --git a/maintenance/createCommonPasswordCdb.php b/maintenance/createCommonPasswordCdb.php index f7e0c0fb9f..e77113ac01 100644 --- a/maintenance/createCommonPasswordCdb.php +++ b/maintenance/createCommonPasswordCdb.php @@ -60,12 +60,12 @@ class GenerateCommonPassword extends Maintenance { $outfile = $this->getArg( 1 ); if ( !is_readable( $infile ) && $infile !== 'php://stdin' ) { - $this->error( "Cannot open input file $infile for reading", 1 ); + $this->fatalError( "Cannot open input file $infile for reading" ); } $file = fopen( $infile, 'r' ); if ( $file === false ) { - $this->error( "Cannot read input file $infile", 1 ); + $this->fatalError( "Cannot read input file $infile" ); } try { @@ -109,7 +109,7 @@ class GenerateCommonPassword extends Maintenance { " (out of $i) passwords to $outfile\n" ); } catch ( \Cdb\Exception $e ) { - $this->error( "Error writing cdb file: " . $e->getMessage(), 2 ); + $this->fatalError( "Error writing cdb file: " . $e->getMessage(), 2 ); } } } diff --git a/maintenance/deleteBatch.php b/maintenance/deleteBatch.php index 0020446b41..eceadc1111 100644 --- a/maintenance/deleteBatch.php +++ b/maintenance/deleteBatch.php @@ -65,7 +65,7 @@ class DeleteBatch extends Maintenance { $user = User::newFromName( $username ); } if ( !$user ) { - $this->error( "Invalid username", true ); + $this->fatalError( "Invalid username" ); } $wgUser = $user; @@ -77,7 +77,7 @@ class DeleteBatch extends Maintenance { # Setup if ( !$file ) { - $this->error( "Unable to read file, exiting", true ); + $this->fatalError( "Unable to read file, exiting" ); } $dbw = $this->getDB( DB_MASTER ); diff --git a/maintenance/deleteDefaultMessages.php b/maintenance/deleteDefaultMessages.php index ba8662ac2e..417aa03166 100644 --- a/maintenance/deleteDefaultMessages.php +++ b/maintenance/deleteDefaultMessages.php @@ -72,7 +72,7 @@ class DeleteDefaultMessages extends Maintenance { // in order to hide it in RecentChanges. $user = User::newFromName( 'MediaWiki default' ); if ( !$user ) { - $this->error( "Invalid username", true ); + $this->fatalError( "Invalid username" ); } $user->addGroup( 'bot' ); $wgUser = $user; diff --git a/maintenance/deleteEqualMessages.php b/maintenance/deleteEqualMessages.php index 5fc7d18458..2a1fe22e7d 100644 --- a/maintenance/deleteEqualMessages.php +++ b/maintenance/deleteEqualMessages.php @@ -123,7 +123,7 @@ class DeleteEqualMessages extends Maintenance { $this->fetchMessageInfo( false, $messageInfo ); } else { if ( !isset( $langCodes[$langCode] ) ) { - $this->error( 'Invalid language code: ' . $langCode, 1 ); + $this->fatalError( 'Invalid language code: ' . $langCode ); } $this->fetchMessageInfo( $langCode, $messageInfo ); } @@ -164,7 +164,7 @@ class DeleteEqualMessages extends Maintenance { $user = User::newSystemUser( 'MediaWiki default', [ 'steal' => true ] ); if ( !$user ) { - $this->error( "Invalid username", true ); + $this->fatalError( "Invalid username" ); } global $wgUser; $wgUser = $user; diff --git a/maintenance/dumpBackup.php b/maintenance/dumpBackup.php index 9bf1222121..4890199b7c 100644 --- a/maintenance/dumpBackup.php +++ b/maintenance/dumpBackup.php @@ -87,7 +87,7 @@ TEXT } elseif ( $this->hasOption( 'revrange' ) ) { $this->dump( WikiExporter::RANGE, $textMode ); } else { - $this->error( 'No valid action specified.', 1 ); + $this->fatalError( 'No valid action specified.' ); } } diff --git a/maintenance/dumpIterator.php b/maintenance/dumpIterator.php index 6dbad94956..254f368042 100644 --- a/maintenance/dumpIterator.php +++ b/maintenance/dumpIterator.php @@ -48,7 +48,7 @@ abstract class DumpIterator extends Maintenance { public function execute() { if ( !( $this->hasOption( 'file' ) ^ $this->hasOption( 'dump' ) ) ) { - $this->error( "You must provide a file or dump", true ); + $this->fatalError( "You must provide a file or dump" ); } $this->checkOptions(); @@ -70,8 +70,8 @@ abstract class DumpIterator extends Maintenance { if ( $this->getOption( 'dump' ) == '-' ) { $source = new ImportStreamSource( $this->getStdin() ); } else { - $this->error( "Sorry, I don't support dump filenames yet. " - . "Use - and provide it on stdin on the meantime.", true ); + $this->fatalError( "Sorry, I don't support dump filenames yet. " + . "Use - and provide it on stdin on the meantime." ); } $importer = new WikiImporter( $source, $this->getConfig() ); diff --git a/maintenance/edit.php b/maintenance/edit.php index 4219ed0517..7e50e9e1b4 100644 --- a/maintenance/edit.php +++ b/maintenance/edit.php @@ -59,7 +59,7 @@ class EditCLI extends Maintenance { $wgUser = User::newFromName( $userName ); } if ( !$wgUser ) { - $this->error( "Invalid username", true ); + $this->fatalError( "Invalid username" ); } if ( $wgUser->isAnon() ) { $wgUser->addToDatabase(); @@ -67,13 +67,13 @@ class EditCLI extends Maintenance { $title = Title::newFromText( $this->getArg() ); if ( !$title ) { - $this->error( "Invalid title", true ); + $this->fatalError( "Invalid title" ); } if ( $this->hasOption( 'nocreate' ) && !$title->exists() ) { - $this->error( "Page does not exist", true ); + $this->fatalError( "Page does not exist" ); } elseif ( $this->hasOption( 'createonly' ) && $title->exists() ) { - $this->error( "Page already exists", true ); + $this->fatalError( "Page already exists" ); } $page = WikiPage::factory( $title ); diff --git a/maintenance/eraseArchivedFile.php b/maintenance/eraseArchivedFile.php index d94d49b72b..24ef1ed6f6 100644 --- a/maintenance/eraseArchivedFile.php +++ b/maintenance/eraseArchivedFile.php @@ -50,7 +50,7 @@ class EraseArchivedFile extends Maintenance { if ( $filekey === '*' ) { // all versions by name if ( !strlen( $filename ) ) { - $this->error( "Missing --filename parameter.", 1 ); + $this->fatalError( "Missing --filename parameter." ); } $afile = false; } else { // specified version @@ -60,7 +60,7 @@ class EraseArchivedFile extends Maintenance { [ 'fa_storage_group' => 'deleted', 'fa_storage_key' => $filekey ], __METHOD__, [], $fileQuery['joins'] ); if ( !$row ) { - $this->error( "No deleted file exists with key '$filekey'.", 1 ); + $this->fatalError( "No deleted file exists with key '$filekey'." ); } $filename = $row->fa_name; $afile = ArchivedFile::newFromRow( $row ); @@ -68,7 +68,7 @@ class EraseArchivedFile extends Maintenance { $file = wfLocalFile( $filename ); if ( $file->exists() ) { - $this->error( "File '$filename' is still a public file, use the delete form.\n", 1 ); + $this->fatalError( "File '$filename' is still a public file, use the delete form.\n" ); } $this->output( "Purging all thumbnails for file '$filename'..." ); diff --git a/maintenance/exportSites.php b/maintenance/exportSites.php index b1e4fa943b..542bddac79 100644 --- a/maintenance/exportSites.php +++ b/maintenance/exportSites.php @@ -37,7 +37,7 @@ class ExportSites extends Maintenance { $handle = fopen( $file, 'w' ); if ( !$handle ) { - $this->error( "Failed to open $file for writing.\n", 1 ); + $this->fatalError( "Failed to open $file for writing.\n" ); } $exporter = new SiteExporter( $handle ); diff --git a/maintenance/findHooks.php b/maintenance/findHooks.php index fd36db1dd2..6a21a61a48 100644 --- a/maintenance/findHooks.php +++ b/maintenance/findHooks.php @@ -143,7 +143,7 @@ class FindHooks extends Maintenance { ) { $this->output( "Looks good!\n" ); } else { - $this->error( 'The script finished with errors.', 1 ); + $this->fatalError( 'The script finished with errors.' ); } } diff --git a/maintenance/findOrphanedFiles.php b/maintenance/findOrphanedFiles.php index c4cab71688..522bbc2539 100644 --- a/maintenance/findOrphanedFiles.php +++ b/maintenance/findOrphanedFiles.php @@ -37,7 +37,7 @@ class FindOrphanedFiles extends Maintenance { $repo = RepoGroup::singleton()->getLocalRepo(); if ( $repo->hasSha1Storage() ) { - $this->error( "Local repo uses SHA-1 file storage names; aborting.", 1 ); + $this->fatalError( "Local repo uses SHA-1 file storage names; aborting." ); } $directory = $repo->getZonePath( 'public' ); @@ -51,7 +51,7 @@ class FindOrphanedFiles extends Maintenance { $list = $repo->getBackend()->getFileList( [ 'dir' => $directory ] ); if ( $list === null ) { - $this->error( "Could not get file listing.", 1 ); + $this->fatalError( "Could not get file listing." ); } $pathBatch = []; diff --git a/maintenance/fixDoubleRedirects.php b/maintenance/fixDoubleRedirects.php index 8c9faca2ee..7e29f09ae7 100644 --- a/maintenance/fixDoubleRedirects.php +++ b/maintenance/fixDoubleRedirects.php @@ -48,7 +48,7 @@ class FixDoubleRedirects extends Maintenance { if ( $this->hasOption( 'title' ) ) { $title = Title::newFromText( $this->getOption( 'title' ) ); if ( !$title || !$title->isRedirect() ) { - $this->error( $title->getPrefixedText() . " is not a redirect!\n", true ); + $this->fatalError( $title->getPrefixedText() . " is not a redirect!\n" ); } } else { $title = null; diff --git a/maintenance/fixTimestamps.php b/maintenance/fixTimestamps.php index 796ec2658e..1efbc5f8e6 100644 --- a/maintenance/fixTimestamps.php +++ b/maintenance/fixTimestamps.php @@ -56,7 +56,7 @@ class FixTimestamps extends Maintenance { $row = $dbw->fetchObject( $res ); if ( is_null( $row->minrev ) ) { - $this->error( "No revisions in search period.", true ); + $this->fatalError( "No revisions in search period." ); } $minRev = $row->minrev; @@ -99,14 +99,14 @@ class FixTimestamps extends Maintenance { $numBadRevs = count( $badRevs ); if ( $numBadRevs > $numGoodRevs ) { - $this->error( + $this->fatalError( "The majority of revisions in the search interval are marked as bad. Are you sure the offset ($offset) has the right sign? Positive means the clock was incorrectly set forward, negative means the clock was incorrectly set back. If the offset is right, then increase the search interval until there are enough - good revisions to provide a majority reference.", true ); + good revisions to provide a majority reference." ); } elseif ( $numBadRevs == 0 ) { $this->output( "No bad revisions found.\n" ); exit( 0 ); diff --git a/maintenance/formatInstallDoc.php b/maintenance/formatInstallDoc.php index e2b3c4199d..95d90c1bdb 100644 --- a/maintenance/formatInstallDoc.php +++ b/maintenance/formatInstallDoc.php @@ -41,8 +41,7 @@ class MaintenanceFormatInstallDoc extends Maintenance { $fileName = $this->getArg( 0 ); $inFile = fopen( $fileName, 'r' ); if ( !$inFile ) { - $this->error( "Unable to open input file \"$fileName\"" ); - exit( 1 ); + $this->fatalError( "Unable to open input file \"$fileName\"" ); } } else { $inFile = STDIN; @@ -52,8 +51,7 @@ class MaintenanceFormatInstallDoc extends Maintenance { $fileName = $this->getOption( 'outfile' ); $outFile = fopen( $fileName, 'w' ); if ( !$outFile ) { - $this->error( "Unable to open output file \"$fileName\"" ); - exit( 1 ); + $this->fatalError( "Unable to open output file \"$fileName\"" ); } } else { $outFile = STDOUT; diff --git a/maintenance/generateJsonI18n.php b/maintenance/generateJsonI18n.php index a84f2ae52c..ec32aeef64 100644 --- a/maintenance/generateJsonI18n.php +++ b/maintenance/generateJsonI18n.php @@ -55,7 +55,7 @@ class GenerateJsonI18n extends Maintenance { if ( $extension ) { if ( $phpfile ) { - $this->error( "The phpfile is already specified, conflicts with --extension.", 1 ); + $this->fatalError( "The phpfile is already specified, conflicts with --extension." ); } $phpfile = "$IP/extensions/$extension/$extension.i18n.php"; } @@ -101,28 +101,28 @@ class GenerateJsonI18n extends Maintenance { $this->output( "Creating directory $jsondir.\n" ); $success = mkdir( $jsondir ); if ( !$success ) { - $this->error( "Could not create directory $jsondir", 1 ); + $this->fatalError( "Could not create directory $jsondir" ); } } if ( !is_readable( $phpfile ) ) { - $this->error( "Error reading $phpfile", 1 ); + $this->fatalError( "Error reading $phpfile" ); } $messages = null; include $phpfile; $phpfileContents = file_get_contents( $phpfile ); if ( !isset( $messages ) ) { - $this->error( "PHP file $phpfile does not define \$messages array", 1 ); + $this->fatalError( "PHP file $phpfile does not define \$messages array" ); } if ( !$messages ) { - $this->error( "PHP file $phpfile contains an empty \$messages array. " . - "Maybe it was already converted?", 1 ); + $this->fatalError( "PHP file $phpfile contains an empty \$messages array. " . + "Maybe it was already converted?" ); } if ( !isset( $messages['en'] ) || !is_array( $messages['en'] ) ) { - $this->error( "PHP file $phpfile does not set language codes", 1 ); + $this->fatalError( "PHP file $phpfile does not set language codes" ); } foreach ( $messages as $langcode => $langmsgs ) { @@ -142,7 +142,7 @@ class GenerateJsonI18n extends Maintenance { FormatJson::encode( $langmsgs, "\t", FormatJson::ALL_OK ) . "\n" ); if ( $success === false ) { - $this->error( "FAILED to write $jsonfile", 1 ); + $this->fatalError( "FAILED to write $jsonfile" ); } $this->output( "$jsonfile\n" ); } diff --git a/maintenance/generateSitemap.php b/maintenance/generateSitemap.php index 26a9c39935..bed84a811b 100644 --- a/maintenance/generateSitemap.php +++ b/maintenance/generateSitemap.php @@ -182,7 +182,7 @@ class GenerateSitemap extends Maintenance { # Create directory if needed $fspath = $this->getOption( 'fspath', getcwd() ); if ( !wfMkdirParents( $fspath, null, __METHOD__ ) ) { - $this->error( "Can not create directory $fspath.", 1 ); + $this->fatalError( "Can not create directory $fspath." ); } $this->fspath = realpath( $fspath ) . DIRECTORY_SEPARATOR; diff --git a/maintenance/getConfiguration.php b/maintenance/getConfiguration.php index 65ffe1422b..18dcc226da 100644 --- a/maintenance/getConfiguration.php +++ b/maintenance/getConfiguration.php @@ -64,7 +64,7 @@ class GetConfiguration extends Maintenance { $validFormat = in_array( $format, self::$outFormats ); if ( !$validFormat ) { - $this->error( "--format set to an unrecognized format", 0 ); + $this->error( "--format set to an unrecognized format" ); $error_out = true; } diff --git a/maintenance/getText.php b/maintenance/getText.php index f519a79052..21a183b6f5 100644 --- a/maintenance/getText.php +++ b/maintenance/getText.php @@ -42,13 +42,13 @@ class GetTextMaint extends Maintenance { $titleText = $this->getArg( 0 ); $title = Title::newFromText( $titleText ); if ( !$title ) { - $this->error( "$titleText is not a valid title.\n", true ); + $this->fatalError( "$titleText is not a valid title.\n" ); } $rev = Revision::newFromTitle( $title ); if ( !$rev ) { $titleText = $title->getPrefixedText(); - $this->error( "Page $titleText does not exist.\n", true ); + $this->fatalError( "Page $titleText does not exist.\n" ); } $content = $rev->getContent( $this->hasOption( 'show-private' ) ? Revision::RAW @@ -56,7 +56,7 @@ class GetTextMaint extends Maintenance { if ( $content === false ) { $titleText = $title->getPrefixedText(); - $this->error( "Couldn't extract the text from $titleText.\n", true ); + $this->fatalError( "Couldn't extract the text from $titleText.\n" ); } $this->output( $content->serialize() ); } diff --git a/maintenance/hhvm/makeRepo.php b/maintenance/hhvm/makeRepo.php index c1aa082039..f77f5b984f 100644 --- a/maintenance/hhvm/makeRepo.php +++ b/maintenance/hhvm/makeRepo.php @@ -97,7 +97,7 @@ class HHVMMakeRepo extends Maintenance { $tmpDir = wfTempDir() . '/mw-make-repo' . mt_rand( 0, 1 << 31 ); if ( !mkdir( $tmpDir ) ) { - $this->error( 'Unable to create temporary directory', 1 ); + $this->fatalError( 'Unable to create temporary directory' ); } file_put_contents( "$tmpDir/file-list", implode( "\n", $files ) ); @@ -119,11 +119,11 @@ class HHVMMakeRepo extends Maintenance { passthru( $cmd, $ret ); if ( $ret ) { $this->cleanupTemp( $tmpDir ); - $this->error( "Error: HHVM returned error code $ret", 1 ); + $this->fatalError( "Error: HHVM returned error code $ret" ); } if ( !rename( "$tmpDir/hhvm.hhbc", $this->getOption( 'output' ) ) ) { $this->cleanupTemp( $tmpDir ); - $this->error( "Error: unable to rename output file", 1 ); + $this->fatalError( "Error: unable to rename output file" ); } $this->cleanupTemp( $tmpDir ); return 0; diff --git a/maintenance/importDump.php b/maintenance/importDump.php index 206c7ee6ae..cf0e7d83ca 100644 --- a/maintenance/importDump.php +++ b/maintenance/importDump.php @@ -87,7 +87,7 @@ TEXT public function execute() { if ( wfReadOnly() ) { - $this->error( "Wiki is in read-only mode; you'll need to disable it for import to work.", true ); + $this->fatalError( "Wiki is in read-only mode; you'll need to disable it for import to work." ); } $this->reportingInterval = intval( $this->getOption( 'report', 100 ) ); @@ -134,7 +134,7 @@ TEXT if ( strval( $ns ) === $namespace && $wgContLang->getNsText( $ns ) !== false ) { return $ns; } - $this->error( "Unknown namespace text / index specified: $namespace", true ); + $this->fatalError( "Unknown namespace text / index specified: $namespace" ); } /** @@ -299,7 +299,7 @@ TEXT $statusRootPage = $importer->setTargetRootPage( $this->getOption( 'rootpage' ) ); if ( !$statusRootPage->isGood() ) { // Die here so that it doesn't print "Done!" - $this->error( $statusRootPage->getMessage()->text(), 1 ); + $this->fatalError( $statusRootPage->getMessage()->text() ); return false; } } diff --git a/maintenance/importImages.php b/maintenance/importImages.php index e733b9a7df..526561c1eb 100644 --- a/maintenance/importImages.php +++ b/maintenance/importImages.php @@ -133,11 +133,11 @@ class ImportImages extends Maintenance { # Check Protection if ( $this->hasOption( 'protect' ) && $this->hasOption( 'unprotect' ) ) { - $this->error( "Cannot specify both protect and unprotect. Only 1 is allowed.\n", 1 ); + $this->fatalError( "Cannot specify both protect and unprotect. Only 1 is allowed.\n" ); } if ( $this->hasOption( 'protect' ) && trim( $this->getOption( 'protect' ) ) ) { - $this->error( "You must specify a protection option.\n", 1 ); + $this->fatalError( "You must specify a protection option.\n" ); } # Prepare the list of allowed extensions @@ -170,7 +170,7 @@ class ImportImages extends Maintenance { if ( $commentFile !== null ) { $comment = file_get_contents( $commentFile ); if ( $comment === false || $comment === null ) { - $this->error( "failed to read comment file: {$commentFile}\n", 1 ); + $this->fatalError( "failed to read comment file: {$commentFile}\n" ); } } else { $comment = $this->getOption( 'comment', 'Importing file' ); diff --git a/maintenance/importTextFiles.php b/maintenance/importTextFiles.php index 816e745281..4681003ecb 100644 --- a/maintenance/importTextFiles.php +++ b/maintenance/importTextFiles.php @@ -73,7 +73,7 @@ class ImportTextFiles extends Maintenance { $files[$filename] = file_get_contents( $filename ); } if ( !$found ) { - $this->error( "Fatal error: The file '$arg' does not exist!", 1 ); + $this->fatalError( "Fatal error: The file '$arg' does not exist!" ); } } }; @@ -88,7 +88,7 @@ class ImportTextFiles extends Maintenance { } if ( !$user ) { - $this->error( "Invalid username\n", true ); + $this->fatalError( "Invalid username\n" ); } if ( $user->isAnon() ) { $user->addToDatabase(); @@ -199,7 +199,7 @@ class ImportTextFiles extends Maintenance { $this->output( "Done! $successCount succeeded, $skipCount skipped.\n" ); if ( $exit ) { - $this->error( "Import failed with $failCount failed pages.\n", $exit ); + $this->fatalError( "Import failed with $failCount failed pages.\n", $exit ); } } } diff --git a/maintenance/install.php b/maintenance/install.php index cac3009a8f..c996530c61 100644 --- a/maintenance/install.php +++ b/maintenance/install.php @@ -136,7 +136,7 @@ class CommandLineInstaller extends Maintenance { $dbpass = file_get_contents( $dbpassfile ); // returns false on failure MediaWiki\restoreWarnings(); if ( $dbpass === false ) { - $this->error( "Couldn't open $dbpassfile", true ); + $this->fatalError( "Couldn't open $dbpassfile" ); } $this->mOptions['dbpass'] = trim( $dbpass, "\r\n" ); } @@ -153,11 +153,11 @@ class CommandLineInstaller extends Maintenance { $pass = file_get_contents( $passfile ); // returns false on failure MediaWiki\restoreWarnings(); if ( $pass === false ) { - $this->error( "Couldn't open $passfile", true ); + $this->fatalError( "Couldn't open $passfile" ); } $this->mOptions['pass'] = trim( $pass, "\r\n" ); } elseif ( $this->getOption( 'pass' ) === null ) { - $this->error( 'You need to provide the option "pass" or "passfile"', true ); + $this->fatalError( 'You need to provide the option "pass" or "passfile"' ); } } diff --git a/maintenance/invalidateUserSessions.php b/maintenance/invalidateUserSessions.php index 8f67acddb9..6e62cd1a91 100644 --- a/maintenance/invalidateUserSessions.php +++ b/maintenance/invalidateUserSessions.php @@ -49,9 +49,9 @@ class InvalidateUserSesssions extends Maintenance { $file = $this->getOption( 'file' ); if ( $username === null && $file === null ) { - $this->error( 'Either --user or --file is required', 1 ); + $this->fatalError( 'Either --user or --file is required' ); } elseif ( $username !== null && $file !== null ) { - $this->error( 'Cannot use both --user and --file', 1 ); + $this->fatalError( 'Cannot use both --user and --file' ); } if ( $username !== null ) { @@ -60,7 +60,7 @@ class InvalidateUserSesssions extends Maintenance { $usernames = is_readable( $file ) ? file( $file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ) : false; if ( $usernames === false ) { - $this->error( "Could not open $file", 2 ); + $this->fatalError( "Could not open $file", 2 ); } } diff --git a/maintenance/language/generateCollationData.php b/maintenance/language/generateCollationData.php index ccfece0103..141f1eab3a 100644 --- a/maintenance/language/generateCollationData.php +++ b/maintenance/language/generateCollationData.php @@ -131,16 +131,14 @@ class GenerateCollationData extends Maintenance { $error .= "* $ucdallURL\n"; } - $this->error( $error ); - exit( 1 ); + $this->fatalError( $error ); } $debugOutFileName = $this->getOption( 'debug-output' ); if ( $debugOutFileName ) { $this->debugOutFile = fopen( $debugOutFileName, 'w' ); if ( !$this->debugOutFile ) { - $this->error( "Unable to open debug output file for writing" ); - exit( 1 ); + $this->fatalError( "Unable to open debug output file for writing" ); } } $this->loadUcd(); @@ -205,14 +203,12 @@ class GenerateCollationData extends Maintenance { function generateFirstChars() { $file = fopen( "{$this->dataDir}/allkeys.txt", 'r' ); if ( !$file ) { - $this->error( "Unable to open allkeys.txt" ); - exit( 1 ); + $this->fatalError( "Unable to open allkeys.txt" ); } global $IP; $outFile = fopen( "$IP/serialized/first-letters-root.ser", 'w' ); if ( !$outFile ) { - $this->error( "Unable to open output file first-letters-root.ser" ); - exit( 1 ); + $this->fatalError( "Unable to open output file first-letters-root.ser" ); } $goodTertiaryChars = []; diff --git a/maintenance/language/generateNormalizerDataAr.php b/maintenance/language/generateNormalizerDataAr.php index 34903de1db..4338a17153 100644 --- a/maintenance/language/generateNormalizerDataAr.php +++ b/maintenance/language/generateNormalizerDataAr.php @@ -46,22 +46,19 @@ class GenerateNormalizerDataAr extends Maintenance { if ( !$this->hasOption( 'unicode-data-file' ) ) { $dataFile = 'UnicodeData.txt'; if ( !file_exists( $dataFile ) ) { - $this->error( "Unable to find UnicodeData.txt. Please specify " . + $this->fatalError( "Unable to find UnicodeData.txt. Please specify " . "its location with --unicode-data-file=" ); - exit( 1 ); } } else { $dataFile = $this->getOption( 'unicode-data-file' ); if ( !file_exists( $dataFile ) ) { - $this->error( 'Unable to find the specified data file.' ); - exit( 1 ); + $this->fatalError( 'Unable to find the specified data file.' ); } } $file = fopen( $dataFile, 'r' ); if ( !$file ) { - $this->error( 'Unable to open the data file.' ); - exit( 1 ); + $this->fatalError( 'Unable to open the data file.' ); } // For the file format, see http://www.unicode.org/reports/tr44/ diff --git a/maintenance/language/langmemusage.php b/maintenance/language/langmemusage.php index 7c16602ef6..cb989bc825 100644 --- a/maintenance/language/langmemusage.php +++ b/maintenance/language/langmemusage.php @@ -40,7 +40,7 @@ class LangMemUsage extends Maintenance { public function execute() { if ( !function_exists( 'memory_get_usage' ) ) { - $this->error( "You must compile PHP with --enable-memory-limit", true ); + $this->fatalError( "You must compile PHP with --enable-memory-limit" ); } $langtool = new Languages(); diff --git a/maintenance/makeTestEdits.php b/maintenance/makeTestEdits.php index 1effb61d4e..cfd5fc28a5 100644 --- a/maintenance/makeTestEdits.php +++ b/maintenance/makeTestEdits.php @@ -40,7 +40,7 @@ class MakeTestEdits extends Maintenance { public function execute() { $user = User::newFromName( $this->getOption( 'user' ) ); if ( !$user->getId() ) { - $this->error( "No such user exists.", 1 ); + $this->fatalError( "No such user exists." ); } $count = $this->getOption( 'count' ); diff --git a/maintenance/manageJobs.php b/maintenance/manageJobs.php index 5f39a3d5ce..c1b038c161 100644 --- a/maintenance/manageJobs.php +++ b/maintenance/manageJobs.php @@ -48,7 +48,7 @@ class ManageJobs extends Maintenance { } elseif ( $action === 'repush-abandoned' ) { $this->repushAbandoned( $queue ); } else { - $this->error( "Invalid action '$action'.", 1 ); + $this->fatalError( "Invalid action '$action'." ); } } diff --git a/maintenance/mctest.php b/maintenance/mctest.php index 60f94a5fa6..14df53c590 100644 --- a/maintenance/mctest.php +++ b/maintenance/mctest.php @@ -47,7 +47,7 @@ class McTest extends Maintenance { $iterations = $this->getOption( 'i', 100 ); if ( $cache ) { if ( !isset( $wgObjectCaches[$cache] ) ) { - $this->error( "MediaWiki isn't configured with a cache named '$cache'", 1 ); + $this->fatalError( "MediaWiki isn't configured with a cache named '$cache'" ); } $servers = $wgObjectCaches[$cache]['servers']; } elseif ( $this->hasArg() ) { @@ -58,7 +58,7 @@ class McTest extends Maintenance { } elseif ( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) { $servers = $wgObjectCaches[$wgMainCacheType]['servers']; } else { - $this->error( "MediaWiki isn't configured for Memcached usage", 1 ); + $this->fatalError( "MediaWiki isn't configured for Memcached usage" ); } # find out the longest server string to nicely align output later on diff --git a/maintenance/mergeMessageFileList.php b/maintenance/mergeMessageFileList.php index 8d2534eec5..b749da422b 100644 --- a/maintenance/mergeMessageFileList.php +++ b/maintenance/mergeMessageFileList.php @@ -61,8 +61,8 @@ class MergeMessageFileList extends Maintenance { && !$this->hasOption( 'list-file' ) && !$this->hasOption( 'extensions-dir' ) ) { - $this->error( "Either --list-file or --extensions-dir must be provided if " . - "\$wgExtensionEntryPointListFiles is not set", 1 ); + $this->fatalError( "Either --list-file or --extensions-dir must be provided if " . + "\$wgExtensionEntryPointListFiles is not set" ); } $mmfl = [ 'setupFiles' => [] ]; diff --git a/maintenance/migrateFileRepoLayout.php b/maintenance/migrateFileRepoLayout.php index b2cce3ea58..536eddddb7 100644 --- a/maintenance/migrateFileRepoLayout.php +++ b/maintenance/migrateFileRepoLayout.php @@ -43,11 +43,11 @@ class MigrateFileRepoLayout extends Maintenance { public function execute() { $oldLayout = $this->getOption( 'oldlayout' ); if ( !in_array( $oldLayout, [ 'name', 'sha1' ] ) ) { - $this->error( "Invalid old layout.", 1 ); + $this->fatalError( "Invalid old layout." ); } $newLayout = $this->getOption( 'newlayout' ); if ( !in_array( $newLayout, [ 'name', 'sha1' ] ) ) { - $this->error( "Invalid new layout.", 1 ); + $this->fatalError( "Invalid new layout." ); } $since = $this->getOption( 'since' ); diff --git a/maintenance/migrateUserGroup.php b/maintenance/migrateUserGroup.php index ad82542fb5..81c2353b14 100644 --- a/maintenance/migrateUserGroup.php +++ b/maintenance/migrateUserGroup.php @@ -48,7 +48,7 @@ class MigrateUserGroup extends Maintenance { $end = $dbw->selectField( 'user_groups', 'MAX(ug_user)', [ 'ug_group' => $oldGroup ], __FUNCTION__ ); if ( $start === null ) { - $this->error( "Nothing to do - no users in the '$oldGroup' group", true ); + $this->fatalError( "Nothing to do - no users in the '$oldGroup' group" ); } # Do remaining chunk $end += $batchSize - 1; diff --git a/maintenance/minify.php b/maintenance/minify.php index 16e4d1c972..540a4d9022 100644 --- a/maintenance/minify.php +++ b/maintenance/minify.php @@ -48,14 +48,12 @@ class MinifyScript extends Maintenance { public function execute() { if ( !count( $this->mArgs ) ) { - $this->error( "minify.php: At least one input file must be specified." ); - exit( 1 ); + $this->fatalError( "minify.php: At least one input file must be specified." ); } if ( $this->hasOption( 'outfile' ) ) { if ( count( $this->mArgs ) > 1 ) { - $this->error( '--outfile may only be used with a single input file.' ); - exit( 1 ); + $this->fatalError( '--outfile may only be used with a single input file.' ); } // Minify one file @@ -77,7 +75,7 @@ class MinifyScript extends Maintenance { } if ( !file_exists( $inPath ) ) { - $this->error( "File does not exist: $arg", true ); + $this->fatalError( "File does not exist: $arg" ); } $extension = $this->getExtension( $inName ); @@ -95,8 +93,7 @@ class MinifyScript extends Maintenance { public function getExtension( $fileName ) { $dotPos = strrpos( $fileName, '.' ); if ( $dotPos === false ) { - $this->error( "No file extension, cannot determine type: $fileName" ); - exit( 1 ); + $this->fatalError( "No file extension, cannot determine type: $fileName" ); } return substr( $fileName, $dotPos + 1 ); @@ -108,13 +105,11 @@ class MinifyScript extends Maintenance { $inText = file_get_contents( $inPath ); if ( $inText === false ) { - $this->error( "Unable to open file $inPath for reading." ); - exit( 1 ); + $this->fatalError( "Unable to open file $inPath for reading." ); } $outFile = fopen( $outPath, 'w' ); if ( !$outFile ) { - $this->error( "Unable to open file $outPath for writing." ); - exit( 1 ); + $this->fatalError( "Unable to open file $outPath for writing." ); } switch ( $extension ) { diff --git a/maintenance/moveBatch.php b/maintenance/moveBatch.php index d578a49642..fa25a06cca 100644 --- a/maintenance/moveBatch.php +++ b/maintenance/moveBatch.php @@ -73,7 +73,7 @@ class MoveBatch extends Maintenance { # Setup if ( !$file ) { - $this->error( "Unable to read file, exiting", true ); + $this->fatalError( "Unable to read file, exiting" ); } if ( $user === false ) { $wgUser = User::newSystemUser( 'Move page script', [ 'steal' => true ] ); @@ -81,7 +81,7 @@ class MoveBatch extends Maintenance { $wgUser = User::newFromName( $user ); } if ( !$wgUser ) { - $this->error( "Invalid username", true ); + $this->fatalError( "Invalid username" ); } # Setup complete, now start diff --git a/maintenance/mwdocgen.php b/maintenance/mwdocgen.php index 43041a43df..94472683df 100644 --- a/maintenance/mwdocgen.php +++ b/maintenance/mwdocgen.php @@ -138,8 +138,7 @@ class MWDocGen extends Maintenance { $tmpFile = tempnam( wfTempDir(), 'MWDocGen-' ); if ( file_put_contents( $tmpFile, $conf ) === false ) { - $this->error( "Could not write doxygen configuration to file $tmpFile\n", - /** exit code: */ 1 ); + $this->fatalError( "Could not write doxygen configuration to file $tmpFile\n" ); } $command = $this->doxygen . ' ' . $tmpFile; @@ -161,8 +160,7 @@ TEXT ); if ( $exitcode !== 0 ) { - $this->error( "Something went wrong (exit: $exitcode)\n", - $exitcode ); + $this->fatalError( "Something went wrong (exit: $exitcode)\n", $exitcode ); } } } diff --git a/maintenance/pageExists.php b/maintenance/pageExists.php index b631005f5f..24ec8cb839 100644 --- a/maintenance/pageExists.php +++ b/maintenance/pageExists.php @@ -45,7 +45,7 @@ class PageExists extends Maintenance { $code = 1; } $this->output( $text ); - $this->error( '', $code ); + exit( $code ); } } diff --git a/maintenance/populateContentModel.php b/maintenance/populateContentModel.php index 7cc829d99e..a4fac055a0 100644 --- a/maintenance/populateContentModel.php +++ b/maintenance/populateContentModel.php @@ -51,7 +51,7 @@ class PopulateContentModel extends Maintenance { $ns = $this->getOption( 'ns' ); if ( !ctype_digit( $ns ) && $ns !== 'all' ) { - $this->error( 'Invalid namespace', 1 ); + $this->fatalError( 'Invalid namespace' ); } $ns = $ns === 'all' ? 'all' : (int)$ns; $table = $this->getOption( 'table' ); @@ -64,7 +64,7 @@ class PopulateContentModel extends Maintenance { $this->populatePage( $dbw, $ns ); break; default: - $this->error( "Invalid table name: $table", 1 ); + $this->fatalError( "Invalid table name: $table" ); } } diff --git a/maintenance/populateImageSha1.php b/maintenance/populateImageSha1.php index 2735a1ed8d..84b65ee7ac 100644 --- a/maintenance/populateImageSha1.php +++ b/maintenance/populateImageSha1.php @@ -76,9 +76,7 @@ class PopulateImageSha1 extends LoggedUpdateMaintenance { __METHOD__ ); if ( !$res ) { - $this->error( "No such file: $file", true ); - - return false; + $this->fatalError( "No such file: $file" ); } $this->output( "Populating img_sha1 field for specified files\n" ); } else { diff --git a/maintenance/populateRevisionLength.php b/maintenance/populateRevisionLength.php index 5de5819735..cc1a9f1658 100644 --- a/maintenance/populateRevisionLength.php +++ b/maintenance/populateRevisionLength.php @@ -44,9 +44,9 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance { public function doDBUpdates() { $dbw = $this->getDB( DB_MASTER ); if ( !$dbw->tableExists( 'revision' ) ) { - $this->error( "revision table does not exist", true ); + $this->fatalError( "revision table does not exist" ); } elseif ( !$dbw->tableExists( 'archive' ) ) { - $this->error( "archive table does not exist", true ); + $this->fatalError( "archive table does not exist" ); } elseif ( !$dbw->fieldExists( 'revision', 'rev_len', __METHOD__ ) ) { $this->output( "rev_len column does not exist\n\n", true ); diff --git a/maintenance/populateRevisionSha1.php b/maintenance/populateRevisionSha1.php index 89eff02159..f3506ec70f 100644 --- a/maintenance/populateRevisionSha1.php +++ b/maintenance/populateRevisionSha1.php @@ -45,9 +45,9 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance { $db = $this->getDB( DB_MASTER ); if ( !$db->tableExists( 'revision' ) ) { - $this->error( "revision table does not exist", true ); + $this->fatalError( "revision table does not exist" ); } elseif ( !$db->tableExists( 'archive' ) ) { - $this->error( "archive table does not exist", true ); + $this->fatalError( "archive table does not exist" ); } elseif ( !$db->fieldExists( 'revision', 'rev_sha1', __METHOD__ ) ) { $this->output( "rev_sha1 column does not exist\n\n", true ); diff --git a/maintenance/protect.php b/maintenance/protect.php index f6bb253202..eae615471a 100644 --- a/maintenance/protect.php +++ b/maintenance/protect.php @@ -59,7 +59,7 @@ class Protect extends Maintenance { $user = User::newFromName( $userName ); } if ( !$user ) { - $this->error( "Invalid username", true ); + $this->fatalError( "Invalid username" ); } // @todo FIXME: This is reset 7 lines down. @@ -67,7 +67,7 @@ class Protect extends Maintenance { $t = Title::newFromText( $this->getArg() ); if ( !$t ) { - $this->error( "Invalid title", true ); + $this->fatalError( "Invalid title" ); } $restrictions = []; diff --git a/maintenance/pruneFileCache.php b/maintenance/pruneFileCache.php index 8e6978d562..1035ff512f 100644 --- a/maintenance/pruneFileCache.php +++ b/maintenance/pruneFileCache.php @@ -43,25 +43,25 @@ class PruneFileCache extends Maintenance { global $wgUseFileCache, $wgFileCacheDirectory; if ( !$wgUseFileCache ) { - $this->error( "Nothing to do -- \$wgUseFileCache is disabled.", true ); + $this->fatalError( "Nothing to do -- \$wgUseFileCache is disabled." ); } $age = $this->getOption( 'agedays' ); if ( !ctype_digit( $age ) ) { - $this->error( "Non-integer 'age' parameter given.", true ); + $this->fatalError( "Non-integer 'age' parameter given." ); } // Delete items with a TS older than this $this->minSurviveTimestamp = time() - ( 86400 * $age ); $dir = $wgFileCacheDirectory; if ( !is_dir( $dir ) ) { - $this->error( "Nothing to do -- \$wgFileCacheDirectory directory not found.", true ); + $this->fatalError( "Nothing to do -- \$wgFileCacheDirectory directory not found." ); } $subDir = $this->getOption( 'subdir' ); if ( $subDir !== null ) { if ( !is_dir( "$dir/$subDir" ) ) { - $this->error( "The specified subdirectory `$subDir` does not exist.", true ); + $this->fatalError( "The specified subdirectory `$subDir` does not exist." ); } $this->output( "Pruning `$dir/$subDir` directory...\n" ); $this->prune_directory( "$dir/$subDir", 'report' ); diff --git a/maintenance/purgeParserCache.php b/maintenance/purgeParserCache.php index da2d850e15..716be3aab2 100644 --- a/maintenance/purgeParserCache.php +++ b/maintenance/purgeParserCache.php @@ -60,7 +60,7 @@ class PurgeParserCache extends Maintenance { } elseif ( $inputAge !== null ) { $date = wfTimestamp( TS_MW, time() + $wgParserCacheExpireTime - intval( $inputAge ) ); } else { - $this->error( "Must specify either --expiredate or --age", 1 ); + $this->fatalError( "Must specify either --expiredate or --age" ); return; } $this->usleep = 1e3 * $this->getOption( 'msleep', 0 ); @@ -72,7 +72,7 @@ class PurgeParserCache extends Maintenance { $pc = MediaWikiServices::getInstance()->getParserCache()->getCacheStorage(); $success = $pc->deleteObjectsExpiringBefore( $date, [ $this, 'showProgressAndWait' ] ); if ( !$success ) { - $this->error( "\nCannot purge this kind of parser cache.", 1 ); + $this->fatalError( "\nCannot purge this kind of parser cache." ); } $this->showProgressAndWait( 100 ); $this->output( "\nDone\n" ); diff --git a/maintenance/reassignEdits.php b/maintenance/reassignEdits.php index 7a0e4fc069..de09998114 100644 --- a/maintenance/reassignEdits.php +++ b/maintenance/reassignEdits.php @@ -186,7 +186,7 @@ class ReassignEdits extends Maintenance { } else { $user = User::newFromName( $username ); if ( !$user ) { - $this->error( "Invalid username", true ); + $this->fatalError( "Invalid username" ); } } $user->load(); diff --git a/maintenance/rebuildFileCache.php b/maintenance/rebuildFileCache.php index 19d8d06154..0b5b9b04e3 100644 --- a/maintenance/rebuildFileCache.php +++ b/maintenance/rebuildFileCache.php @@ -60,18 +60,18 @@ class RebuildFileCache extends Maintenance { global $wgRequestTime; if ( !$this->enabled ) { - $this->error( "Nothing to do -- \$wgUseFileCache is disabled.", true ); + $this->fatalError( "Nothing to do -- \$wgUseFileCache is disabled." ); } $start = $this->getOption( 'start', "0" ); if ( !ctype_digit( $start ) ) { - $this->error( "Invalid value for start parameter.", true ); + $this->fatalError( "Invalid value for start parameter." ); } $start = intval( $start ); $end = $this->getOption( 'end', "0" ); if ( !ctype_digit( $end ) ) { - $this->error( "Invalid value for end parameter.", true ); + $this->fatalError( "Invalid value for end parameter." ); } $end = intval( $end ); @@ -87,7 +87,7 @@ class RebuildFileCache extends Maintenance { ? $end : $dbr->selectField( 'page', 'MAX(page_id)', false, __METHOD__ ); if ( !$start ) { - $this->error( "Nothing to do.", true ); + $this->fatalError( "Nothing to do." ); } $_SERVER['HTTP_ACCEPT_ENCODING'] = 'bgzip'; // hack, no real client diff --git a/maintenance/rebuildLocalisationCache.php b/maintenance/rebuildLocalisationCache.php index 48602de0f4..8f924209d5 100644 --- a/maintenance/rebuildLocalisationCache.php +++ b/maintenance/rebuildLocalisationCache.php @@ -92,7 +92,7 @@ class RebuildLocalisationCache extends Maintenance { explode( ',', $this->getOption( 'lang' ) ) ); # Bailed out if nothing is left if ( count( $codes ) == 0 ) { - $this->error( 'None of the languages specified exists.', 1 ); + $this->fatalError( 'None of the languages specified exists.' ); } } else { # By default get all languages diff --git a/maintenance/rebuildSitesCache.php b/maintenance/rebuildSitesCache.php index 230e86d48a..93e6d478da 100644 --- a/maintenance/rebuildSitesCache.php +++ b/maintenance/rebuildSitesCache.php @@ -55,7 +55,7 @@ class RebuildSitesCache extends Maintenance { $jsonFile = $this->getConfig()->get( 'SitesCacheFile' ); if ( $jsonFile === false ) { - $this->error( 'Error: No file set in configuration for SitesCacheFile.', 1 ); + $this->fatalError( 'Error: No file set in configuration for SitesCacheFile.' ); } } diff --git a/maintenance/rebuildrecentchanges.php b/maintenance/rebuildrecentchanges.php index 6d4a4bfb10..bbf91f585e 100644 --- a/maintenance/rebuildrecentchanges.php +++ b/maintenance/rebuildrecentchanges.php @@ -61,7 +61,7 @@ class RebuildRecentchanges extends Maintenance { ( $this->hasOption( 'from' ) && !$this->hasOption( 'to' ) ) || ( !$this->hasOption( 'from' ) && $this->hasOption( 'to' ) ) ) { - $this->error( "Both 'from' and 'to' must be given, or neither", 1 ); + $this->fatalError( "Both 'from' and 'to' must be given, or neither" ); } $this->rebuildRecentChangesTablePass1(); diff --git a/maintenance/rebuildtextindex.php b/maintenance/rebuildtextindex.php index 5971d5e9f7..0e41ff3240 100644 --- a/maintenance/rebuildtextindex.php +++ b/maintenance/rebuildtextindex.php @@ -56,17 +56,17 @@ class RebuildTextIndex extends Maintenance { // Shouldn't be needed for Postgres $this->db = $this->getDB( DB_MASTER ); if ( $this->db->getType() == 'postgres' ) { - $this->error( "This script is not needed when using Postgres.\n", true ); + $this->fatalError( "This script is not needed when using Postgres.\n" ); } if ( $this->db->getType() == 'sqlite' ) { if ( !DatabaseSqlite::getFulltextSearchModule() ) { - $this->error( "Your version of SQLite module for PHP doesn't " - . "support full-text search (FTS3).\n", true ); + $this->fatalError( "Your version of SQLite module for PHP doesn't " + . "support full-text search (FTS3).\n" ); } if ( !$this->db->checkForEnabledSearch() ) { - $this->error( "Your database schema is not configured for " - . "full-text search support. Run update.php.\n", true ); + $this->fatalError( "Your database schema is not configured for " + . "full-text search support. Run update.php.\n" ); } } diff --git a/maintenance/recountCategories.php b/maintenance/recountCategories.php index b4d75c7a1a..ed6a357b36 100644 --- a/maintenance/recountCategories.php +++ b/maintenance/recountCategories.php @@ -75,7 +75,7 @@ TEXT public function execute() { $this->mode = $this->getOption( 'mode' ); if ( !in_array( $this->mode, [ 'pages', 'subcats', 'files' ] ) ) { - $this->error( 'Please specify a valid mode: one of "pages", "subcats" or "files".', 1 ); + $this->fatalError( 'Please specify a valid mode: one of "pages", "subcats" or "files".' ); } $this->minimumId = intval( $this->getOption( 'begin', 0 ) ); diff --git a/maintenance/refreshImageMetadata.php b/maintenance/refreshImageMetadata.php index f6c0673b10..dcfed115d0 100644 --- a/maintenance/refreshImageMetadata.php +++ b/maintenance/refreshImageMetadata.php @@ -108,7 +108,7 @@ class RefreshImageMetadata extends Maintenance { $dbw = $this->getDB( DB_MASTER ); $batchSize = $this->getBatchSize(); if ( $batchSize <= 0 ) { - $this->error( "Batch size is too low...", 12 ); + $this->fatalError( "Batch size is too low...", 12 ); } $repo = RepoGroup::singleton()->getLocalRepo(); @@ -255,7 +255,7 @@ class RefreshImageMetadata extends Maintenance { } if ( $brokenOnly && $force ) { - $this->error( 'Cannot use --broken-only and --force together. ', 2 ); + $this->fatalError( 'Cannot use --broken-only and --force together. ', 2 ); } } } diff --git a/maintenance/refreshLinks.php b/maintenance/refreshLinks.php index cea9e0cbab..4fab1461d9 100644 --- a/maintenance/refreshLinks.php +++ b/maintenance/refreshLinks.php @@ -70,7 +70,7 @@ class RefreshLinks extends Maintenance { if ( ( $category = $this->getOption( 'category', false ) ) !== false ) { $title = Title::makeTitleSafe( NS_CATEGORY, $category ); if ( !$title ) { - $this->error( "'$category' is an invalid category name!\n", true ); + $this->fatalError( "'$category' is an invalid category name!\n" ); } $this->refreshCategory( $title ); } elseif ( ( $category = $this->getOption( 'tracking-category', false ) ) !== false ) { @@ -485,7 +485,7 @@ class RefreshLinks extends Maintenance { if ( isset( $cats[$categoryKey] ) ) { return $cats[$categoryKey]['cats']; } - $this->error( "Unknown tracking category {$categoryKey}\n", true ); + $this->fatalError( "Unknown tracking category {$categoryKey}\n" ); } } diff --git a/maintenance/removeUnusedAccounts.php b/maintenance/removeUnusedAccounts.php index c750784e2a..767924fda6 100644 --- a/maintenance/removeUnusedAccounts.php +++ b/maintenance/removeUnusedAccounts.php @@ -53,7 +53,7 @@ class RemoveUnusedAccounts extends Maintenance { } $touched = $this->getOption( 'ignore-touched', "1" ); if ( !ctype_digit( $touched ) ) { - $this->error( "Please put a valid positive integer on the --ignore-touched parameter.", true ); + $this->fatalError( "Please put a valid positive integer on the --ignore-touched parameter." ); } $touchedSeconds = 86400 * $touched; foreach ( $res as $row ) { diff --git a/maintenance/renameDbPrefix.php b/maintenance/renameDbPrefix.php index 2772f04b19..6aefc390f7 100644 --- a/maintenance/renameDbPrefix.php +++ b/maintenance/renameDbPrefix.php @@ -62,7 +62,7 @@ class RenameDbPrefix extends Maintenance { } if ( $old === false || $new === false ) { - $this->error( "Invalid prefix!", true ); + $this->fatalError( "Invalid prefix!" ); } if ( $old === $new ) { $this->output( "Same prefix. Nothing to rename!\n", true ); diff --git a/maintenance/resetUserEmail.php b/maintenance/resetUserEmail.php index 8d0873f1b5..f59ce6c2a9 100644 --- a/maintenance/resetUserEmail.php +++ b/maintenance/resetUserEmail.php @@ -48,12 +48,12 @@ class ResetUserEmail extends Maintenance { $user = User::newFromName( $userName ); } if ( !$user || !$user->getId() || !$user->loadFromId() ) { - $this->error( "Error: user '$userName' does not exist\n", 1 ); + $this->fatalError( "Error: user '$userName' does not exist\n" ); } $email = $this->getArg( 1 ); if ( !Sanitizer::validateEmail( $email ) ) { - $this->error( "Error: email '$email' is not valid\n", 1 ); + $this->fatalError( "Error: email '$email' is not valid\n" ); } // Code from https://wikitech.wikimedia.org/wiki/Password_reset diff --git a/maintenance/rollbackEdits.php b/maintenance/rollbackEdits.php index 5ad7d4e1c4..ca9abb1ce3 100644 --- a/maintenance/rollbackEdits.php +++ b/maintenance/rollbackEdits.php @@ -50,7 +50,7 @@ class RollbackEdits extends Maintenance { $user = $this->getOption( 'user' ); $username = User::isIP( $user ) ? $user : User::getCanonicalName( $user ); if ( !$username ) { - $this->error( 'Invalid username', true ); + $this->fatalError( 'Invalid username' ); } $bot = $this->hasOption( 'bot' ); diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php index af2a318bac..0874538b19 100644 --- a/maintenance/runJobs.php +++ b/maintenance/runJobs.php @@ -59,7 +59,7 @@ class RunJobs extends Maintenance { if ( $this->hasOption( 'procs' ) ) { $procs = intval( $this->getOption( 'procs' ) ); if ( $procs < 1 || $procs > 1000 ) { - $this->error( "Invalid argument to --procs", true ); + $this->fatalError( "Invalid argument to --procs" ); } elseif ( $procs != 1 ) { $fc = new ForkController( $procs ); if ( $fc->start() != 'child' ) { diff --git a/maintenance/shell.php b/maintenance/shell.php index 65c353a29e..75b2e22ce9 100644 --- a/maintenance/shell.php +++ b/maintenance/shell.php @@ -58,7 +58,7 @@ class MediaWikiShell extends Maintenance { public function execute() { if ( !class_exists( \Psy\Shell::class ) ) { - $this->error( 'PsySH not found. Please run composer with the --dev option.', 1 ); + $this->fatalError( 'PsySH not found. Please run composer with the --dev option.' ); } $traverser = new \PhpParser\NodeTraverser(); diff --git a/maintenance/sql.php b/maintenance/sql.php index 36e55f3eed..8e276e7750 100644 --- a/maintenance/sql.php +++ b/maintenance/sql.php @@ -72,7 +72,7 @@ class MwSql extends Maintenance { } } if ( $index === null ) { - $this->error( "No replica DB server configured with the name '$replicaDB'.", 1 ); + $this->fatalError( "No replica DB server configured with the name '$replicaDB'." ); } } else { $index = DB_MASTER; @@ -81,7 +81,7 @@ class MwSql extends Maintenance { /** @var IDatabase $db DB handle for the appropriate cluster/wiki */ $db = $lb->getConnection( $index, [], $wiki ); if ( $replicaDB != '' && $db->getLBInfo( 'master' ) !== null ) { - $this->error( "The server selected ({$db->getServer()}) is not a replica DB.", 1 ); + $this->fatalError( "The server selected ({$db->getServer()}) is not a replica DB." ); } if ( $index === DB_MASTER ) { @@ -92,12 +92,12 @@ class MwSql extends Maintenance { if ( $this->hasArg( 0 ) ) { $file = fopen( $this->getArg( 0 ), 'r' ); if ( !$file ) { - $this->error( "Unable to open input file", true ); + $this->fatalError( "Unable to open input file" ); } $error = $db->sourceStream( $file, null, [ $this, 'sqlPrintResult' ] ); if ( $error !== true ) { - $this->error( $error, true ); + $this->fatalError( $error ); } else { exit( 0 ); } @@ -157,7 +157,11 @@ class MwSql extends Maintenance { $res = $db->query( $line ); $this->sqlPrintResult( $res, $db ); } catch ( DBQueryError $e ) { - $this->error( $e, $dieOnError ); + if ( $dieOnError ) { + $this->fatalError( $e ); + } else { + $this->error( $e ); + } } } diff --git a/maintenance/sqlite.php b/maintenance/sqlite.php index e74a86cf69..fbde4175bc 100644 --- a/maintenance/sqlite.php +++ b/maintenance/sqlite.php @@ -83,7 +83,7 @@ class SqliteMaintenance extends Maintenance { private function vacuum() { $prevSize = filesize( $this->db->getDbFilePath() ); if ( $prevSize == 0 ) { - $this->error( "Can't vacuum an empty database.\n", true ); + $this->fatalError( "Can't vacuum an empty database.\n" ); } $this->output( 'VACUUM: ' ); diff --git a/maintenance/storage/checkStorage.php b/maintenance/storage/checkStorage.php index 9045870da4..acf0103bfa 100644 --- a/maintenance/storage/checkStorage.php +++ b/maintenance/storage/checkStorage.php @@ -134,24 +134,24 @@ class CheckStorage { // This is a known bug from 2004 // It's safe to just erase the old_flags field if ( $fix ) { - $this->error( 'fixed', "Warning: old_flags set to 0", $id ); + $this->addError( 'fixed', "Warning: old_flags set to 0", $id ); $dbw = wfGetDB( DB_MASTER ); $dbw->ping(); $dbw->update( 'text', [ 'old_flags' => '' ], [ 'old_id' => $id ], __METHOD__ ); echo "Fixed\n"; } else { - $this->error( 'fixable', "Warning: old_flags set to 0", $id ); + $this->addError( 'fixable', "Warning: old_flags set to 0", $id ); } } elseif ( count( array_diff( $flagArray, $knownFlags ) ) ) { - $this->error( 'unfixable', "Error: invalid flags field \"$flags\"", $id ); + $this->addError( 'unfixable', "Error: invalid flags field \"$flags\"", $id ); } } $dbr->freeResult( $res ); // Output errors for any missing text rows foreach ( $missingTextRows as $oldId => $revId ) { - $this->error( 'restore revision', "Error: missing text row", $oldId ); + $this->addError( 'restore revision', "Error: missing text row", $oldId ); } // Verify external revisions @@ -163,12 +163,15 @@ class CheckStorage { foreach ( $res as $row ) { $urlParts = explode( '://', $row->old_text, 2 ); if ( count( $urlParts ) !== 2 || $urlParts[1] == '' ) { - $this->error( 'restore text', "Error: invalid URL \"{$row->old_text}\"", $row->old_id ); + $this->addError( 'restore text', "Error: invalid URL \"{$row->old_text}\"", $row->old_id ); continue; } list( $proto, ) = $urlParts; if ( $proto != 'DB' ) { - $this->error( 'restore text', "Error: invalid external protocol \"$proto\"", $row->old_id ); + $this->addError( + 'restore text', + "Error: invalid external protocol \"$proto\"", + $row->old_id ); continue; } $path = explode( '/', $row->old_text ); @@ -204,7 +207,10 @@ class CheckStorage { $extDb->freeResult( $res ); // Print errors for missing blobs rows foreach ( $xBlobIds as $blobId => $oldId ) { - $this->error( 'restore text', "Error: missing target $blobId for one-part ES URL", $oldId ); + $this->addError( + 'restore text', + "Error: missing target $blobId for one-part ES URL", + $oldId ); } } } @@ -225,13 +231,13 @@ class CheckStorage { $oldId = $row->old_id; $matches = []; if ( !preg_match( '/^O:(\d+):"(\w+)"/', $row->header, $matches ) ) { - $this->error( 'restore text', "Error: invalid object header", $oldId ); + $this->addError( 'restore text', "Error: invalid object header", $oldId ); continue; } $className = strtolower( $matches[2] ); if ( strlen( $className ) != $matches[1] ) { - $this->error( + $this->addError( 'restore text', "Error: invalid object header, wrong class name length", $oldId @@ -249,12 +255,12 @@ class CheckStorage { case 'historyblobstub': case 'historyblobcurstub': if ( strlen( $row->header ) == $headerLength ) { - $this->error( 'unfixable', "Error: overlong stub header", $oldId ); + $this->addError( 'unfixable', "Error: overlong stub header", $oldId ); continue; } $stubObj = unserialize( $row->header ); if ( !is_object( $stubObj ) ) { - $this->error( 'restore text', "Error: unable to unserialize stub object", $oldId ); + $this->addError( 'restore text', "Error: unable to unserialize stub object", $oldId ); continue; } if ( $className == 'historyblobstub' ) { @@ -264,7 +270,7 @@ class CheckStorage { } break; default: - $this->error( 'unfixable', "Error: unrecognised object class \"$className\"", $oldId ); + $this->addError( 'unfixable', "Error: unrecognised object class \"$className\"", $oldId ); } } $dbr->freeResult( $res ); @@ -287,7 +293,7 @@ class CheckStorage { if ( in_array( 'object', $flags ) ) { $urlParts = explode( '/', $row->header ); if ( $urlParts[0] != 'DB:' ) { - $this->error( + $this->addError( 'unfixable', "Error: unrecognised external storage type \"{$urlParts[0]}", $row->old_id @@ -303,7 +309,7 @@ class CheckStorage { ); } } else { - $this->error( + $this->addError( 'unfixable', "Error: invalid flags \"{$row->old_flags}\" on concat bulk row {$row->old_id}", $concatBlobs[$row->old_id] ); @@ -312,7 +318,7 @@ class CheckStorage { substr( $row->header, 0, strlen( self::CONCAT_HEADER ) ), self::CONCAT_HEADER ) ) { - $this->error( + $this->addError( 'restore text', "Error: Incorrect object header for concat bulk row {$row->old_id}", $concatBlobs[$row->old_id] @@ -357,7 +363,7 @@ class CheckStorage { } } - function error( $type, $msg, $ids ) { + function addError( $type, $msg, $ids ) { if ( is_array( $ids ) && count( $ids ) == 1 ) { $ids = reset( $ids ); } @@ -399,7 +405,7 @@ class CheckStorage { [ 'blob_id IN( ' . implode( ',', $blobIds ) . ')' ], __METHOD__ ); foreach ( $res as $row ) { if ( strcasecmp( $row->header, self::CONCAT_HEADER ) ) { - $this->error( + $this->addError( 'restore text', "Error: invalid header on target $cluster/{$row->blob_id} of two-part ES URL", $oldIds[$row->blob_id] @@ -411,7 +417,7 @@ class CheckStorage { // Print errors for missing blobs rows foreach ( $oldIds as $blobId => $oldIds2 ) { - $this->error( + $this->addError( 'restore text', "Error: missing target $cluster/$blobId for two-part ES URL", $oldIds2 diff --git a/maintenance/storage/compressOld.php b/maintenance/storage/compressOld.php index c17ce99ca7..0ae46ae22a 100644 --- a/maintenance/storage/compressOld.php +++ b/maintenance/storage/compressOld.php @@ -103,8 +103,8 @@ class CompressOld extends Maintenance { public function execute() { global $wgDBname; if ( !function_exists( "gzdeflate" ) ) { - $this->error( "You must enable zlib support in PHP to compress old revisions!\n" . - "Please see http://www.php.net/manual/en/ref.zlib.php\n", true ); + $this->fatalError( "You must enable zlib support in PHP to compress old revisions!\n" . + "Please see http://www.php.net/manual/en/ref.zlib.php\n" ); } $type = $this->getOption( 'type', 'concat' ); diff --git a/maintenance/storage/dumpRev.php b/maintenance/storage/dumpRev.php index 437bfcdefc..d39acd4829 100644 --- a/maintenance/storage/dumpRev.php +++ b/maintenance/storage/dumpRev.php @@ -43,7 +43,7 @@ class DumpRev extends Maintenance { [ 'old_id=rev_text_id', 'rev_id' => $this->getArg() ] ); if ( !$row ) { - $this->error( "Row not found", true ); + $this->fatalError( "Row not found" ); } $flags = explode( ',', $row->old_flags ); diff --git a/maintenance/storage/orphanStats.php b/maintenance/storage/orphanStats.php index d7d0b84c5f..eb72915417 100644 --- a/maintenance/storage/orphanStats.php +++ b/maintenance/storage/orphanStats.php @@ -45,7 +45,7 @@ class OrphanStats extends Maintenance { public function execute() { $dbr = $this->getDB( DB_REPLICA ); if ( !$dbr->tableExists( 'blob_orphans' ) ) { - $this->error( "blob_orphans doesn't seem to exist, need to run trackBlobs.php first", true ); + $this->fatalError( "blob_orphans doesn't seem to exist, need to run trackBlobs.php first" ); } $res = $dbr->select( 'blob_orphans', '*', false, __METHOD__ ); diff --git a/maintenance/syncFileBackend.php b/maintenance/syncFileBackend.php index 154f54e53f..68afde70ee 100644 --- a/maintenance/syncFileBackend.php +++ b/maintenance/syncFileBackend.php @@ -54,7 +54,7 @@ class SyncFileBackend extends Maintenance { if ( $this->hasOption( 'posdump' ) ) { // Just dump the current position into the specified position dir if ( !$this->hasOption( 'posdir' ) ) { - $this->error( "Param posdir required!", 1 ); + $this->fatalError( "Param posdir required!" ); } if ( $this->hasOption( 'postime' ) ) { $id = (int)$src->getJournal()->getPositionAtTime( $this->getOption( 'postime' ) ); @@ -76,7 +76,7 @@ class SyncFileBackend extends Maintenance { } if ( !$this->hasOption( 'dst' ) ) { - $this->error( "Param dst required!", 1 ); + $this->fatalError( "Param dst required!" ); } $dst = FileBackendGroup::singleton()->get( $this->getOption( 'dst' ) ); @@ -156,7 +156,7 @@ class SyncFileBackend extends Maintenance { $first = true; // first batch if ( $start > $end ) { // sanity - $this->error( "Error: given starting ID greater than ending ID.", 1 ); + $this->fatalError( "Error: given starting ID greater than ending ID." ); } $next = null; diff --git a/maintenance/undelete.php b/maintenance/undelete.php index c2d5c2c248..278b68d377 100644 --- a/maintenance/undelete.php +++ b/maintenance/undelete.php @@ -41,7 +41,7 @@ class Undelete extends Maintenance { $title = Title::newFromText( $pageName ); if ( !$title ) { - $this->error( "Invalid title", true ); + $this->fatalError( "Invalid title" ); } if ( $user === false ) { $wgUser = User::newSystemUser( 'Command line script', [ 'steal' => true ] ); @@ -49,7 +49,7 @@ class Undelete extends Maintenance { $wgUser = User::newFromName( $user ); } if ( !$wgUser ) { - $this->error( "Invalid username", true ); + $this->fatalError( "Invalid username" ); } $archive = new PageArchive( $title, RequestContext::getMain()->getConfig() ); $this->output( "Undeleting " . $title->getPrefixedDBkey() . '...' ); diff --git a/maintenance/update.php b/maintenance/update.php index f8f5dcdd0b..529c069e79 100755 --- a/maintenance/update.php +++ b/maintenance/update.php @@ -66,23 +66,21 @@ class UpdateMediaWiki extends Maintenance { list( $pcreVersion ) = explode( ' ', PCRE_VERSION, 2 ); if ( version_compare( $pcreVersion, $minimumPcreVersion, '<' ) ) { - $this->error( + $this->fatalError( "PCRE $minimumPcreVersion or later is required.\n" . "Your PHP binary is linked with PCRE $pcreVersion.\n\n" . "More information:\n" . "https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE\n\n" . - "ABORTING.\n", - true ); + "ABORTING.\n" ); } $test = new PhpXmlBugTester(); if ( !$test->ok ) { - $this->error( + $this->fatalError( "Your system has a combination of PHP and libxml2 versions that is buggy\n" . "and can cause hidden data corruption in MediaWiki and other web apps.\n" . "Upgrade to libxml2 2.7.3 or later.\n" . - "ABORTING (see https://bugs.php.net/bug.php?id=45996).\n", - true ); + "ABORTING (see https://bugs.php.net/bug.php?id=45996).\n" ); } } @@ -94,22 +92,22 @@ class UpdateMediaWiki extends Maintenance { || $this->hasOption( 'schema' ) || $this->hasOption( 'noschema' ) ) ) { - $this->error( "Do not run update.php on this wiki. If you're seeing this you should\n" + $this->fatalError( "Do not run update.php on this wiki. If you're seeing this you should\n" . "probably ask for some help in performing your schema updates or use\n" . "the --noschema and --schema options to get an SQL file for someone\n" . "else to inspect and run.\n\n" - . "If you know what you are doing, you can continue with --force\n", true ); + . "If you know what you are doing, you can continue with --force\n" ); } $this->fileHandle = null; if ( substr( $this->getOption( 'schema' ), 0, 2 ) === "--" ) { - $this->error( "The --schema option requires a file as an argument.\n", true ); + $this->fatalError( "The --schema option requires a file as an argument.\n" ); } elseif ( $this->hasOption( 'schema' ) ) { $file = $this->getOption( 'schema' ); $this->fileHandle = fopen( $file, "w" ); if ( $this->fileHandle === false ) { $err = error_get_last(); - $this->error( "Problem opening the schema file for writing: $file\n\t{$err['message']}", true ); + $this->fatalError( "Problem opening the schema file for writing: $file\n\t{$err['message']}" ); } } @@ -152,7 +150,7 @@ class UpdateMediaWiki extends Maintenance { if ( !$status->isOK() ) { // This might output some wikitext like but it should be comprehensible $text = $status->getWikiText(); - $this->error( $text, 1 ); + $this->fatalError( $text ); } $this->output( "Going to run database updates for " . wfWikiID() . "\n" ); diff --git a/maintenance/updateDoubleWidthSearch.php b/maintenance/updateDoubleWidthSearch.php index cb2f125eca..12056c8897 100644 --- a/maintenance/updateDoubleWidthSearch.php +++ b/maintenance/updateDoubleWidthSearch.php @@ -53,7 +53,7 @@ class UpdateDoubleWidthSearch extends Maintenance { $dbw = $this->getDB( DB_MASTER ); if ( $dbw->getType() !== 'mysql' ) { - $this->error( "This change is only needed on MySQL, quitting.\n", true ); + $this->fatalError( "This change is only needed on MySQL, quitting.\n" ); } $res = $this->findRows( $dbw ); diff --git a/maintenance/updateExtensionJsonSchema.php b/maintenance/updateExtensionJsonSchema.php index 427769f19f..264f4be1d6 100644 --- a/maintenance/updateExtensionJsonSchema.php +++ b/maintenance/updateExtensionJsonSchema.php @@ -14,12 +14,12 @@ class UpdateExtensionJsonSchema extends Maintenance { public function execute() { $filename = $this->getArg( 0 ); if ( !is_readable( $filename ) ) { - $this->error( "Error: Unable to read $filename", 1 ); + $this->fatalError( "Error: Unable to read $filename" ); } $json = FormatJson::decode( file_get_contents( $filename ), true ); if ( $json === null ) { - $this->error( "Error: Invalid JSON", 1 ); + $this->fatalError( "Error: Invalid JSON" ); } if ( !isset( $json['manifest_version'] ) ) { diff --git a/maintenance/updateRestrictions.php b/maintenance/updateRestrictions.php index 334ed279f6..c0b7b10f9b 100644 --- a/maintenance/updateRestrictions.php +++ b/maintenance/updateRestrictions.php @@ -43,12 +43,12 @@ class UpdateRestrictions extends Maintenance { $db = $this->getDB( DB_MASTER ); $batchSize = $this->getBatchSize(); if ( !$db->tableExists( 'page_restrictions' ) ) { - $this->error( "page_restrictions table does not exist", true ); + $this->fatalError( "page_restrictions table does not exist" ); } $start = $db->selectField( 'page', 'MIN(page_id)', false, __METHOD__ ); if ( !$start ) { - $this->error( "Nothing to do.", true ); + $this->fatalError( "Nothing to do." ); } $end = $db->selectField( 'page', 'MAX(page_id)', false, __METHOD__ ); diff --git a/maintenance/updateSpecialPages.php b/maintenance/updateSpecialPages.php index e2c0c61592..58f23df08d 100644 --- a/maintenance/updateSpecialPages.php +++ b/maintenance/updateSpecialPages.php @@ -72,7 +72,7 @@ class UpdateSpecialPages extends Maintenance { $queryPage = $specialObj; } else { $class = get_class( $specialObj ); - $this->error( "$class is not an instance of QueryPage.\n", 1 ); + $this->fatalError( "$class is not an instance of QueryPage.\n" ); die; } diff --git a/maintenance/userOptions.php b/maintenance/userOptions.php index 7cf16b611e..5692f11a15 100644 --- a/maintenance/userOptions.php +++ b/maintenance/userOptions.php @@ -102,7 +102,7 @@ The new option is NOT validated.' ); // Get the options and update stats if ( $option ) { if ( !array_key_exists( $option, $defaultOptions ) ) { - $this->error( "Invalid user option. Use --list to see valid choices\n", 1 ); + $this->fatalError( "Invalid user option. Use --list to see valid choices\n" ); } $userValue = $user->getOption( $option ); diff --git a/maintenance/validateRegistrationFile.php b/maintenance/validateRegistrationFile.php index aa1f668d3b..ea27a7e3c2 100644 --- a/maintenance/validateRegistrationFile.php +++ b/maintenance/validateRegistrationFile.php @@ -9,7 +9,7 @@ class ValidateRegistrationFile extends Maintenance { } public function execute() { $validator = new ExtensionJsonValidator( function ( $msg ) { - $this->error( $msg, 1 ); + $this->fatalError( $msg ); } ); $validator->checkDependencies(); $path = $this->getArg( 0 ); @@ -17,7 +17,7 @@ class ValidateRegistrationFile extends Maintenance { $validator->validate( $path ); $this->output( "$path validates against the schema!\n" ); } catch ( ExtensionJsonValidationError $e ) { - $this->error( $e->getMessage(), 1 ); + $this->fatalError( $e->getMessage() ); } } } diff --git a/maintenance/view.php b/maintenance/view.php index af7eb2d923..8c0237f63f 100644 --- a/maintenance/view.php +++ b/maintenance/view.php @@ -38,17 +38,17 @@ class ViewCLI extends Maintenance { public function execute() { $title = Title::newFromText( $this->getArg() ); if ( !$title ) { - $this->error( "Invalid title", true ); + $this->fatalError( "Invalid title" ); } $page = WikiPage::factory( $title ); $content = $page->getContent( Revision::RAW ); if ( !$content ) { - $this->error( "Page has no content", true ); + $this->fatalError( "Page has no content" ); } if ( !$content instanceof TextContent ) { - $this->error( "Non-text content models not supported", true ); + $this->fatalError( "Non-text content models not supported" ); } $this->output( $content->getNativeData() ); diff --git a/maintenance/wrapOldPasswords.php b/maintenance/wrapOldPasswords.php index 6a601ad8b5..94bd3cb15b 100644 --- a/maintenance/wrapOldPasswords.php +++ b/maintenance/wrapOldPasswords.php @@ -51,12 +51,12 @@ class WrapOldPasswords extends Maintenance { // Check that type exists and is a layered type if ( !isset( $typeInfo[$layeredType] ) ) { - $this->error( 'Undefined password type', true ); + $this->fatalError( 'Undefined password type' ); } $passObj = $passwordFactory->newFromType( $layeredType ); if ( !$passObj instanceof LayeredParameterizedPassword ) { - $this->error( 'Layered parameterized password type must be used.', true ); + $this->fatalError( 'Layered parameterized password type must be used.' ); } // Extract the first layer type -- 2.20.1