diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:12:12 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:12:12 -0400 |
commit | c9aa36da061816dee256a979c2ff8d2ee41824d9 (patch) | |
tree | 29f7002b80ee984b488bd047dbbd80b36bf892e9 /maintenance/eval.php | |
parent | b4274e0e33eafb5e9ead9d949ebf031a9fb8363b (diff) | |
parent | d1ba966140d7a60cd5ae4e8667ceb27c1a138592 (diff) |
Merge branch 'archwiki'
# Conflicts:
# skins/ArchLinux.php
# skins/ArchLinux/archlogo.gif
Diffstat (limited to 'maintenance/eval.php')
-rw-r--r-- | maintenance/eval.php | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/maintenance/eval.php b/maintenance/eval.php index abedc61a..51f2cace 100644 --- a/maintenance/eval.php +++ b/maintenance/eval.php @@ -1,6 +1,5 @@ <?php /** - * PHP lacks an interactive mode, but this can be very helpful when debugging. * This script lets a command-line user start up the wiki engine and then poke * about by issuing PHP commands directly. * @@ -56,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'] ) ? @@ -64,13 +63,28 @@ 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 . ";" ); - if ( wfIsHipHop() || is_null( $val ) ) { + 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 ) ) { echo "$val\n"; |