From b510edbda103b98bb08f8293bd460c0839880f3f Mon Sep 17 00:00:00 2001 From: Matthew Flaschen Date: Wed, 3 May 2017 20:04:29 -0400 Subject: [PATCH] Revert "Convert mwdoc-filter.php to Maintenance", rm wfShellWikiCmd Revert a58948d64 and instead remove wfShellWikiCmd and escape shell arguments directly. This should be fine since mwdoc-filter.php does not depend on per-wiki state. Change-Id: Id9c6ca84bab827675b71ca16bf688fd3f5c993a1 --- autoload.php | 1 - maintenance/mwdoc-filter.php | 122 +++++++++++++++-------------------- maintenance/mwdocgen.php | 10 ++- 3 files changed, 61 insertions(+), 72 deletions(-) diff --git a/autoload.php b/autoload.php index 06e863fbb8..1141c391fb 100644 --- a/autoload.php +++ b/autoload.php @@ -786,7 +786,6 @@ $wgAutoloadLocalClasses = [ 'MWCryptRand' => __DIR__ . '/includes/utils/MWCryptRand.php', 'MWDebug' => __DIR__ . '/includes/debug/MWDebug.php', 'MWDocGen' => __DIR__ . '/maintenance/mwdocgen.php', - 'MWDocGenFilter' => __DIR__ . '/maintenance/mwdoc-filter.php', 'MWException' => __DIR__ . '/includes/exception/MWException.php', 'MWExceptionHandler' => __DIR__ . '/includes/exception/MWExceptionHandler.php', 'MWExceptionRenderer' => __DIR__ . '/includes/exception/MWExceptionRenderer.php', diff --git a/maintenance/mwdoc-filter.php b/maintenance/mwdoc-filter.php index 46c5a00c3e..feaad12a60 100644 --- a/maintenance/mwdoc-filter.php +++ b/maintenance/mwdoc-filter.php @@ -38,80 +38,64 @@ * DEALINGS IN THE SOFTWARE. */ -require_once __DIR__ . '/Maintenance.php'; - -/** - * Maintenance script that builds doxygen documentation. - * @ingroup Maintenance - */ -class MWDocGenFilter extends Maintenance { - public function __construct() { - parent::__construct(); - $this->addDescription( 'Doxygen filter to fix member variable types in documentation. ' - . 'Used by mwdocgen.php' - ); - $this->addArg( 'filename', 'PHP file to filter', true ); - } +// Warning: Converting this to a Maintenance script may reduce performance. +if ( PHP_SAPI != 'cli' ) { + die( "This filter can only be run from the command line.\n" ); +} - public function execute() { - $source = file_get_contents( $this->getArg( 0 ) ); - $tokens = token_get_all( $source ); +$source = file_get_contents( $argv[1] ); +$tokens = token_get_all( $source ); - $buffer = $bufferType = null; - foreach ( $tokens as $token ) { - if ( is_string( $token ) ) { - if ( $buffer !== null && $token === ';' ) { - // If we still have a buffer and the statement has ended, - // flush it and move on. - echo $buffer; - $buffer = $bufferType = null; - } - echo $token; - continue; +$buffer = $bufferType = null; +foreach ( $tokens as $token ) { + if ( is_string( $token ) ) { + if ( $buffer !== null && $token === ';' ) { + // If we still have a buffer and the statement has ended, + // flush it and move on. + echo $buffer; + $buffer = $bufferType = null; + } + echo $token; + continue; + } + list( $id, $content ) = $token; + switch ( $id ) { + case T_DOC_COMMENT: + // Escape slashes so that references to namespaces are not + // wrongly interpreted as a Doxygen "\command". + $content = addcslashes( $content, '\\' ); + // Look for instances of "@var Type" not followed by $name. + if ( preg_match( '#@var\s+([^\s]+)\s+([^\$]+)#s', $content ) ) { + $buffer = preg_replace_callback( + // Strip the "@var Type" part and remember the type + '#(@var\s+)([^\s]+)#s', + function ( $matches ) use ( &$bufferType ) { + $bufferType = $matches[2]; + return ''; + }, + $content + ); + } else { + echo $content; } - list( $id, $content ) = $token; - switch ( $id ) { - case T_DOC_COMMENT: - // Escape slashes so that references to namespaces are not - // wrongly interpreted as a Doxygen "\command". - $content = addcslashes( $content, '\\' ); - // Look for instances of "@var Type" not followed by $name. - if ( preg_match( '#@var\s+([^\s]+)\s+([^\$]+)#s', $content ) ) { - $buffer = preg_replace_callback( - // Strip the "@var Type" part and remember the type - '#(@var\s+)([^\s]+)#s', - function ( $matches ) use ( &$bufferType ) { - $bufferType = $matches[2]; - return ''; - }, - $content - ); - } else { - echo $content; - } - break; + break; - case T_VARIABLE: - if ( $buffer !== null ) { - echo $buffer; - echo "$bufferType $content"; - $buffer = $bufferType = null; - } else { - echo $content; - } - break; + case T_VARIABLE: + if ( $buffer !== null ) { + echo $buffer; + echo "$bufferType $content"; + $buffer = $bufferType = null; + } else { + echo $content; + } + break; - default: - if ( $buffer !== null ) { - $buffer .= $content; - } else { - echo $content; - } - break; + default: + if ( $buffer !== null ) { + $buffer .= $content; + } else { + echo $content; } - } + break; } } - -$maintClass = 'MWDocGenFilter'; -require_once RUN_MAINTENANCE_IF_MAIN; diff --git a/maintenance/mwdocgen.php b/maintenance/mwdocgen.php index dc2eccd080..d0056299b2 100644 --- a/maintenance/mwdocgen.php +++ b/maintenance/mwdocgen.php @@ -72,7 +72,7 @@ class MWDocGen extends Maintenance { } protected function init() { - global $IP; + global $wgPhpCli, $IP; $this->doxygen = $this->getOption( 'doxygen', 'doxygen' ); $this->mwVersion = $this->getOption( 'version', 'master' ); @@ -86,7 +86,13 @@ class MWDocGen extends Maintenance { $this->output = $this->getOption( 'output', "$IP/docs" ); - $this->inputFilter = wfShellWikiCmd( $IP . '/maintenance/mwdoc-filter.php' ); + // Do not use wfShellWikiCmd, because mwdoc-filter.php is not + // a Maintenance script. + $this->inputFilter = wfEscapeShellArg( [ + $wgPhpCli, + $IP . '/maintenance/mwdoc-filter.php' + ] ); + $this->template = $IP . '/maintenance/Doxyfile'; $this->excludes = [ 'vendor', -- 2.20.1