Merge "selenium: Use async-await for wdio-mediawiki/Api internals"
[lhc/web/wiklou.git] / maintenance / shell.php
index 47ef804..f5ebc02 100644 (file)
  * @author GergÅ‘ Tisza <tgr.huwiki@gmail.com>
  */
 
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\Logger\ConsoleSpi;
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -46,15 +50,15 @@ class MediaWikiShell extends Maintenance {
                parent::__construct();
                $this->addOption( 'd',
                        'For back compatibility with eval.php. ' .
-                       '0 send debug to stdout. ' .
-                       'With 1 additionally initialize database with debugging ',
+                       '1 send debug to stderr. ' .
+                       'With 2 additionally initialize database with debugging ',
                        false, true
                );
        }
 
        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();
@@ -63,8 +67,12 @@ class MediaWikiShell extends Maintenance {
                // add this after initializing the code cleaner so all the default passes get added first
                $traverser->addVisitor( new CodeCleanerGlobalsPass() );
 
-               $config = new \Psy\Configuration( [ 'codeCleaner' => $codeCleaner ] );
+               $config = new \Psy\Configuration();
+               $config->setCodeCleaner( $codeCleaner );
                $config->setUpdateCheck( \Psy\VersionUpdater\Checker::NEVER );
+               // prevent https://github.com/bobthecow/psysh/issues/443 when using sudo -E
+               $config->setRuntimeDir( wfTempDir() );
+
                $shell = new \Psy\Shell( $config );
                if ( $this->hasOption( 'd' ) ) {
                        $this->setupLegacy();
@@ -77,26 +85,20 @@ class MediaWikiShell extends Maintenance {
         * For back compatibility with eval.php
         */
        protected function setupLegacy() {
-               global $wgDebugLogFile;
-
                $d = intval( $this->getOption( 'd' ) );
                if ( $d > 0 ) {
-                       $wgDebugLogFile = 'php://stdout';
+                       LoggerFactory::registerProvider( new ConsoleSpi );
+                       // Some services hold Logger instances in object properties
+                       MediaWikiServices::resetGlobalInstance();
                }
                if ( $d > 1 ) {
                        # Set DBO_DEBUG (equivalent of $wgDebugDumpSql)
-                       # XXX copy pasted from eval.php :(
-                       $lb = wfGetLB();
-                       $serverCount = $lb->getServerCount();
-                       for ( $i = 0; $i < $serverCount; $i++ ) {
-                               $server = $lb->getServerInfo( $i );
-                               $server['flags'] |= DBO_DEBUG;
-                               $lb->setServerInfo( $i, $server );
-                       }
+                       $this->getDB( DB_MASTER )->setFlag( DBO_DEBUG );
+                       $this->getDB( DB_REPLICA )->setFlag( DBO_DEBUG );
                }
        }
 
 }
 
-$maintClass = 'MediaWikiShell';
+$maintClass = MediaWikiShell::class;
 require_once RUN_MAINTENANCE_IF_MAIN;