X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fregistration%2FExtensionRegistry.php;h=768b4883234db0dceac000772f1be79859523c6e;hb=5074ec954b4ce3890a27562163d3a7a7c7bc3495;hp=e3df499987552c764b670b961df2c4dbac981528;hpb=5a2e5db4fcbdd18128c62200ffabbeb652850203;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/registration/ExtensionRegistry.php b/includes/registration/ExtensionRegistry.php index e3df499987..768b488323 100644 --- a/includes/registration/ExtensionRegistry.php +++ b/includes/registration/ExtensionRegistry.php @@ -2,6 +2,8 @@ use Composer\Semver\Semver; use Wikimedia\ScopedCallback; +use MediaWiki\Shell\Shell; +use MediaWiki\ShellDisabledError; /** * ExtensionRegistry class @@ -84,6 +86,13 @@ class ExtensionRegistry { */ protected $testAttributes = []; + /** + * Whether to check dev-requires + * + * @var bool + */ + protected $checkDev = false; + /** * @var ExtensionRegistry */ @@ -101,6 +110,14 @@ class ExtensionRegistry { return self::$instance; } + /** + * @since 1.34 + * @param bool $check + */ + public function setCheckDevRequires( $check ) { + $this->checkDev = $check; + } + /** * @param string $path Absolute path to the JSON file */ @@ -144,7 +161,9 @@ class ExtensionRegistry { // A few more things to vary the cache on $versions = [ 'registration' => self::CACHE_VERSION, - 'mediawiki' => $wgVersion + 'mediawiki' => $wgVersion, + 'abilities' => $this->getAbilities(), + 'checkDev' => $this->checkDev, ]; // We use a try/catch because we don't want to fail here @@ -207,6 +226,38 @@ class ExtensionRegistry { $this->finished = true; } + /** + * Get the list of abilities and their values + * @return bool[] + */ + private function getAbilities() { + return [ + 'shell' => !Shell::isDisabled(), + ]; + } + + /** + * Queries information about the software environment and constructs an appropiate version checker + * + * @return VersionChecker + */ + private function buildVersionChecker() { + global $wgVersion; + // array to optionally specify more verbose error messages for + // missing abilities + $abilityErrors = [ + 'shell' => ( new ShellDisabledError() )->getMessage(), + ]; + + return new VersionChecker( + $wgVersion, + PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION, + get_loaded_extensions(), + $this->getAbilities(), + $abilityErrors + ); + } + /** * Process a queue of extensions and return their extracted data * @@ -216,16 +267,11 @@ class ExtensionRegistry { * @throws ExtensionDependencyError */ public function readFromQueue( array $queue ) { - global $wgVersion; $autoloadClasses = []; $autoloadNamespaces = []; $autoloaderPaths = []; $processor = new ExtensionProcessor(); - $versionChecker = new VersionChecker( - $wgVersion, - PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION, - get_loaded_extensions() - ); + $versionChecker = $this->buildVersionChecker(); $extDependencies = []; $incompatible = []; $warnings = false; @@ -265,7 +311,7 @@ class ExtensionRegistry { } // get all requirements/dependencies for this extension - $requires = $processor->getRequirements( $info ); + $requires = $processor->getRequirements( $info, $this->checkDev ); // validate the information needed and add the requirements if ( is_array( $requires ) && $requires && isset( $info['name'] ) ) { @@ -383,10 +429,12 @@ class ExtensionRegistry { * * If some extensions are already queued, this will load * those as well. - * + * TODO: Remove in MediaWiki 1.35 + * @deprecated since 1.34, use ExtensionRegistry->queue() instead * @param string $path Absolute path to the JSON file */ public function load( $path ) { + wfDeprecated( __METHOD__, '1.34' ); $this->loadFromQueue(); // First clear the queue $this->queue( $path ); $this->loadFromQueue();