Make it possible for extensions to specify which version of MediaWiki
authorjeroendedauw <jeroendedauw@gmail.com>
Fri, 20 Dec 2013 22:34:49 +0000 (23:34 +0100)
committerJeroen De Dauw <jeroendedauw@gmail.com>
Mon, 3 Mar 2014 08:45:20 +0000 (08:45 +0000)
commit3307d4957925df319df2b84cfc3e6f1680d0632a
tree4e33e5fa151fed2f2fc05a0ce6b2d1710c5cd534
parent5a44ef0bca7c0b9618fff5d59e45f6484d0d02aa
Make it possible for extensions to specify which version of MediaWiki
they support via Composer.

This change allows extensions to specify they depend on a specific
version or version range of MediaWiki. This is done by adding the
package mediawiki/mediawiki in their composer.json require section.

As MediaWiki itself is not a Composer package and is quite far away
from becoming one, a workaround was needed, which is provided by
this commit.

It works as follows. When "composer install" or "composer update"
is run, a Composer hook is invoked. This hook programmatically
indicates the root package provides MediaWiki, as it indeed does
when extensions are installed into MediaWiki. The package link
of type "provides" includes the MediaWiki version, which is read
from DefaultSettings.php.

This functionality has been tested and confirmed to work. One needs
a recent Composer version for it to have an effect. The upcoming
Composer alpha8 release will suffice. See
https://github.com/composer/composer/issues/2520

Tests are included. Composer independent tests will run always,
while the Composer specific ones are skipped when Composer is
not installed.

People that already have a composer.json file in their MediaWiki
root directory will need to make the same additions there as this
commit makes to composer-json.example. If this is not done, the
new behaviour will not work for them (though no existing behaviour
will break). The change to the json file has been made in such a
way to minimize the likelihood that any future modifications there
will be needed.

Thanks go to @beausimensen (Sculpin) and @seldaek (Composer) for
their support.

Change-Id: I8df66a92971146ab79cd4fcbd181e559115ca240
composer-example.json
includes/AutoLoader.php
includes/MediaWikiVersionFetcher.php [new file with mode: 0644]
includes/composer/ComposerHookHandler.php [new file with mode: 0644]
includes/composer/ComposerPackageModifier.php [new file with mode: 0644]
includes/composer/ComposerVersionNormalizer.php [new file with mode: 0644]
tests/phpunit/includes/MediaWikiVersionFetcherTest.php [new file with mode: 0644]
tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php [new file with mode: 0644]