- if ( $externalDiffEngine ) {
- if ( is_string( $externalDiffEngine ) ) {
- if ( is_executable( $externalDiffEngine ) ) {
- return $externalDiffEngine;
- }
- wfDebug( 'ExternalDiffEngine config points to a non-executable, ignoring' );
- } else {
- wfWarn( 'ExternalDiffEngine config is set to a non-string value, ignoring' );
- }
- }
+ if ( $diffEngine === null ) {
+ $engines = [ 'external', 'wikidiff2', 'php' ];
+ } else {
+ $engines = [ $diffEngine ];
+ }
+
+ $failureReason = null;
+ foreach ( $engines as $engine ) {
+ switch ( $engine ) {
+ case 'external':
+ if ( is_string( $externalDiffEngine ) ) {
+ if ( is_executable( $externalDiffEngine ) ) {
+ return $externalDiffEngine;
+ }
+ $failureReason = 'ExternalDiffEngine config points to a non-executable';
+ if ( $diffEngine === null ) {
+ wfDebug( "$failureReason, ignoring" );
+ }
+ } else {
+ $failureReason = 'ExternalDiffEngine config is set to a non-string value';
+ if ( $diffEngine === null && $externalDiffEngine ) {
+ wfWarn( "$failureReason, ignoring" );
+ }
+ }
+ break;