mergeMessageFileList.php: move code out of file scope.

Move code out of files scope, so mergeMessageFileList can be run from
run.php.

Change-Id: I349ef565a7c08f90a75b0fc6db49f030cb56f6cf
This commit is contained in:
daniel 2023-02-09 22:49:39 +01:00
parent 10b17b5132
commit 43f75a9cca

View file

@ -31,8 +31,6 @@ use MediaWiki\Settings\SettingsBuilder;
define( 'MW_NO_EXTENSION_MESSAGES', 1 );
require_once __DIR__ . '/Maintenance.php';
$maintClass = MergeMessageFileList::class;
$mmfl = false;
/**
* Maintenance script that merges $wgExtensionMessagesFiles from various
@ -51,16 +49,16 @@ class MergeMessageFileList extends Maintenance {
);
$this->addOption( 'extensions-dir', 'Path where extensions can be found.', false, true );
$this->addOption( 'output', 'Send output to this file (omit for stdout)', false, true );
$this->addDescription( 'Merge $wgExtensionMessagesFiles and $wgMessagesDirs from ' .
$this->addDescription( 'Merge $wgExtensionMessagesFiles and $wgMessageDirs from ' .
' various extensions to produce a single file listing all message files and dirs.'
);
}
public function execute() {
global $mmfl;
global $wgExtensionEntryPointListFiles;
$config = $this->getConfig();
$extensionEntryPointListFiles = $config->get( MainConfigNames::ExtensionEntryPointListFiles );
if ( !count( $wgExtensionEntryPointListFiles )
if ( !count( $extensionEntryPointListFiles )
&& !$this->hasOption( 'list-file' )
&& !$this->hasOption( 'extensions-dir' )
) {
@ -68,12 +66,12 @@ class MergeMessageFileList extends Maintenance {
"\$wgExtensionEntryPointListFiles is not set" );
}
$mmfl = [ 'setupFiles' => [] ];
$setupFiles = [];
# Add setup files contained in file passed to --list-file
if ( $this->hasOption( 'list-file' ) ) {
$extensionPaths = $this->readFile( $this->getOption( 'list-file' ) );
$mmfl['setupFiles'] = array_merge( $mmfl['setupFiles'], $extensionPaths );
$setupFiles = array_merge( $setupFiles, $extensionPaths );
}
# Now find out files in a directory
@ -95,7 +93,7 @@ class MergeMessageFileList extends Maintenance {
$found = false;
foreach ( $possibilities as $extfile ) {
if ( file_exists( $extfile ) ) {
$mmfl['setupFiles'][] = $extfile;
$setupFiles[] = $extfile;
$found = true;
break;
}
@ -110,17 +108,12 @@ class MergeMessageFileList extends Maintenance {
}
# Add setup files defined via configuration
foreach ( $wgExtensionEntryPointListFiles as $points ) {
foreach ( $extensionEntryPointListFiles as $points ) {
$extensionPaths = $this->readFile( $points );
$mmfl['setupFiles'] = array_merge( $mmfl['setupFiles'], $extensionPaths );
$setupFiles = array_merge( $setupFiles, $extensionPaths );
}
if ( $this->hasOption( 'output' ) ) {
$mmfl['output'] = $this->getOption( 'output' );
}
if ( $this->hasOption( 'quiet' ) ) {
$mmfl['quiet'] = true;
}
$this->generateMessageFileList( $setupFiles );
}
public function finalSetup( SettingsBuilder $settingsBuilder = null ) {
@ -145,7 +138,7 @@ class MergeMessageFileList extends Maintenance {
* @return array List of absolute extension paths
*/
private function readFile( $fileName ) {
global $IP;
$IP = MW_INSTALL_PATH;
$files = [];
$fileLines = file( $fileName );
@ -171,64 +164,77 @@ class MergeMessageFileList extends Maintenance {
return $files;
}
}
require_once RUN_MAINTENANCE_IF_MAIN;
private function generateMessageFileList( array $setupFiles ) {
$IP = MW_INSTALL_PATH;
$queue = [];
'@phan-var string[][] $mmfl';
foreach ( $mmfl['setupFiles'] as $fileName ) {
if ( strval( $fileName ) === '' ) {
continue;
}
if ( empty( $mmfl['quiet'] ) ) {
fwrite( STDERR, "Loading data from $fileName\n" );
}
// Using extension.json or skin.json
if ( str_ends_with( $fileName, '.json' ) ) {
$queue[$fileName] = 1;
} else {
require_once $fileName;
}
}
$outputFile = $this->getOption( 'output' );
$quiet = $this->hasOption( 'quiet' );
if ( $queue ) {
$registry = new ExtensionRegistry();
$data = $registry->readFromQueue( $queue );
foreach ( [ 'wgExtensionMessagesFiles', 'wgMessagesDirs' ] as $var ) {
if ( isset( $data['globals'][$var] ) ) {
$GLOBALS[$var] = array_merge( $data['globals'][$var], $GLOBALS[$var] );
$queue = [];
foreach ( $setupFiles as $fileName ) {
if ( strval( $fileName ) === '' ) {
continue;
}
if ( !$quiet ) {
fwrite( STDERR, "Loading data from $fileName\n" );
}
// Using extension.json or skin.json
if ( str_ends_with( $fileName, '.json' ) ) {
$queue[$fileName] = 1;
} else {
require_once $fileName;
}
}
$config = $this->getConfig();
$vars = [
'wgExtensionMessagesFiles' => $config->get( MainConfigNames::ExtensionMessagesFiles ),
'wgMessageDirs' => $config->get( MainConfigNames::MessagesDirs ),
];
if ( $queue ) {
$registry = new ExtensionRegistry();
$data = $registry->readFromQueue( $queue );
foreach ( [ 'wgExtensionMessagesFiles', 'wgMessageDirs' ] as $var ) {
if ( isset( $data['globals'][$var] ) ) {
$vars[$var] = array_merge( $data['globals'][$var], $vars[$var] );
}
}
}
if ( !$quiet ) {
fwrite( STDERR, "\n" );
}
$s =
"<?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( $vars['wgExtensionMessagesFiles'], true ) . ";\n\n" .
'$wgMessageDirs = ' . var_export( $vars['wgMessageDirs'], true ) . ";\n\n";
$dirs = [
$IP,
dirname( __DIR__ ),
realpath( $IP )
];
foreach ( $dirs as $dir ) {
$s = preg_replace( "/'" . preg_quote( $dir, '/' ) . "([^']*)'/", '"$IP\1"', $s );
}
if ( $outputFile !== null ) {
$res = file_put_contents( $outputFile, $s );
if ( $res === false ) {
fwrite( STDERR, "Failed to write to $outputFile\n" );
exit( 1 );
}
} else {
echo $s;
}
}
}
if ( empty( $mmfl['quiet'] ) ) {
fwrite( STDERR, "\n" );
}
$s =
"<?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 = [
$IP,
dirname( __DIR__ ),
realpath( $IP )
];
foreach ( $dirs as $dir ) {
$s = preg_replace( "/'" . preg_quote( $dir, '/' ) . "([^']*)'/", '"$IP\1"', $s );
}
if ( isset( $mmfl['output'] ) ) {
$outputFile = $mmfl['output'];
$res = file_put_contents( $outputFile, $s );
if ( $res === false ) {
fwrite( STDERR, "Failed to write to $outputFile\n" );
exit( 1 );
}
} else {
echo $s;
}
$maintClass = MergeMessageFileList::class;
require_once RUN_MAINTENANCE_IF_MAIN;