X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2Feval.php;h=51f2cace834f1e54e1cfc817e21e84e91d23a74d;hb=2700298740509a3f98a9e2cd81cfbce4f67ed114;hp=f56e91f42f63594f35f2b0325105d90ad6f7b18c;hpb=0fba444861f80e0dcc4a85f306b4df0436c19d3d;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/eval.php b/maintenance/eval.php index f56e91f42f..51f2cace83 100644 --- a/maintenance/eval.php +++ b/maintenance/eval.php @@ -55,7 +55,7 @@ if ( isset( $options['d'] ) ) { } $useReadline = function_exists( 'readline_add_history' ) - && Maintenance::posix_isatty( 0 /*STDIN*/ ); + && Maintenance::posix_isatty( 0 /*STDIN*/ ); if ( $useReadline ) { $historyFile = isset( $_ENV['HOME'] ) ? @@ -63,12 +63,27 @@ if ( $useReadline ) { readline_read_history( $historyFile ); } +$e = null; // PHP exception while ( ( $line = Maintenance::readconsole() ) !== false ) { + if ( $e && !preg_match( '/^(exit|die);?$/', $line ) ) { + // Internal state may be corrupted or fatals may occur later due + // to some object not being set. Don't drop out of eval in case + // lines were being pasted in (which would then get dumped to the shell). + // Instead, just absorb the remaning commands. Let "exit" through per DWIM. + echo "Exception was thrown before; please restart eval.php\n"; + continue; + } if ( $useReadline ) { readline_add_history( $line ); readline_write_history( $historyFile ); } - $val = eval( $line . ";" ); + try { + $val = eval( $line . ";" ); + } catch ( Exception $e ) { + echo "Caught exception " . get_class( $e ) . + ": {$e->getMessage()}\n" . $e->getTraceAsString() . "\n"; + continue; + } if ( wfIsHHVM() || is_null( $val ) ) { echo "\n"; } elseif ( is_string( $val ) || is_numeric( $val ) ) {