X-Git-Url: https://git.cyclocoop.org/admin/?a=blobdiff_plain;f=includes%2Fdiff%2FDifferenceEngine.php;h=8985d511e0ff883fe2c120305790c2cddd638a9d;hb=9097fb54c534175c0bda30ed2d607c981fa64be6;hp=1508cf1e83d8374d06e95a691e61c46869d22783;hpb=47b93ded1388ce5712d0a816db4ddd3466609bcd;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index 1508cf1e83..8985d511e0 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -474,7 +474,7 @@ class DifferenceEngine extends ContextSource { if ( !$linkInfo ) { $this->mMarkPatrolledLink = ''; } else { - $this->mMarkPatrolledLink = ' [' . Linker::linkKnown( + $this->mMarkPatrolledLink = ' [' . Linker::linkKnown( $this->mNewPage, $this->msg( 'markaspatrolleddiff' )->escaped(), [], @@ -842,19 +842,36 @@ class DifferenceEngine extends ContextSource { * @return bool|string */ public function generateTextDiffBody( $otext, $ntext ) { - $time = microtime( true ); + $diff = function() use ( $otext, $ntext ) { + $time = microtime( true ); - $result = $this->textDiff( $otext, $ntext ); + $result = $this->textDiff( $otext, $ntext ); - $time = intval( ( microtime( true ) - $time ) * 1000 ); - $this->getStats()->timing( 'diff_time', $time ); - // Log requests slower than 99th percentile - if ( $time > 100 && $this->mOldPage && $this->mNewPage ) { - wfDebugLog( 'diff', - "$time ms diff: {$this->mOldid} -> {$this->mNewid} {$this->mNewPage}" ); + $time = intval( ( microtime( true ) - $time ) * 1000 ); + $this->getStats()->timing( 'diff_time', $time ); + // Log requests slower than 99th percentile + if ( $time > 100 && $this->mOldPage && $this->mNewPage ) { + wfDebugLog( 'diff', + "$time ms diff: {$this->mOldid} -> {$this->mNewid} {$this->mNewPage}" ); + } + + return $result; + }; + + $error = function( $status ) { + throw new FatalError( $status->getWikiText() ); + }; + + // Use PoolCounter if the diff looks like it can be expensive + if ( strlen( $otext ) + strlen( $ntext ) > 20000 ) { + $work = new PoolCounterWorkViaCallback( 'diff', + md5( $otext ) . md5( $ntext ), + [ 'doWork' => $diff, 'error' => $error ] + ); + return $work->execute(); } - return $result; + return $diff(); } /** @@ -870,8 +887,8 @@ class DifferenceEngine extends ContextSource { $otext = str_replace( "\r\n", "\n", $otext ); $ntext = str_replace( "\r\n", "\n", $ntext ); - if ( $wgExternalDiffEngine == 'wikidiff' ) { - wfDeprecated( 'wikidiff support', '1.27' ); + if ( $wgExternalDiffEngine == 'wikidiff' || $wgExternalDiffEngine == 'wikidiff3' ) { + wfDeprecated( "\$wgExternalDiffEngine = '{$wgExternalDiffEngine}'", '1.27' ); $wgExternalDiffEngine = false; } @@ -884,7 +901,7 @@ class DifferenceEngine extends ContextSource { return $text; } - } elseif ( $wgExternalDiffEngine != 'wikidiff3' && $wgExternalDiffEngine !== false ) { + } elseif ( $wgExternalDiffEngine !== false ) { # Diff via the shell $tmpDir = wfTempDir(); $tempName1 = tempnam( $tmpDir, 'diff_' );