summaryrefslogtreecommitdiff
path: root/maintenance/mergeMessageFileList.php
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2013-12-08 09:55:49 +0100
committerPierre Schmitz <pierre@archlinux.de>2013-12-08 09:55:49 +0100
commit4ac9fa081a7c045f6a9f1cfc529d82423f485b2e (patch)
treeaf68743f2f4a47d13f2b0eb05f5c4aaf86d8ea37 /maintenance/mergeMessageFileList.php
parentaf4da56f1ad4d3ef7b06557bae365da2ea27a897 (diff)
Update to MediaWiki 1.22.0
Diffstat (limited to 'maintenance/mergeMessageFileList.php')
-rw-r--r--maintenance/mergeMessageFileList.php86
1 files changed, 68 insertions, 18 deletions
diff --git a/maintenance/mergeMessageFileList.php b/maintenance/mergeMessageFileList.php
index 62596b20..e9183377 100644
--- a/maintenance/mergeMessageFileList.php
+++ b/maintenance/mergeMessageFileList.php
@@ -25,7 +25,7 @@
# Start from scratch
define( 'MW_NO_EXTENSION_MESSAGES', 1 );
-require_once( __DIR__ . '/Maintenance.php' );
+require_once __DIR__ . '/Maintenance.php';
$maintClass = 'MergeMessageFileList';
$mmfl = false;
@@ -36,10 +36,14 @@ $mmfl = false;
* @ingroup Maintenance
*/
class MergeMessageFileList extends Maintenance {
+ /**
+ * @var bool
+ */
+ protected $hasError;
function __construct() {
parent::__construct();
- $this->addOption( 'list-file', 'A file containing a list of extension setup files, one per line.', true, true );
+ $this->addOption( 'list-file', 'A file containing a list of extension setup files, one per line.', false, true );
$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->mDescription = 'Merge $wgExtensionMessagesFiles from various extensions to produce a ' .
@@ -47,21 +51,29 @@ class MergeMessageFileList extends Maintenance {
}
public function execute() {
- global $mmfl;
+ global $mmfl, $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 );
+ }
+
+ $mmfl = array( 'setupFiles' => array() );
# Add setup files contained in file passed to --list-file
- $lines = file( $this->getOption( 'list-file' ) );
- if ( $lines === false ) {
- $this->error( 'Unable to open list file.' );
+ if ( $this->hasOption( 'list-file' ) ) {
+ $extensionPaths = $this->readFile( $this->getOption( 'list-file' ) );
+ $mmfl['setupFiles'] = array_merge( $mmfl['setupFiles'], $extensionPaths );
}
- $mmfl = array( 'setupFiles' => array_map( 'trim', $lines ) );
# Now find out files in a directory
- $hasError = false;
if ( $this->hasOption( 'extensions-dir' ) ) {
$extdir = $this->getOption( 'extensions-dir' );
$entries = scandir( $extdir );
- foreach( $entries as $extname ) {
+ foreach ( $entries as $extname ) {
if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
continue;
}
@@ -69,13 +81,19 @@ class MergeMessageFileList extends Maintenance {
if ( file_exists( $extfile ) ) {
$mmfl['setupFiles'][] = $extfile;
} else {
- $hasError = true;
+ $this->hasError = true;
$this->error( "Extension {$extname} in {$extdir} lacks expected {$extname}.php" );
}
}
}
- if ( $hasError ) {
+ # Add setup files defined via configuration
+ foreach ( $wgExtensionEntryPointListFiles as $points ) {
+ $extensionPaths = $this->readFile( $points );
+ $mmfl['setupFiles'] = array_merge( $mmfl['setupFiles'], $extensionPaths );
+ }
+
+ if ( $this->hasError ) {
$this->error( "Some files are missing (see above). Giving up.", 1 );
}
@@ -86,19 +104,54 @@ class MergeMessageFileList extends Maintenance {
$mmfl['quiet'] = true;
}
}
+
+ /**
+ * @param string $fileName
+ * @return array List of absolute extension paths
+ */
+ private function readFile( $fileName ) {
+ global $IP;
+
+ $files = array();
+ $fileLines = file( $fileName );
+ if ( $fileLines === false ) {
+ $this->hasError = true;
+ $this->error( "Unable to open list file $fileName." );
+ return $files;
+ }
+ # Strip comments, discard empty lines, and trim leading and trailing
+ # whitespace. Comments start with '#' and extend to the end of the line.
+ foreach ( $fileLines as $extension ) {
+ $extension = trim( preg_replace( '/#.*/', '', $extension ) );
+ if ( $extension !== '' ) {
+ # Paths may use the string $IP to be substituted by the actual value
+ $extension = str_replace( '$IP', $IP, $extension );
+ if ( file_exists( $extension ) ) {
+ $files[] = $extension;
+ } else {
+ $this->hasError = true;
+ $this->error( "Extension {$extension} doesn't exist" );
+ }
+ }
+ }
+ return $files;
+ }
}
-require_once( RUN_MAINTENANCE_IF_MAIN );
+require_once RUN_MAINTENANCE_IF_MAIN;
foreach ( $mmfl['setupFiles'] as $fileName ) {
if ( strval( $fileName ) === '' ) {
continue;
}
- $fileName = str_replace( '$IP', $IP, $fileName );
if ( empty( $mmfl['quiet'] ) ) {
fwrite( STDERR, "Loading data from $fileName\n" );
}
- include_once( $fileName );
+ // Include the extension to update $wgExtensionMessagesFiles
+ if ( !( include_once( $fileName ) ) ) {
+ fwrite( STDERR, "Unable to read $fileName\n" );
+ exit( 1 );
+ }
}
fwrite( STDERR, "\n" );
$s =
@@ -114,10 +167,7 @@ $dirs = array(
);
foreach ( $dirs as $dir ) {
- $s = preg_replace(
- "/'" . preg_quote( $dir, '/' ) . "([^']*)'/",
- '"$IP\1"',
- $s );
+ $s = preg_replace( "/'" . preg_quote( $dir, '/' ) . "([^']*)'/", '"$IP\1"', $s );
}
if ( isset( $mmfl['output'] ) ) {