DifferenceEngine: Autodetect if wikidiff2 is installed
If wikidiff2 is installed, use it for diffing without requiring $wgExternalDiffEngine to be set to 'wikidiff2'. Also add some extra sanity-checking by coercing all non-string values to false and make sure the custom diff executable passes `is_executable()`. Change-Id: I32b670ebf613be9f1c034d65d006829a215614da
This commit is contained in:
parent
dd5e19a37b
commit
037f056e0e
2 changed files with 17 additions and 13 deletions
|
|
@ -8059,10 +8059,9 @@ $wgUpdateRowsPerQuery = 100;
|
|||
|
||||
/**
|
||||
* Name of the external diff engine to use. Supported values:
|
||||
* * false: default PHP implementation
|
||||
* * 'wikidiff2': Wikimedia's fast difference engine implemented as a PHP/HHVM module
|
||||
* * 'wikidiff' and 'wikidiff3' are treated as false for backwards compatibility
|
||||
* * any other string is treated as a path to external diff executable
|
||||
* * string: path to an external diff executable
|
||||
* * false: wikidiff2 PHP/HHVM module if installed, otherwise the default PHP implementation
|
||||
* * 'wikidiff', 'wikidiff2', and 'wikidiff3' are treated as false for backwards compatibility
|
||||
*/
|
||||
$wgExternalDiffEngine = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -923,18 +923,23 @@ class DifferenceEngine extends ContextSource {
|
|||
if ( $wgExternalDiffEngine == 'wikidiff' || $wgExternalDiffEngine == 'wikidiff3' ) {
|
||||
wfDeprecated( "\$wgExternalDiffEngine = '{$wgExternalDiffEngine}'", '1.27' );
|
||||
$wgExternalDiffEngine = false;
|
||||
} elseif ( $wgExternalDiffEngine == 'wikidiff2' ) {
|
||||
// Same as above, but with no deprecation warnings
|
||||
$wgExternalDiffEngine = false;
|
||||
} elseif ( !is_string( $wgExternalDiffEngine ) ) {
|
||||
// And prevent people from shooting themselves in the foot...
|
||||
wfWarn( '$wgExternalDiffEngine is set to a non-string value, forcing it to false' );
|
||||
$wgExternalDiffEngine = false;
|
||||
}
|
||||
|
||||
if ( $wgExternalDiffEngine == 'wikidiff2' ) {
|
||||
if ( function_exists( 'wikidiff2_do_diff' ) ) {
|
||||
# Better external diff engine, the 2 may some day be dropped
|
||||
# This one does the escaping and segmenting itself
|
||||
$text = wikidiff2_do_diff( $otext, $ntext, 2 );
|
||||
$text .= $this->debug( 'wikidiff2' );
|
||||
if ( function_exists( 'wikidiff2_do_diff' ) && $wgExternalDiffEngine === false ) {
|
||||
# Better external diff engine, the 2 may some day be dropped
|
||||
# This one does the escaping and segmenting itself
|
||||
$text = wikidiff2_do_diff( $otext, $ntext, 2 );
|
||||
$text .= $this->debug( 'wikidiff2' );
|
||||
|
||||
return $text;
|
||||
}
|
||||
} elseif ( $wgExternalDiffEngine !== false ) {
|
||||
return $text;
|
||||
} elseif ( $wgExternalDiffEngine !== false && is_executable( $wgExternalDiffEngine ) ) {
|
||||
# Diff via the shell
|
||||
$tmpDir = wfTempDir();
|
||||
$tempName1 = tempnam( $tmpDir, 'diff_' );
|
||||
|
|
|
|||
Loading…
Reference in a new issue