summaryrefslogtreecommitdiff
path: root/maintenance/eval.php
diff options
context:
space:
mode:
Diffstat (limited to 'maintenance/eval.php')
-rw-r--r--maintenance/eval.php22
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";