From 17ccfbb7b39ad8d8c6643539ec16ecc9bd3be036 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Sat, 3 Jan 2015 15:28:02 -0800 Subject: [PATCH] Don't display composer installed extensions/skins on Special:Version Extensions and skins should already be adding their credits through $wgExtensionCredits, meaning that they would be duplicated in the "Installed libraries" section. Anything that has a type that begins with "mediawiki-" will now be skipped. Release notes were added for this commit and 528297f8db8dea. Change-Id: Ie873b16c1a8a696c7de833ae69b263161d9e15a8 --- RELEASE-NOTES-1.25 | 4 + includes/libs/composer/ComposerLock.php | 5 +- includes/specials/SpecialVersion.php | 11 +- maintenance/checkComposerLockUpToDate.php | 4 +- tests/phpunit/data/composer/composer.lock | 388 +++++++++++++++--- .../libs/composer/ComposerLockTest.php | 38 +- 6 files changed, 382 insertions(+), 68 deletions(-) diff --git a/RELEASE-NOTES-1.25 b/RELEASE-NOTES-1.25 index 4e195c5a6f..abbe9f777d 100644 --- a/RELEASE-NOTES-1.25 +++ b/RELEASE-NOTES-1.25 @@ -71,6 +71,10 @@ production. should implement supporting behavior. Not doing so can result in undefined behavior from API clients trying to continue through prefix results. * Update jQuery from v1.11.1 to v1.11.2. +* Installed external libraries installed via composer will now be displayed + on Special:Version in their own section. Extensions or skins that are installed + via composer will not be shown in this section as it is assumed they will add + the proper credits to the skins or extensions section. ==== External libraries ==== * MediaWiki now requires certain external libraries to be installed. In the past diff --git a/includes/libs/composer/ComposerLock.php b/includes/libs/composer/ComposerLock.php index d2b0e8e76f..9c7bf2f9ac 100644 --- a/includes/libs/composer/ComposerLock.php +++ b/includes/libs/composer/ComposerLock.php @@ -27,7 +27,10 @@ class ComposerLock { public function getInstalledDependencies() { $deps = array(); foreach ( $this->contents['packages'] as $installed ) { - $deps[$installed['name']] = ComposerJson::normalizeVersion( $installed['version'] ); + $deps[$installed['name']] = array( + 'version' => ComposerJson::normalizeVersion( $installed['version'] ), + 'type' => $installed['type'], + ); } return $deps; diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index 3747e923d3..c836656a26 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -531,11 +531,16 @@ class SpecialVersion extends SpecialPage { . Html::element( 'th', array(), $this->msg( 'version-libraries-library' )->text() ) . Html::element( 'th', array(), $this->msg( 'version-libraries-version' )->text() ) . Html::closeElement( 'tr' ); - ; - foreach ( $lock->getInstalledDependencies() as $name => $version ) { + + foreach ( $lock->getInstalledDependencies() as $name => $info ) { + if ( strpos( $info['type'], 'mediawiki-' ) === 0 ) { + // Skip any extensions or skins since they'll be listed + // in their proper section + continue; + } $out .= Html::openElement( 'tr' ) . Html::rawElement( 'td', array(), Linker::makeExternalLink( "https://packagist.org/packages/$name", $name ) ) - . Html::element( 'td', array(), $version ) + . Html::element( 'td', array(), $info['version'] ) . Html::closeElement( 'tr' ); } $out .= Html::closeElement( 'table' ); diff --git a/maintenance/checkComposerLockUpToDate.php b/maintenance/checkComposerLockUpToDate.php index 5ef2de6f24..0b77578d8f 100644 --- a/maintenance/checkComposerLockUpToDate.php +++ b/maintenance/checkComposerLockUpToDate.php @@ -39,8 +39,8 @@ class CheckComposerLockUpToDate extends Maintenance { $installed = $lock->getInstalledDependencies(); foreach ( $json->getRequiredDependencies() as $name => $version ) { if ( isset( $installed[$name] ) ) { - if ( $installed[$name] !== $version ) { - $this->output( "$name: {$installed[$name]} installed, $version required.\n" ); + if ( $installed[$name]['version'] !== $version ) { + $this->output( "$name: {$installed[$name]['version']} installed, $version required.\n" ); $found = true; } } else { diff --git a/tests/phpunit/data/composer/composer.lock b/tests/phpunit/data/composer/composer.lock index 8b490de881..cae6a478a0 100644 --- a/tests/phpunit/data/composer/composer.lock +++ b/tests/phpunit/data/composer/composer.lock @@ -4,51 +4,100 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "cc6e7fc565b246cb30b0cac103a2b31e", + "hash": "a3bb80b0ac4c4a31e52574d48c032923", "packages": [ { - "name": "cdb/cdb", - "version": "1.0.0", + "name": "composer/installers", + "version": "v1.0.19", "source": { "type": "git", - "url": "https://github.com/wikimedia/cdb.git", - "reference": "918601ea3d31b8c37312e9c0e54446aa8bfb3425" + "url": "https://github.com/composer/installers.git", + "reference": "89d77bfbee79e16653f7162c86e602cc188471db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/cdb/zipball/918601ea3d31b8c37312e9c0e54446aa8bfb3425", - "reference": "918601ea3d31b8c37312e9c0e54446aa8bfb3425", + "url": "https://api.github.com/repos/composer/installers/zipball/89d77bfbee79e16653f7162c86e602cc188471db", + "reference": "89d77bfbee79e16653f7162c86e602cc188471db", "shasum": "" }, - "require": { - "php": ">=5.3.2" + "replace": { + "roundcube/plugin-installer": "*", + "shama/baton": "*" }, "require-dev": { - "phpunit/phpunit": "*" + "composer/composer": "1.0.*@dev", + "phpunit/phpunit": "4.1.*" + }, + "type": "composer-installer", + "extra": { + "class": "Composer\\Installers\\Installer", + "branch-alias": { + "dev-master": "1.0-dev" + } }, - "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-0": { + "Composer\\Installers\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPLv2" + "MIT" ], "authors": [ { - "name": "Tim Starling", - "email": "tstarling@wikimedia.org" - }, - { - "name": "Chad Horohoe", - "email": "chad@wikimedia.org" + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" } ], - "description": "Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.", - "homepage": "https://www.mediawiki.org/wiki/CDB", - "time": "2014-11-12 19:03:26" + "description": "A multi-framework Composer library installer", + "homepage": "http://composer.github.com/installers/", + "keywords": [ + "Craft", + "Dolibarr", + "Hurad", + "MODX Evo", + "OXID", + "Thelia", + "WolfCMS", + "agl", + "annotatecms", + "bitrix", + "cakephp", + "chef", + "codeigniter", + "concrete5", + "croogo", + "dokuwiki", + "drupal", + "elgg", + "fuelphp", + "grav", + "installer", + "joomla", + "kohana", + "laravel", + "lithium", + "magento", + "mako", + "mediawiki", + "modulework", + "moodle", + "phpbb", + "piwik", + "ppi", + "puppet", + "roundcube", + "shopware", + "silverstripe", + "symfony", + "typo3", + "wordpress", + "zend", + "zikula" + ], + "time": "2014-11-29 01:29:17" }, { "name": "cssjanus/cssjanus", @@ -126,6 +175,139 @@ "homepage": "http://leafo.net/lessphp/", "time": "2014-11-24 18:39:20" }, + { + "name": "mediawiki/translate", + "version": "2014.12", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/mediawiki-extensions-Translate.git", + "reference": "2bc100763f3150380412faceea258c7378ce7ea0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Translate/zipball/2bc100763f3150380412faceea258c7378ce7ea0", + "reference": "2bc100763f3150380412faceea258c7378ce7ea0", + "shasum": "" + }, + "require": { + "composer/installers": ">=1.0.1", + "mediawiki/universal-language-selector": "*", + "php": ">=5.3.0" + }, + "suggest": { + "mediawiki/babel": "Users can easily indicate their language proficiency on their user page", + "mediawiki/translation-notifications": "Manage communication with translators", + "mustangostang/spyc": "More recent version of the bundled spyc library" + }, + "type": "mediawiki-extension", + "autoload": { + "files": [ + "Translate.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Niklas Laxström", + "email": "niklas.laxstrom@gmail.com", + "role": "Lead nitpicker" + }, + { + "name": "Siebrand Mazeland", + "email": "s.mazeland@xs4all.nl", + "role": "Developer" + } + ], + "description": "The only standard solution to translate any kind of text with an avant-garde web interface within MediaWiki, including your documentation and software", + "homepage": "https://www.mediawiki.org/wiki/Extension:Translate", + "keywords": [ + "g11n", + "i18n", + "internationalization", + "l10n", + "localization", + "m17n", + "mediawiki", + "translatewiki.net", + "translation" + ], + "time": "2014-12-30 15:21:24" + }, + { + "name": "mediawiki/universal-language-selector", + "version": "2014.12", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/mediawiki-extensions-UniversalLanguageSelector.git", + "reference": "f730b0f47e2828001c1e03ec40d4681bfb0bff2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-UniversalLanguageSelector/zipball/f730b0f47e2828001c1e03ec40d4681bfb0bff2d", + "reference": "f730b0f47e2828001c1e03ec40d4681bfb0bff2d", + "shasum": "" + }, + "require": { + "composer/installers": ">=1.0.1", + "php": ">=5.3.0" + }, + "suggest": { + "mediawiki/cldr": "Language names in all languages" + }, + "type": "mediawiki-extension", + "autoload": { + "files": [ + "UniversalLanguageSelector.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+", + "MIT" + ], + "description": "The primary aim is to allow users to select a language and configure its support in an easy way. Main features are language selection, input methods and web fonts.", + "homepage": "https://www.mediawiki.org/wiki/Extension:UniversalLanguageSelector", + "keywords": [ + "Input methods", + "Language selection", + "Web fonts", + "mediawiki" + ], + "time": "2014-12-30 15:21:25" + }, + { + "name": "oojs/oojs-ui", + "version": "v0.6.0", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/oojs-ui.git", + "reference": "50fa12637ad377f00bdbf1913406a3bfe9c1689e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/oojs-ui/zipball/50fa12637ad377f00bdbf1913406a3bfe9c1689e", + "reference": "50fa12637ad377f00bdbf1913406a3bfe9c1689e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "php/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "homepage": "https://www.mediawiki.org/wiki/OOjs_UI", + "time": "2014-12-16 20:50:05" + }, { "name": "psr/log", "version": "1.0.0", @@ -163,6 +345,50 @@ "psr-3" ], "time": "2012-12-21 11:40:51" + }, + { + "name": "wikimedia/cdb", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/cdb.git", + "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/cdb/zipball/3b7d5366c88eccf2517ebac57c59eb557c82f46c", + "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0" + ], + "authors": [ + { + "name": "Tim Starling", + "email": "tstarling@wikimedia.org" + }, + { + "name": "Chad Horohoe", + "email": "chad@wikimedia.org" + } + ], + "description": "Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.", + "homepage": "https://www.mediawiki.org/wiki/CDB", + "time": "2014-12-08 19:26:44" } ], "packages-dev": [ @@ -222,16 +448,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "2.0.12", + "version": "2.0.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7ce9da20f96964bb7a4033f53834df13328dbeab" + "reference": "ca158276c1200cc27f5409a5e338486bc0b4fc94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7ce9da20f96964bb7a4033f53834df13328dbeab", - "reference": "7ce9da20f96964bb7a4033f53834df13328dbeab", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca158276c1200cc27f5409a5e338486bc0b4fc94", + "reference": "ca158276c1200cc27f5409a5e338486bc0b4fc94", "shasum": "" }, "require": { @@ -283,7 +509,7 @@ "testing", "xunit" ], - "time": "2014-12-02 13:17:01" + "time": "2014-12-26 13:28:33" }, { "name": "phpunit/php-file-iterator", @@ -469,16 +695,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.3.5", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "2dab9d593997db4abcf58d0daf798eb4e9cecfe1" + "reference": "6a5e49a86ce5e33b8d0657abe145057fc513543a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2dab9d593997db4abcf58d0daf798eb4e9cecfe1", - "reference": "2dab9d593997db4abcf58d0daf798eb4e9cecfe1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6a5e49a86ce5e33b8d0657abe145057fc513543a", + "reference": "6a5e49a86ce5e33b8d0657abe145057fc513543a", "shasum": "" }, "require": { @@ -495,8 +721,9 @@ "phpunit/phpunit-mock-objects": "~2.3", "sebastian/comparator": "~1.0", "sebastian/diff": "~1.1", - "sebastian/environment": "~1.0", + "sebastian/environment": "~1.1", "sebastian/exporter": "~1.0", + "sebastian/global-state": "~1.0", "sebastian/version": "~1.0", "symfony/yaml": "~2.0" }, @@ -509,7 +736,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3.x-dev" + "dev-master": "4.4.x-dev" } }, "autoload": { @@ -518,10 +745,6 @@ ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], "license": [ "BSD-3-Clause" ], @@ -533,13 +756,13 @@ } ], "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", + "homepage": "https://phpunit.de/", "keywords": [ "phpunit", "testing", "xunit" ], - "time": "2014-11-11 10:11:09" + "time": "2014-12-28 07:57:05" }, { "name": "phpunit/phpunit-mock-objects", @@ -598,16 +821,16 @@ }, { "name": "sebastian/comparator", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "e54a01c0da1b87db3c5a3c4c5277ddf331da4aef" + "reference": "c484a80f97573ab934e37826dba0135a3301b26a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e54a01c0da1b87db3c5a3c4c5277ddf331da4aef", - "reference": "e54a01c0da1b87db3c5a3c4c5277ddf331da4aef", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c484a80f97573ab934e37826dba0135a3301b26a", + "reference": "c484a80f97573ab934e37826dba0135a3301b26a", "shasum": "" }, "require": { @@ -621,7 +844,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -658,7 +881,7 @@ "compare", "equality" ], - "time": "2014-05-11 23:00:21" + "time": "2014-11-16 21:32:38" }, { "name": "sebastian/diff", @@ -827,18 +1050,69 @@ ], "time": "2014-09-10 00:51:36" }, + { + "name": "sebastian/global-state", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", + "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2014-10-06 09:23:50" + }, { "name": "sebastian/version", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43" + "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43", - "reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/a77d9123f8e809db3fbdea15038c27a95da4058b", + "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b", "shasum": "" }, "type": "library", @@ -860,21 +1134,21 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2014-03-07 15:35:33" + "time": "2014-12-15 14:25:24" }, { "name": "symfony/yaml", - "version": "v2.6.0", + "version": "v2.6.1", "target-dir": "Symfony/Component/Yaml", "source": { "type": "git", "url": "https://github.com/symfony/Yaml.git", - "reference": "51c845cf3e4bfc182d1d5c05ed1c7338361d86f8" + "reference": "3346fc090a3eb6b53d408db2903b241af51dcb20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/51c845cf3e4bfc182d1d5c05ed1c7338361d86f8", - "reference": "51c845cf3e4bfc182d1d5c05ed1c7338361d86f8", + "url": "https://api.github.com/repos/symfony/Yaml/zipball/3346fc090a3eb6b53d408db2903b241af51dcb20", + "reference": "3346fc090a3eb6b53d408db2903b241af51dcb20", "shasum": "" }, "require": { @@ -907,7 +1181,7 @@ ], "description": "Symfony Yaml Component", "homepage": "http://symfony.com", - "time": "2014-11-20 13:24:23" + "time": "2014-12-02 20:19:20" } ], "aliases": [], diff --git a/tests/phpunit/includes/libs/composer/ComposerLockTest.php b/tests/phpunit/includes/libs/composer/ComposerLockTest.php index 1b77106e53..b5fd5f6e71 100644 --- a/tests/phpunit/includes/libs/composer/ComposerLockTest.php +++ b/tests/phpunit/includes/libs/composer/ComposerLockTest.php @@ -15,7 +15,7 @@ class ComposerLockTest extends MediaWikiTestCase { */ public function testGetHash() { $lock = new ComposerLock( $this->lock ); - $this->assertEquals( 'cc6e7fc565b246cb30b0cac103a2b31e', $lock->getHash() ); + $this->assertEquals( 'a3bb80b0ac4c4a31e52574d48c032923', $lock->getHash() ); } /** @@ -24,10 +24,38 @@ class ComposerLockTest extends MediaWikiTestCase { public function testGetInstalledDependencies() { $lock = new ComposerLock( $this->lock ); $this->assertArrayEquals( array( - 'cdb/cdb' => '1.0.0', - 'cssjanus/cssjanus' => '1.1.1', - 'leafo/lessphp' => '0.5.0', - 'psr/log' => '1.0.0', + 'wikimedia/cdb' => array( + 'version' => '1.0.1', + 'type' => 'library', + ), + 'cssjanus/cssjanus' => array( + 'version' => '1.1.1', + 'type' => 'library', + ), + 'leafo/lessphp' => array( + 'version' => '0.5.0', + 'type' => 'library', + ), + 'psr/log' => array( + 'version' => '1.0.0', + 'type' => 'library', + ), + 'oojs/oojs-ui' => array( + 'version' => '0.6.0', + 'type' => 'library', + ), + 'composer/installers' => array( + 'version' => '1.0.19', + 'type' => 'composer-installer', + ), + 'mediawiki/translate' => array( + 'version' => '2014.12', + 'type' => 'mediawiki-extension', + ), + 'mediawiki/universal-language-selector' => array( + 'version' => '2014.12', + 'type' => 'mediawiki-extension', + ), ), $lock->getInstalledDependencies(), false, true ); } -- 2.20.1