* @defgroup Maintenance Maintenance
*/
+/**
+ * @defgroup MaintenanceArchive Maintenance archives
+ * @ingroup Maintenance
+ */
+
// Define this so scripts can easily find doMaintenance.php
define( 'RUN_MAINTENANCE_IF_MAIN', dirname( __FILE__ ) . '/doMaintenance.php' );
define( 'DO_MAINTENANCE', RUN_MAINTENANCE_IF_MAIN ); // original name, harmless
return rtrim( $input );
}
+ /**
+ * @return bool
+ */
public function isQuiet() {
return $this->mQuiet;
}
}
if ( $channel === null ) {
$this->cleanupChanneled();
-
- $f = fopen( 'php://stdout', 'w' );
- fwrite( $f, $out );
- fclose( $f );
- }
- else {
+ if( php_sapi_name() == 'cli' ) {
+ fwrite( STDOUT, $out );
+ } else {
+ print( $out );
+ }
+ } else {
$out = preg_replace( '/\n\z/', '', $out );
$this->outputChanneled( $out, $channel );
}
if ( php_sapi_name() == 'cli' ) {
fwrite( STDERR, $err . "\n" );
} else {
- $f = fopen( 'php://stderr', 'w' );
- fwrite( $f, $err . "\n" );
- fclose( $f );
+ print $err;
}
$die = intval( $die );
if ( $die > 0 ) {
*/
public function cleanupChanneled() {
if ( !$this->atLineStart ) {
- $handle = fopen( 'php://stdout', 'w' );
- fwrite( $handle, "\n" );
- fclose( $handle );
+ if( php_sapi_name() == 'cli' ) {
+ fwrite( STDOUT, "\n" );
+ } else {
+ print "\n";
+ }
$this->atLineStart = true;
}
}
* same channel are concatenated, but any intervening messages in another
* channel start a new line.
* @param $msg String: the message without trailing newline
- * @param $channel Channel identifier or null for no
+ * @param $channel string Channel identifier or null for no
* channel. Channel comparison uses ===.
*/
public function outputChanneled( $msg, $channel = null ) {
return;
}
- $handle = fopen( 'php://stdout', 'w' );
+ $cli = php_sapi_name() == 'cli';
// End the current line if necessary
if ( !$this->atLineStart && $channel !== $this->lastChannel ) {
- fwrite( $handle, "\n" );
+ if( $cli ) {
+ fwrite( STDOUT, "\n" );
+ } else {
+ print "\n";
+ }
}
- fwrite( $handle, $msg );
+ if( $cli ) {
+ fwrite( STDOUT, $msg );
+ } else {
+ print $msg;
+ }
$this->atLineStart = false;
if ( $channel === null ) {
// For unchanneled messages, output trailing newline immediately
- fwrite( $handle, "\n" );
+ if( $cli ) {
+ fwrite( STDOUT, "\n" );
+ } else {
+ print "\n";
+ }
$this->atLineStart = true;
}
$this->lastChannel = $channel;
-
- // Cleanup handle
- fclose( $handle );
}
/**
}
}
+ /**
+ * @var $child Maintenance
+ */
$child = new $maintClass();
$child->loadParamsAndArgs( $this->mSelf, $this->mOptions, $this->mArgs );
if ( !is_null( $this->mDb ) ) {
public function purgeRedundantText( $delete = true ) {
# Data should come off the master, wrapped in a transaction
$dbw = $this->getDB( DB_MASTER );
- $dbw->begin();
+ $dbw->begin( __METHOD__ );
$tbl_arc = $dbw->tableName( 'archive' );
$tbl_rev = $dbw->tableName( 'revision' );
}
# Done
- $dbw->commit();
+ $dbw->commit( __METHOD__ );
}
/**
if ( !self::$mCoreScripts ) {
$paths = array(
dirname( __FILE__ ),
- dirname( __FILE__ ) . '/gearman',
dirname( __FILE__ ) . '/language',
dirname( __FILE__ ) . '/storage',
);
/**
* Lock the search index
- * @param &$db Database object
+ * @param &$db DatabaseBase object
*/
private function lockSearchindex( &$db ) {
$write = array( 'searchindex' );
/**
* Unlock the tables
- * @param &$db Database object
+ * @param &$db DatabaseBase object
*/
private function unlockSearchindex( &$db ) {
$db->unlockTables( __CLASS__ . '::' . __METHOD__ );
/**
* Unlock and lock again
* Since the lock is low-priority, queued reads will be able to complete
- * @param &$db Database object
+ * @param &$db DatabaseBase object
*/
private function relockSearchindex( &$db ) {
$this->unlockSearchindex( $db );
/**
* Update the searchindex table for a given pageid
- * @param $dbw Database: a database write handle
+ * @param $dbw DatabaseBase a database write handle
* @param $pageId Integer: the page ID to update.
* @return null|string
*/
}
}
+ /**
+ * Message to show that the update was done already and was just skipped
+ * @return String
+ */
+ protected function updateSkippedMessage() {
+ $key = $this->getUpdateKey();
+ return "Update '{$key}' already logged as completed.";
+ }
+
/**
* Message to show the the update log was unable to log the completion of this update
* @return String
* @return String
*/
abstract protected function getUpdateKey();
-
- /**
- * Message to show that the update was done already and was just skipped
- * @return String
- */
- abstract protected function updateSkippedMessage();
}