Merge "Switch DifferenceEngine to the new shell framework"
[lhc/web/wiklou.git] / includes / diff / DifferenceEngine.php
index 7f9af60..899054d 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup DifferenceEngine
  */
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
 
 /** @deprecated use class constant instead */
 define( 'MW_DIFF_VERSION', '1.11a' );
@@ -181,7 +182,11 @@ class DifferenceEngine extends ContextSource {
        public function deletedLink( $id ) {
                if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
                        $dbr = wfGetDB( DB_REPLICA );
-                       $row = $dbr->selectRow( 'archive', '*',
+                       $row = $dbr->selectRow( 'archive',
+                               array_merge(
+                                       Revision::selectArchiveFields(),
+                                       [ 'ar_namespace', 'ar_title' ]
+                               ),
                                [ 'ar_rev_id' => $id ],
                                __METHOD__ );
                        if ( $row ) {
@@ -918,7 +923,7 @@ class DifferenceEngine extends ContextSource {
                        $wikidiff2Version = phpversion( 'wikidiff2' );
                        if (
                                $wikidiff2Version !== false &&
-                               version_compare( $wikidiff2Version, '0.3.0', '>=' )
+                               version_compare( $wikidiff2Version, '0.3', '>=' )
                        ) {
                                $text = wikidiff2_do_diff(
                                        $otext,
@@ -962,8 +967,16 @@ class DifferenceEngine extends ContextSource {
                        fwrite( $tempFile2, $ntext );
                        fclose( $tempFile1 );
                        fclose( $tempFile2 );
-                       $cmd = wfEscapeShellArg( $wgExternalDiffEngine, $tempName1, $tempName2 );
-                       $difftext = wfShellExec( $cmd );
+                       $cmd = [ $wgExternalDiffEngine, $tempName1, $tempName2 ];
+                       $result = Shell::command( $cmd )
+                               ->execute();
+                       $exitCode = $result->getExitCode();
+                       if ( $exitCode !== 0 ) {
+                               throw new Exception( "External diff command returned code {$exitCode}. Stderr: "
+                                       . wfEscapeWikiText( $result->getStderr() )
+                               );
+                       }
+                       $difftext = $result->getStdout();
                        $difftext .= $this->debug( "external $wgExternalDiffEngine" );
                        unlink( $tempName1 );
                        unlink( $tempName2 );