* is the execute() method. See docs/maintenance.txt for more info
* and a quick demo of how to use it.
*
- * @author Chad Horohoe <chad@anyonecanedit.org>
* @since 1.16
* @ingroup Maintenance
*/
return $this->hasArg( $argId ) ? $this->mArgs[$argId] : $default;
}
+ /**
+ * Returns batch size
+ *
+ * @since 1.31
+ *
+ * @return int|null
+ */
+ protected function getBatchSize() {
+ return $this->mBatchSize;
+ }
+
/**
* Set the batch size.
* @param int $s The number of operations to do in a batch
* 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;
"http://en.wikipedia.org. This is sometimes necessary because " .
"server name detection may fail in command line scripts.", false, true );
$this->addOption( 'profiler', 'Profiler output format (usually "text")', false, true );
+ // This is named --mwdebug, because --debug would conflict in the phpunit.php CLI script.
+ $this->addOption( 'mwdebug', 'Enable built-in MediaWiki development settings', false, true );
# Save generic options to display them separately in help
$this->mGenericParameters = $this->mParams;
$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 );
}
}
global $IP, $wgCommandLineMode, $wgRequestTime;
# 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 );
+ if ( PHP_SAPI !== 'cli' ) {
+ $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.
MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->destroy();
}
+ # Apply debug settings
+ if ( $this->hasOption( 'mwdebug' ) ) {
+ require __DIR__ . '/../includes/DevelopmentSettings.php';
+ }
+
// Per-script profiling; useful for debugging
$this->activateProfiler();
}
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;
* @return string
*/
private static function readlineEmulation( $prompt ) {
- $bash = Installer::locateExecutableInDefaultPaths( [ 'bash' ] );
+ $bash = ExecutableFinder::findInDefaultPaths( 'bash' );
if ( !wfIsWindows() && $bash ) {
$retval = false;
$encPrompt = wfEscapeShellArg( $prompt );