Merge "Document that services don't normally vary by global state"
[lhc/web/wiklou.git] / maintenance / mergeMessageFileList.php
index 20b333e..d78c5a0 100644 (file)
@@ -26,7 +26,7 @@
 define( 'MW_NO_EXTENSION_MESSAGES', 1 );
 
 require_once __DIR__ . '/Maintenance.php';
-$maintClass = 'MergeMessageFileList';
+$maintClass = MergeMessageFileList::class;
 $mmfl = false;
 
 /**
@@ -36,11 +36,6 @@ $mmfl = false;
  * @ingroup Maintenance
  */
 class MergeMessageFileList extends Maintenance {
-       /**
-        * @var bool
-        */
-       protected $hasError;
-
        function __construct() {
                parent::__construct();
                $this->addOption(
@@ -57,20 +52,19 @@ class MergeMessageFileList extends Maintenance {
        }
 
        public function execute() {
-               // @codingStandardsIgnoreStart Ignore error: Global variable "$mmfl" is lacking 'wg' prefix
+               // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
                global $mmfl;
-               // @codingStandardsIgnoreEnd
                global $wgExtensionEntryPointListFiles;
 
                if ( !count( $wgExtensionEntryPointListFiles )
                        && !$this->hasOption( 'list-file' )
                        && !$this->hasOption( 'extensions-dir' )
                ) {
-                       $this->error( "Either --list-file or --extensions-dir must be provided if " .
-                               "\$wgExtensionEntryPointListFiles is not set", 1 );
+                       $this->fatalError( "Either --list-file or --extensions-dir must be provided if " .
+                               "\$wgExtensionEntryPointListFiles is not set" );
                }
 
-               $mmfl = array( 'setupFiles' => array() );
+               $mmfl = [ 'setupFiles' => [] ];
 
                # Add setup files contained in file passed to --list-file
                if ( $this->hasOption( 'list-file' ) ) {
@@ -81,29 +75,32 @@ class MergeMessageFileList extends Maintenance {
                # Now find out files in a directory
                if ( $this->hasOption( 'extensions-dir' ) ) {
                        $extdir = $this->getOption( 'extensions-dir' );
-                       $entries = scandir( $extdir );
-                       foreach ( $entries as $extname ) {
-                               if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
-                                       continue;
-                               }
-                               $possibilities = array(
-                                       "$extdir/$extname/extension.json",
-                                       "$extdir/$extname/skin.json",
-                                       "$extdir/$extname/$extname.php"
-                               );
-                               $found = false;
-                               foreach ( $possibilities as $extfile ) {
-                                       if ( file_exists( $extfile ) ) {
-                                               $mmfl['setupFiles'][] = $extfile;
-                                               $found = true;
-                                               break;
+                       # Allow multiple directories to be passed with ":" as delimiter
+                       $extdirs = explode( ':', $extdir );
+                       foreach ( $extdirs as $extdir ) {
+                               $entries = scandir( $extdir );
+                               foreach ( $entries as $extname ) {
+                                       if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
+                                               continue;
+                                       }
+                                       $possibilities = [
+                                               "$extdir/$extname/extension.json",
+                                               "$extdir/$extname/skin.json",
+                                               "$extdir/$extname/$extname.php"
+                                       ];
+                                       $found = false;
+                                       foreach ( $possibilities as $extfile ) {
+                                               if ( file_exists( $extfile ) ) {
+                                                       $mmfl['setupFiles'][] = $extfile;
+                                                       $found = true;
+                                                       break;
+                                               }
                                        }
-                               }
 
-                               if ( !$found ) {
-                                       $this->hasError = true;
-                                       $this->error( "Extension {$extname} in {$extdir} lacks expected entry point: " .
-                                               "extension.json, skin.json, or {$extname}.php." );
+                                       if ( !$found ) {
+                                               $this->error( "Extension {$extname} in {$extdir} lacks expected entry point: " .
+                                                       "extension.json, skin.json, or {$extname}.php." );
+                                       }
                                }
                        }
                }
@@ -114,10 +111,6 @@ class MergeMessageFileList extends Maintenance {
                        $mmfl['setupFiles'] = array_merge( $mmfl['setupFiles'], $extensionPaths );
                }
 
-               if ( $this->hasError ) {
-                       $this->error( "Some files are missing (see above). Giving up.", 1 );
-               }
-
                if ( $this->hasOption( 'output' ) ) {
                        $mmfl['output'] = $this->getOption( 'output' );
                }
@@ -133,10 +126,9 @@ class MergeMessageFileList extends Maintenance {
        private function readFile( $fileName ) {
                global $IP;
 
-               $files = array();
+               $files = [];
                $fileLines = file( $fileName );
                if ( $fileLines === false ) {
-                       $this->hasError = true;
                        $this->error( "Unable to open list file $fileName." );
 
                        return $files;
@@ -151,7 +143,6 @@ class MergeMessageFileList extends Maintenance {
                                if ( file_exists( $extension ) ) {
                                        $files[] = $extension;
                                } else {
-                                       $this->hasError = true;
                                        $this->error( "Extension {$extension} doesn't exist" );
                                }
                        }
@@ -163,7 +154,8 @@ class MergeMessageFileList extends Maintenance {
 
 require_once RUN_MAINTENANCE_IF_MAIN;
 
-$queue = array();
+$queue = [];
+'@phan-var string[][] $mmfl';
 foreach ( $mmfl['setupFiles'] as $fileName ) {
        if ( strval( $fileName ) === '' ) {
                continue;
@@ -182,7 +174,7 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
 if ( $queue ) {
        $registry = new ExtensionRegistry();
        $data = $registry->readFromQueue( $queue );
-       foreach ( array( 'wgExtensionMessagesFiles', 'wgMessagesDirs' ) as $var ) {
+       foreach ( [ 'wgExtensionMessagesFiles', 'wgMessagesDirs' ] as $var ) {
                if ( isset( $data['globals'][$var] ) ) {
                        $GLOBALS[$var] = array_merge( $data['globals'][$var], $GLOBALS[$var] );
                }
@@ -191,17 +183,17 @@ if ( $queue ) {
 
 fwrite( STDERR, "\n" );
 $s =
-       "<" . "?php\n" .
+       "<?php\n" .
        "## This file is generated by mergeMessageFileList.php. Do not edit it directly.\n\n" .
        "if ( defined( 'MW_NO_EXTENSION_MESSAGES' ) ) return;\n\n" .
        '$wgExtensionMessagesFiles = ' . var_export( $wgExtensionMessagesFiles, true ) . ";\n\n" .
        '$wgMessagesDirs = ' . var_export( $wgMessagesDirs, true ) . ";\n\n";
 
-$dirs = array(
+$dirs = [
        $IP,
        dirname( __DIR__ ),
        realpath( $IP )
-);
+];
 
 foreach ( $dirs as $dir ) {
        $s = preg_replace( "/'" . preg_quote( $dir, '/' ) . "([^']*)'/", '"$IP\1"', $s );