wfEntryPointCheck( 'cli' );
use MediaWiki\Shell\Shell;
-use Wikimedia\Rdbms\DBReplicationWaitError;
/**
* @defgroup MaintenanceArchive Maintenance archives
// This is the list of arguments that were actually passed
protected $mArgs = [];
+ // Allow arbitrary options to be passed, or only specified ones?
+ protected $mAllowUnregisteredOptions = false;
+
// Name of the script currently running
protected $mSelf;
*/
abstract public function execute();
+ /**
+ * Checks to see if a particular option in supported. Normally this means it
+ * has been registered by the script via addOption.
+ * @param string $name The name of the option
+ * @return bool true if the option exists, false otherwise
+ */
+ protected function supportsOption( $name ) {
+ return isset( $this->mParams[$name] );
+ }
+
/**
* Add a parameter to the script. Will be displayed on --help
* with the associated description
}
/**
- * Checks to see if a particular param exists.
- * @param string $name The name of the param
+ * Checks to see if a particular option exists.
+ * @param string $name The name of the option
* @return bool
*/
protected function hasOption( $name ) {
unset( $this->mParams[$name] );
}
+ /**
+ * Sets whether to allow unregistered options, which are options passed to
+ * a script that do not match an expected parameter.
+ * @param bool $allow Should we allow?
+ */
+ protected function setAllowUnregisteredOptions( $allow ) {
+ $this->mAllowUnregisteredOptions = $allow;
+ }
+
/**
* Set the description text.
* @param string $text The text of the description
# Generic (non script dependant) options:
$this->addOption( 'help', 'Display this help message', false, false, 'h' );
- $this->addOption( 'quiet', 'Whether to supress non-error output', false, false, 'q' );
+ $this->addOption( 'quiet', 'Whether to suppress non-error output', false, false, 'q' );
$this->addOption( 'conf', 'Location of LocalSettings.php, if not default', false, true );
$this->addOption( 'wiki', 'For specifying the wiki ID', false, true );
$this->addOption( 'globals', 'Output globals at the end of processing for debugging' );
$die = true;
}
}
+ if ( !$this->mAllowUnregisteredOptions ) {
+ # Check for unexpected options
+ foreach ( $this->mOptions as $opt => $val ) {
+ if ( !$this->supportsOption( $opt ) ) {
+ $this->error( "Unexpected option $opt!" );
+ $die = true;
+ }
+ }
+ }
if ( $die ) {
$this->maybeHelp( true );
*/
protected function commitTransaction( IDatabase $dbw, $fname ) {
$dbw->commit( $fname );
- try {
- $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
- $lbFactory->waitForReplication(
- [ 'timeout' => 30, 'ifWritesSince' => $this->lastReplicationWait ]
- );
- $this->lastReplicationWait = microtime( true );
-
- return true;
- } catch ( DBReplicationWaitError $e ) {
- return false;
- }
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ $waitSucceeded = $lbFactory->waitForReplication(
+ [ 'timeout' => 30, 'ifWritesSince' => $this->lastReplicationWait ]
+ );
+ $this->lastReplicationWait = microtime( true );
+ return $waitSucceeded;
}
/**