/**
* Used by getDB() / setDB()
- * @var IDatabase
+ * @var Database
*/
private $mDb = null;
* Add the default parameters to the scripts
*/
protected function addDefaultParams() {
-
# Generic (non script dependant) options:
$this->addOption( 'help', 'Display this help message', false, false, 'h' );
. "for this script to run: $joined. Please enable them and then try again.";
$this->error( $msg, 1 );
}
-
}
/**
if ( is_array( $wgProfiler ) && isset( $wgProfiler['class'] ) ) {
$class = $wgProfiler['class'];
+ /** @var Profiler $profiler */
$profiler = new $class(
[ 'sampling' => 1, 'output' => [ $output ] ]
+ $wgProfiler
$this->beginTransaction( $dbw, __METHOD__ );
# Get "active" text records from the revisions table
+ $cur = [];
$this->output( 'Searching for active text records in revisions table...' );
$res = $dbw->select( 'revision', 'rev_text_id', [], __METHOD__, [ 'DISTINCT' ] );
foreach ( $res as $row ) {
/**
* Lock the search index
- * @param DatabaseBase &$db
+ * @param Database &$db
*/
private function lockSearchindex( $db ) {
$write = [ 'searchindex' ];
/**
* Unlock the tables
- * @param DatabaseBase &$db
+ * @param Database &$db
*/
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 DatabaseBase &$db
+ * @param Database &$db
*/
private function relockSearchindex( $db ) {
$this->unlockSearchindex( $db );
* Perform a search index update with locking
* @param int $maxLockTime The maximum time to keep the search index locked.
* @param string $callback The function that will update the function.
- * @param DatabaseBase $dbw
+ * @param Database $dbw
* @param array $results
*/
public function updateSearchIndex( $maxLockTime, $callback, $dbw, $results ) {
/**
* Update the searchindex table for a given pageid
- * @param DatabaseBase $dbw A database write handle
+ * @param Database $dbw A database write handle
* @param int $pageId The page ID to update.
* @return null|string
*/
return fgets( STDIN, 1024 );
}
+ /**
+ * Get the terminal size as a two-element array where the first element
+ * is the width (number of columns) and the second element is the height
+ * (number of rows).
+ *
+ * @return array
+ */
+ public static function getTermSize() {
+ $default = [ 80, 50 ];
+ if ( wfIsWindows() ) {
+ return $default;
+ }
+ // It's possible to get the screen size with VT-100 terminal escapes,
+ // but reading the responses is not possible without setting raw mode
+ // (unless you want to require the user to press enter), and that
+ // requires an ioctl(), which we can't do. So we have to shell out to
+ // something that can do the relevant syscalls. There are a few
+ // options. Linux and Mac OS X both have "stty size" which does the
+ // job directly.
+ $retval = false;
+ $size = wfShellExec( 'stty size', $retval );
+ if ( $retval !== 0 ) {
+ return $default;
+ }
+ if ( !preg_match( '/^(\d+) (\d+)$/', $size, $m ) ) {
+ return $default;
+ }
+ return [ intval( $m[2] ), intval( $m[1] ) ];
+ }
+
/**
* Call this to set up the autoloader to allow classes to be used from the
* tests directory.