X-Git-Url: http://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Finstaller%2FInstaller.php;h=f84b974071dc8b1fa452765409e8cfc64c89ff81;hp=6d1e211d6854e664c8dce20628bfd6416213b978;hb=326d52f9613c5227d75f97361be6ec6ef78b214e;hpb=50ea56e349d62c48c69c22bbdf91514c7a9e77e1 diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index 6d1e211d68..f84b974071 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -412,14 +412,17 @@ abstract class Installer { // This will be overridden in the web installer with the user-specified language RequestContext::getMain()->setLanguage( 'en' ); - // Disable the i18n cache - // TODO: manage LocalisationCache singleton in MediaWikiServices - Language::getLocalisationCache()->disableBackend(); - // Disable all global services, since we don't have any configuration yet! MediaWikiServices::disableStorageBackend(); $mwServices = MediaWikiServices::getInstance(); + + // Disable i18n cache + $mwServices->getLocalisationCache()->disableBackend(); + + // Clear language cache so the old i18n cache doesn't sneak back in + Language::clearCaches(); + // Disable object cache (otherwise CACHE_ANYTHING will try CACHE_DB and // SqlBagOStuff will then throw since we just disabled wfGetDB) $wgObjectCaches = $mwServices->getMainConfig()->get( 'ObjectCaches' ); @@ -1273,7 +1276,8 @@ abstract class Installer { * * @param string $directory Directory to search in, relative to $IP, must be either "extensions" * or "skins" - * @return array[][] [ $extName => [ 'screenshots' => [ '...' ] ] + * @return Status An object containing an error list. If there were no errors, an associative + * array of information about the extension can be found in $status->value. */ public function findExtensions( $directory = 'extensions' ) { switch ( $directory ) { @@ -1292,33 +1296,43 @@ abstract class Installer { * * @param string $type Either "extension" or "skin" * @param string $directory Directory to search in, relative to $IP - * @return array [ $extName => [ 'screenshots' => [ '...' ] ] + * @return Status An object containing an error list. If there were no errors, an associative + * array of information about the extension can be found in $status->value. */ protected function findExtensionsByType( $type = 'extension', $directory = 'extensions' ) { if ( $this->getVar( 'IP' ) === null ) { - return []; + return Status::newGood( [] ); } $extDir = $this->getVar( 'IP' ) . '/' . $directory; if ( !is_readable( $extDir ) || !is_dir( $extDir ) ) { - return []; + return Status::newGood( [] ); } $dh = opendir( $extDir ); $exts = []; + $status = new Status; while ( ( $file = readdir( $dh ) ) !== false ) { - if ( !is_dir( "$extDir/$file" ) ) { + // skip non-dirs and hidden directories + if ( !is_dir( "$extDir/$file" ) || $file[0] === '.' ) { continue; } - $status = $this->getExtensionInfo( $type, $directory, $file ); - if ( $status->isOK() ) { - $exts[$file] = $status->value; + $extStatus = $this->getExtensionInfo( $type, $directory, $file ); + if ( $extStatus->isOK() ) { + $exts[$file] = $extStatus->value; + } elseif ( $extStatus->hasMessage( 'config-extension-not-found' ) ) { + // (T225512) The directory is not actually an extension. Downgrade to warning. + $status->warning( 'config-extension-not-found', $file ); + } else { + $status->merge( $extStatus ); } } closedir( $dh ); uksort( $exts, 'strnatcasecmp' ); - return $exts; + $status->value = $exts; + + return $status; } /** @@ -1419,11 +1433,16 @@ abstract class Installer { } elseif ( $e->missingExtensions || $e->missingSkins ) { // There's an extension missing in the dependency tree, // so add those to the dependency list and try again - return $this->readExtension( + $status = $this->readExtension( $fullJsonFile, array_merge( $extDeps, $e->missingExtensions ), array_merge( $skinDeps, $e->missingSkins ) ); + if ( !$status->isOK() && !$status->hasMessage( 'config-extension-dependency' ) ) { + $status = Status::newFatal( 'config-extension-dependency', + basename( dirname( $fullJsonFile ) ), $status->getMessage() ); + } + return $status; } // Some other kind of dependency error? return Status::newFatal( 'config-extension-dependency', @@ -1804,6 +1823,10 @@ abstract class Installer { // Don't try to use any object cache for SessionManager either. $GLOBALS['wgSessionCacheType'] = CACHE_NONE; + + // Set a dummy $wgServer to bypass the check in Setup.php, the + // web installer will automatically detect it and not use this value. + $GLOBALS['wgServer'] = 'https://🌻.invalid'; } /**