MediaWiki  master
shell.php
Go to the documentation of this file.
1 <?php
40 
41 require_once __DIR__ . '/Maintenance.php';
42 
47 class MediaWikiShell extends Maintenance {
48 
49  public function __construct() {
50  parent::__construct();
51  $this->addOption( 'd',
52  'For back compatibility with eval.php. ' .
53  '1 send debug to stderr. ' .
54  'With 2 additionally initialize database with debugging ',
55  false, true
56  );
57  }
58 
59  public function execute() {
60  if ( !class_exists( \Psy\Shell::class ) ) {
61  $this->fatalError( 'PsySH not found. Please run composer with the --dev option.' );
62  }
63 
64  $traverser = new \PhpParser\NodeTraverser();
65  $codeCleaner = new \Psy\CodeCleaner( null, null, $traverser );
66 
67  // add this after initializing the code cleaner so all the default passes get added first
68  $traverser->addVisitor( new CodeCleanerGlobalsPass() );
69 
70  $config = new \Psy\Configuration();
71  $config->setCodeCleaner( $codeCleaner );
72  $config->setUpdateCheck( \Psy\VersionUpdater\Checker::NEVER );
73  // prevent https://github.com/bobthecow/psysh/issues/443 when using sudo -E
74  $config->setRuntimeDir( wfTempDir() );
75 
76  $shell = new \Psy\Shell( $config );
77  if ( $this->hasOption( 'd' ) ) {
78  $this->setupLegacy();
79  }
80 
81  $shell->run();
82  }
83 
87  protected function setupLegacy() {
88  $d = intval( $this->getOption( 'd' ) );
89  if ( $d > 0 ) {
90  LoggerFactory::registerProvider( new ConsoleSpi );
91  // Some services hold Logger instances in object properties
92  MediaWikiServices::resetGlobalInstance();
93  }
94  if ( $d > 1 ) {
95  # Set DBO_DEBUG (equivalent of $wgDebugDumpSql)
96  $this->getDB( DB_MASTER )->setFlag( DBO_DEBUG );
97  $this->getDB( DB_REPLICA )->setFlag( DBO_DEBUG );
98  }
99  }
100 
101 }
102 
103 $maintClass = MediaWikiShell::class;
104 require_once RUN_MAINTENANCE_IF_MAIN;
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:39
getOption( $name, $default=null)
Get an option, or return the default.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:86
hasOption( $name)
Checks to see if a particular option exists.
const DB_MASTER
Definition: defines.php:26
Prefix the real command with a bunch of &#39;global $VAR;&#39; commands, one for each global.
Interactive shell with completion and global scope.
Definition: shell.php:47
wfTempDir()
Tries to get the system directory for temporary files.
const DBO_DEBUG
Definition: defines.php:9
$maintClass
Definition: shell.php:103
addOption( $name, $description, $required=false, $withArg=false, $shortName=false, $multiOccurrence=false)
Add a parameter to the script.
const DB_REPLICA
Definition: defines.php:25
fatalError( $msg, $exitCode=1)
Output a message and terminate the current script.
setupLegacy()
For back compatibility with eval.php.
Definition: shell.php:87
Config $config
Accessible via getConfig()
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.