diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json index ae5877b0c9..afceb573c9 100644 --- a/composer/Metapackage/CoreRecommended/composer.json +++ b/composer/Metapackage/CoreRecommended/composer.json @@ -17,7 +17,6 @@ "doctrine/common": "v2.7.3", "doctrine/inflector": "v1.2.0", "doctrine/lexer": "1.0.2", - "drupal/core-vendor-hardening": "8.9.x-dev", "easyrdf/easyrdf": "0.9.1", "egulias/email-validator": "2.1.11", "guzzlehttp/guzzle": "6.3.3", diff --git a/composer/Metapackage/Generator/Builder/DrupalCoreRecommendedBuilder.php b/composer/Metapackage/Generator/Builder/DrupalCoreRecommendedBuilder.php index 919aa949b5..2ea4b604bd 100644 --- a/composer/Metapackage/Generator/Builder/DrupalCoreRecommendedBuilder.php +++ b/composer/Metapackage/Generator/Builder/DrupalCoreRecommendedBuilder.php @@ -15,30 +15,9 @@ public function getPath() { } /** - * Returns the initial package metadata that describes the metapackage. - * - * @return array - */ - protected function initialPackageMetadata() { - return [ - "name" => "drupal/core-recommended", - "type" => "metapackage", - "description" => "Locked core dependencies; require this project INSTEAD OF drupal/core.", - "license" => "GPL-2.0-or-later", - "conflict" => [ - "webflo/drupal-core-strict" => "*", - ], - "require" => [ - "drupal/core" => "self.version", - ], - ]; - } - - /** - * Generate the composer.json data for drupal/core-recommended. + * {@inheritdoc} */ - public function getPackage() { - $composer = $this->initialPackageMetadata(); + public function getPackage($composer) { // Pull up the composer lock data. $composerLockData = $this->drupalCoreInfo->composerLock(); @@ -46,6 +25,10 @@ public function getPackage() { return $composer; } + unset($composer['require']); + + // Add drupal/core back in. + $composer['require']['drupal/core'] = 'self.version'; // Make a list of packages we do not want to put in the 'require' section. $remove_list = ['drupal/core', 'wikimedia/composer-merge-plugin']; @@ -57,10 +40,9 @@ public function getPackage() { foreach ($composerLockData['packages'] as $package) { // If there is no 'source' record, then this is a path repository or something. if (isset($package['source']) && !in_array($package['name'], $remove_list)) { - $composer['require'][$package['name']] = $this->packageToVersion($package); + $composer['require'][$package['name']] = $package['version']; } } - return $composer; } diff --git a/composer/Metapackage/Generator/Builder/DrupalDevDependenciesBuilder.php b/composer/Metapackage/Generator/Builder/DrupalDevDependenciesBuilder.php index d1f8e438f2..8ef5abb94c 100644 --- a/composer/Metapackage/Generator/Builder/DrupalDevDependenciesBuilder.php +++ b/composer/Metapackage/Generator/Builder/DrupalDevDependenciesBuilder.php @@ -15,33 +15,17 @@ public function getPath() { } /** - * Returns the initial package metadata that describes the metapackage. - * - * @return array - */ - protected function initialPackageMetadata() { - return [ - "name" => "drupal/dev-dependencies", - "type" => "metapackage", - "description" => "require-dev dependencies from drupal/drupal; use in addition to drupal/core-recommended to run tests from drupal/core.", - "license" => "GPL-2.0-or-later", - "conflict" => [ - "webflo/drupal-core-require-dev" => "*", - ], - ]; - } - - /** - * Generate the composer.json data for drupal/dev-dependencies. + * {@inheritdoc} */ - public function getPackage() { - $composer = $this->initialPackageMetadata(); + public function getPackage($composer) { + unset($composer['require']); // Put everything from Drupal's "require-dev" into our "require" section. $composer['require'] = $this->drupalCoreInfo->getRequireDev(); // If the require-dev is bringing in a dev version of behat/mink, convert // the requirement to a more flexible set of versions. + // @todo: remove when https://www.drupal.org/node/3078671 is fixed. if (isset($composer['require']['behat/mink']) && ($composer['require']['behat/mink'] == '1.7.x-dev')) { $composer['require']['behat/mink'] = '1.8.0 | 1.7.1.1 | 1.7.x-dev'; } diff --git a/composer/Metapackage/Generator/Builder/DrupalPackageBuilder.php b/composer/Metapackage/Generator/Builder/DrupalPackageBuilder.php index a3fbb86639..202d2d7f76 100644 --- a/composer/Metapackage/Generator/Builder/DrupalPackageBuilder.php +++ b/composer/Metapackage/Generator/Builder/DrupalPackageBuilder.php @@ -13,78 +13,18 @@ /** * Information about composer.json, composer.lock etc. in current release. * - * @var Drupal\Composer\Metapackage\Generator\Util\DrupalCoreComposer + * @var \Drupal\Composer\Metapackage\Generator\Util\DrupalCoreComposer */ protected $drupalCoreInfo; /** * DrupalPackageBuilder constructor. * - * @param Drupal\Composer\Metapackage\Generator\Util\DrupalCoreComposer $drupalCoreInfo + * @param \Drupal\Composer\Metapackage\Generator\Util\DrupalCoreComposer $drupalCoreInfo * Information about composer.json and composer.lock from current release. */ public function __construct(DrupalCoreComposer $drupalCoreInfo) { $this->drupalCoreInfo = $drupalCoreInfo; } - /** - * Look up locked version from the package information. - * - * @param array $package - * Information about dependency. - * - * @return string - * Locked version, potentially converted from dev to equiv. stable release. - */ - public function packageToVersion(array $package) { - // We should never has dev versions in our composer.lock file. If we - // find one, try to convert it to an equivalent stable release. - if (substr($package['version'], 0, 4) == 'dev-') { - return $this->convertDevReference($package['name'], $package['version'], $package['source']['reference']); - } - return $package['version']; - } - - /** - * Convert a dev sha hash to an equivalent stalbe release, if available. - * - * Convert from one of the dev-version sha hashes recorded in Drupal's - * composer.lock to an equivalent stable release that is as close as possible - * to the locked commit. - * - * IMPORTANT NOTE: THe stable tags for the commits converted here have not - * been made yet, so we have to use a development branch instead. This does - * not work in the general case, because persistent development branches are - * usually not available for most projects, so use caution before duplicating - * this pattern. - * - * @param string $name - * Name of dependency that is locked to a development version. - * @param string $version - * The verison that the dependency is locked to. - * @param string $sha - * Commit sha hash of development version. - * - * @return string - * Dev reference converted to a stable release, if possible. - */ - protected function convertDevReference($name, $version, $sha) { - $conversionTable = [ - 'behat/mink:dev-master#a534fe7dac9525e8e10ca68e737c3d7e5058ec83' => '1.8.0 | 1.7.1.1 | 1.7.x-dev', - 'behat/mink-selenium2-driver:dev-master#8684ee4e634db7abda9039ea53545f86fc1e105a' => '1.4.0 | 1.3.1.1 | 1.3.x-dev', - ]; - - // Return the item from the lookup table if we can find it. - $key = "$name:$version#$sha"; - if (isset($conversionTable[$key])) { - return $conversionTable[$key]; - } - - // We will put in a reference to the source sha commit hash if we fail - // to remap; however, this is for documentation purposes only, as - // commit references are ignored, except at the top-level composer.json. - // Ideally, we never get here. - return "$version#$sha"; - } - } diff --git a/composer/Metapackage/Generator/Builder/DrupalPinnedDevDependenciesBuilder.php b/composer/Metapackage/Generator/Builder/DrupalPinnedDevDependenciesBuilder.php index 4669c10be1..0fa676a003 100644 --- a/composer/Metapackage/Generator/Builder/DrupalPinnedDevDependenciesBuilder.php +++ b/composer/Metapackage/Generator/Builder/DrupalPinnedDevDependenciesBuilder.php @@ -14,41 +14,37 @@ public function getPath() { return 'PinnedDevDependencies'; } - /** - * Returns the initial package metadata that describes the metapackage. - * - * @return array - */ - protected function initialPackageMetadata() { - return [ - "name" => "drupal/pinned-dev-dependencies", - "type" => "metapackage", - "description" => "Pinned require-dev dependencies from drupal/drupal; use in addition to drupal/core-recommended to run tests from drupal/core.", - "license" => "GPL-2.0-or-later", - "conflict" => [ - "webflo/drupal-core-require-dev" => "*", - ], - "require" => [ - "drupal/core" => "self.version", - ], - ]; - } /** - * Generate the composer.json data for drupal/pinned-dev-dependencies. + * {@inheritdoc} */ - public function getPackage() { - $composer = $this->initialPackageMetadata(); + public function getPackage($composer) { + unset($composer['require']); + + $composer['require']['drupal/core'] = 'self.version'; // Pull the exact versions of the dependencies from the composer.lock // file and use it to build our 'require' section. $composerLockData = $this->drupalCoreInfo->composerLock(); + if (isset($composerLockData['packages-dev'])) { + foreach ($composerLockData['packages-dev'] as $package) { - $composer['require'][$package['name']] = $this->packageToVersion($package); + $composer['require'][$package['name']] = $package['version']; + + // If the require-dev is bringing in a dev version of behat/mink, convert + // the requirement to a more flexible set of versions. + // @todo: remove when https://www.drupal.org/node/3078671 is fixed. + if (($package['name'] == 'behat/mink') && ($package['version'] == 'dev-master')) { + $composer['require']['behat/mink'] = '1.8.0 | 1.7.1.1 | 1.7.x-dev'; + } + + // Do the same sort of conversion for behat/mink-selenium2-driver. + if (($package['name'] == 'behat/mink-selenium2-driver') && ($package['version'] == 'dev-master')) { + $composer['require']['behat/mink-selenium2-driver'] = '1.4.0 | 1.3.1.1 | 1.3.x-dev'; + } } } - return $composer; } diff --git a/composer/Metapackage/Generator/BuilderInterface.php b/composer/Metapackage/Generator/BuilderInterface.php index d4dbde9a35..13abb7757b 100644 --- a/composer/Metapackage/Generator/BuilderInterface.php +++ b/composer/Metapackage/Generator/BuilderInterface.php @@ -21,7 +21,7 @@ /** * BuilderInterface constructor. * - * @param \PackageGenerator\Util\DrupalCoreComposer $drupalCoreInfo + * @param \Drupal\Composer\Metapackage\Generator\Util\DrupalCoreComposer $drupalCoreInfo * Information about the composer.json, composer.lock, and repository path. */ public function __construct(DrupalCoreComposer $drupalCoreInfo); @@ -37,9 +37,12 @@ public function getPath(); /** * Generate the Composer.json data for the current tag or branch. * + * @param $composer + * The original composer.json data. + * * @return array * Composer json data. */ - public function getPackage(); + public function getPackage($composer); } diff --git a/composer/Metapackage/Generator/PackageGenerator.php b/composer/Metapackage/Generator/PackageGenerator.php index ed46fb0c6f..6548f1fc9f 100644 --- a/composer/Metapackage/Generator/PackageGenerator.php +++ b/composer/Metapackage/Generator/PackageGenerator.php @@ -28,23 +28,10 @@ public function __construct() { $this->generatedProjectBaseDir = dirname(__DIR__); } - /** - * Set the base directory where generated projects are written. - * - * Defaults to the 'composer/Metapackage' directory, where all of the - * existing metapackages are committed (rebuild in place). - * - * @param string $dir - * Base directory where generated projects are written. - */ - public function setGeneratedProjectBaseDir($dir) { - $this->generatedProjectBaseDir = $dir; - } - /** * Generate Drupal's metapackages whenever composer.lock is updated * - * @param Composer\IO\IOInterface $io + * @param \Composer\IO\IOInterface $io * Composer IO object for interacting with the user. * @param string $base_dir * Directory where drupal/drupal repository is located. @@ -89,7 +76,7 @@ protected function builders() { /** * Generate one metapackage. * - * @param Composer\IO\IOInterface $io + * @param \Composer\IO\IOInterface $io * Composer IO object for interacting with the user. * @param BuilderInterface $builder * An object that can build a metapackage. @@ -98,13 +85,14 @@ protected function builders() { * TRUE if the generated metapackage is different than what is on disk. */ protected function generateMetapackage(IOInterface $io, BuilderInterface $builder) { + // Load the existing composer.json file for drupal/core-recommended $relative_path = $builder->getPath() . '/composer.json'; $composer_json_path = $this->generatedProjectBaseDir . '/' . $relative_path; $original_composer_json = file_exists($composer_json_path) ? file_get_contents($composer_json_path) : ''; // Get the composer.json file from the builder. - $composer_json_data = $builder->getPackage(); + $composer_json_data = $builder->getPackage(json_decode($original_composer_json,TRUE)); $updated_composer_json = json_encode($composer_json_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); // Exit early if nothing changed. diff --git a/composer/Metapackage/Generator/Util/DrupalCoreComposer.php b/composer/Metapackage/Generator/Util/DrupalCoreComposer.php index 81e035f588..6f3eebf30c 100644 --- a/composer/Metapackage/Generator/Util/DrupalCoreComposer.php +++ b/composer/Metapackage/Generator/Util/DrupalCoreComposer.php @@ -54,36 +54,6 @@ public function composerLock() { return $this->jsonData('composer.lock'); } - /** - * Fetch the composer data from drupal/core. - * - * @return array - * Core Composer json data - */ - public function coreComposerJson() { - return $this->jsonData('core/composer.json'); - } - - /** - * Return the path to the drupal/drupal repository root. - * - * @return string - * Path to the repository root. - */ - public function repositoryPath() { - return $this->repositoryPath; - } - - /** - * Determine if drupal/core contains scaffold data or not. - * - * @return bool - * True if scaffold data is present - */ - public function hasScaffoldData() { - $coreComposerJsonData = $this->coreComposerJson(); - return isset($coreComposerJsonData['extra']['drupal-scaffold']); - } /** * Load the json data from the specified path. @@ -115,10 +85,6 @@ protected function jsonData($path) { * The contents of the "require-dev" section. */ public function getRequireDev() { - $composerJsonData = $this->coreComposerJson(); - if (!empty($composerJsonData['require-dev'])) { - return $composerJsonData['require-dev']; - } $composerJsonData = $this->rootComposerJson(); return isset($composerJsonData['require-dev']) ? $composerJsonData['require-dev'] : []; diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json index 1a6fcbcc3a..347bbd61b5 100644 --- a/composer/Metapackage/PinnedDevDependencies/composer.json +++ b/composer/Metapackage/PinnedDevDependencies/composer.json @@ -7,7 +7,6 @@ "webflo/drupal-core-require-dev": "*" }, "require": { - "drupal/core": "self.version", "behat/mink": "1.8.0 | 1.7.1.1 | 1.7.x-dev", "behat/mink-browserkit-driver": "1.3.3", "behat/mink-goutte-driver": "v1.2.1", diff --git a/core/tests/Drupal/Tests/Composer/Metapackage/BuilderTest.php b/core/tests/Drupal/Tests/Composer/Metapackage/BuilderTest.php index f0f098107a..f4860dabb9 100644 --- a/core/tests/Drupal/Tests/Composer/Metapackage/BuilderTest.php +++ b/core/tests/Drupal/Tests/Composer/Metapackage/BuilderTest.php @@ -24,6 +24,7 @@ public function builderTestData() { [ DrupalCoreRecommendedBuilder::class, 'Drupal', + 'CoreRecommended', [ 'name' => 'drupal/core-recommended', 'type' => 'metapackage', @@ -93,6 +94,7 @@ public function builderTestData() { [ DrupalDevDependenciesBuilder::class, 'Drupal', + 'DevDependencies', [ 'name' => 'drupal/dev-dependencies', 'type' => 'metapackage', @@ -125,6 +127,7 @@ public function builderTestData() { [ DrupalPinnedDevDependenciesBuilder::class, 'Drupal', + 'PinnedDevDependencies', [ 'name' => 'drupal/pinned-dev-dependencies', 'type' => 'metapackage', @@ -199,12 +202,13 @@ public function builderTestData() { * * @dataProvider builderTestData */ - public function testBuilder($builderClass, $referenceName, $expected) { + public function testBuilder($builderClass, $referenceName, $metapackageName, $expected) { $fixtures = new Fixtures(); $drupalCoreInfo = $fixtures->drupalCoreComposerFixture($referenceName); + $metapackage_json = $fixtures->drupalCoreMetapackageFixture($metapackageName); $builder = new $builderClass($drupalCoreInfo); - $generatedJson = $builder->getPackage(); + $generatedJson = $builder->getPackage($metapackage_json); $this->assertEquals($expected, $generatedJson); } diff --git a/core/tests/Drupal/Tests/Composer/Metapackage/Fixtures.php b/core/tests/Drupal/Tests/Composer/Metapackage/Fixtures.php index c506972ef5..f38055dcf7 100644 --- a/core/tests/Drupal/Tests/Composer/Metapackage/Fixtures.php +++ b/core/tests/Drupal/Tests/Composer/Metapackage/Fixtures.php @@ -39,5 +39,9 @@ public function projectPath($project_name = 'Drupal') { public function drupalCoreComposerFixture($project_name = 'Drupal') { return new DrupalCoreComposer($this->projectPath($project_name)); } + public function drupalCoreMetapackageFixture($metapackage_name = 'CoreRecommended') { + return json_decode(file_get_contents($this->projectPath('Metapackage') . '/' . $metapackage_name . '/composer.json'), TRUE); + + } } diff --git a/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Drupal/core/composer.json b/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Drupal/core/composer.json deleted file mode 100644 index 9a417a1399..0000000000 --- a/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Drupal/core/composer.json +++ /dev/null @@ -1,224 +0,0 @@ -{ - "name": "drupal/core", - "description": "Drupal is an open source content management platform powering millions of websites and applications.", - "type": "drupal-core", - "license": "GPL-2.0-or-later", - "require": { - "ext-date": "*", - "ext-dom": "*", - "ext-filter": "*", - "ext-gd": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-PDO": "*", - "ext-session": "*", - "ext-SimpleXML": "*", - "ext-SPL": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": ">=7.0.8", - "symfony/class-loader": "~3.4.0", - "symfony/console": "~3.4.0", - "symfony/dependency-injection": "~3.4.26", - "symfony/event-dispatcher": "~3.4.0", - "symfony/http-foundation": "~3.4.27", - "symfony/http-kernel": "~3.4.14", - "symfony/routing": "~3.4.0", - "symfony/serializer": "~3.4.0", - "symfony/translation": "~3.4.0", - "symfony/validator": "~3.4.0", - "symfony/process": "~3.4.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/yaml": "~3.4.5", - "typo3/phar-stream-wrapper": "^2.1.1", - "twig/twig": "^1.38.2", - "doctrine/common": "^2.5", - "doctrine/annotations": "^1.2", - "guzzlehttp/guzzle": "^6.2.1", - "symfony-cmf/routing": "^1.4", - "easyrdf/easyrdf": "^0.9", - "zendframework/zend-feed": "^2.4", - "stack/builder": "^1.0", - "egulias/email-validator": "^2.0", - "masterminds/html5": "^2.1", - "symfony/psr-http-message-bridge": "^1.1.2", - "zendframework/zend-diactoros": "^1.1", - "composer/semver": "^1.0", - "asm89/stack-cors": "^1.1", - "pear/archive_tar": "^1.4" - }, - "conflict": { - "drush/drush": "<8.1.10" - }, - "replace": { - "drupal/action": "self.version", - "drupal/aggregator": "self.version", - "drupal/automated_cron": "self.version", - "drupal/bartik": "self.version", - "drupal/ban": "self.version", - "drupal/basic_auth": "self.version", - "drupal/big_pipe": "self.version", - "drupal/block": "self.version", - "drupal/block_content": "self.version", - "drupal/block_place": "self.version", - "drupal/book": "self.version", - "drupal/breakpoint": "self.version", - "drupal/ckeditor": "self.version", - "drupal/classy": "self.version", - "drupal/color": "self.version", - "drupal/comment": "self.version", - "drupal/config": "self.version", - "drupal/config_environment": "self.version", - "drupal/config_translation": "self.version", - "drupal/contact": "self.version", - "drupal/content_moderation": "self.version", - "drupal/content_translation": "self.version", - "drupal/contextual": "self.version", - "drupal/core-annotation": "self.version", - "drupal/core-assertion": "self.version", - "drupal/core-bridge": "self.version", - "drupal/core-class-finder": "self.version", - "drupal/core-datetime": "self.version", - "drupal/core-dependency-injection": "self.version", - "drupal/core-diff": "self.version", - "drupal/core-discovery": "self.version", - "drupal/core-event-dispatcher": "self.version", - "drupal/core-file-cache": "self.version", - "drupal/core-file-security": "self.version", - "drupal/core-filesystem": "self.version", - "drupal/core-gettext": "self.version", - "drupal/core-graph": "self.version", - "drupal/core-http-foundation": "self.version", - "drupal/core-php-storage": "self.version", - "drupal/core-plugin": "self.version", - "drupal/core-proxy-builder": "self.version", - "drupal/core-render": "self.version", - "drupal/core-serialization": "self.version", - "drupal/core-transliteration": "self.version", - "drupal/core-utility": "self.version", - "drupal/core-uuid": "self.version", - "drupal/core-version": "self.version", - "drupal/datetime": "self.version", - "drupal/datetime_range": "self.version", - "drupal/dblog": "self.version", - "drupal/dynamic_page_cache": "self.version", - "drupal/editor": "self.version", - "drupal/entity_reference": "self.version", - "drupal/field": "self.version", - "drupal/field_layout": "self.version", - "drupal/field_ui": "self.version", - "drupal/file": "self.version", - "drupal/filter": "self.version", - "drupal/forum": "self.version", - "drupal/hal": "self.version", - "drupal/help": "self.version", - "drupal/help_topics": "self.version", - "drupal/history": "self.version", - "drupal/image": "self.version", - "drupal/inline_form_errors": "self.version", - "drupal/jsonapi": "self.version", - "drupal/language": "self.version", - "drupal/layout_builder": "self.version", - "drupal/layout_discovery": "self.version", - "drupal/link": "self.version", - "drupal/locale": "self.version", - "drupal/minimal": "self.version", - "drupal/media": "self.version", - "drupal/media_library": "self.version", - "drupal/menu_link_content": "self.version", - "drupal/menu_ui": "self.version", - "drupal/migrate": "self.version", - "drupal/migrate_drupal": "self.version", - "drupal/migrate_drupal_multilingual": "self.version", - "drupal/migrate_drupal_ui": "self.version", - "drupal/node": "self.version", - "drupal/options": "self.version", - "drupal/page_cache": "self.version", - "drupal/path": "self.version", - "drupal/quickedit": "self.version", - "drupal/rdf": "self.version", - "drupal/responsive_image": "self.version", - "drupal/rest": "self.version", - "drupal/search": "self.version", - "drupal/serialization": "self.version", - "drupal/settings_tray": "self.version", - "drupal/seven": "self.version", - "drupal/shortcut": "self.version", - "drupal/simpletest": "self.version", - "drupal/standard": "self.version", - "drupal/stark": "self.version", - "drupal/statistics": "self.version", - "drupal/syslog": "self.version", - "drupal/system": "self.version", - "drupal/taxonomy": "self.version", - "drupal/telephone": "self.version", - "drupal/text": "self.version", - "drupal/toolbar": "self.version", - "drupal/tour": "self.version", - "drupal/tracker": "self.version", - "drupal/update": "self.version", - "drupal/user": "self.version", - "drupal/views": "self.version", - "drupal/views_ui": "self.version", - "drupal/workflows": "self.version", - "drupal/workspaces": "self.version" - }, - "minimum-stability": "dev", - "prefer-stable": true, - "autoload": { - "psr-4": { - "Drupal\\Core\\": "lib/Drupal/Core", - "Drupal\\Component\\": "lib/Drupal/Component", - "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver" - }, - "classmap": [ - "lib/Drupal.php", - "lib/Drupal/Component/Utility/Timer.php", - "lib/Drupal/Component/Utility/Unicode.php", - "lib/Drupal/Core/Database/Database.php", - "lib/Drupal/Core/DrupalKernel.php", - "lib/Drupal/Core/DrupalKernelInterface.php", - "lib/Drupal/Core/Site/Settings.php" - ] - }, - "config": { - "preferred-install": "dist", - "autoloader-suffix": "Drupal8" - }, - "extra": { - "drupal-scaffold": { - "file-mapping": { - "[web-root]/.csslintrc": "assets/scaffold/files/csslintrc", - "[web-root]/.editorconfig": "assets/scaffold/files/editorconfig", - "[web-root]/.eslintignore": "assets/scaffold/files/eslintignore", - "[web-root]/.eslintrc.json": "assets/scaffold/files/eslintrc.json", - "[web-root]/.gitattributes": "assets/scaffold/files/gitattributes", - "[web-root]/.ht.router.php": "assets/scaffold/files/ht.router.php", - "[web-root]/.htaccess": "assets/scaffold/files/htaccess", - "[web-root]/example.gitignore": "assets/scaffold/files/example.gitignore", - "[web-root]/index.php": "assets/scaffold/files/index.php", - "[web-root]/INSTALL.txt": "assets/scaffold/files/drupal.INSTALL.txt", - "[web-root]/README.txt": "assets/scaffold/files/drupal.README.txt", - "[web-root]/robots.txt": "assets/scaffold/files/robots.txt", - "[web-root]/update.php": "assets/scaffold/files/update.php", - "[web-root]/web.config": "assets/scaffold/files/web.config", - "[web-root]/sites/README.txt": "assets/scaffold/files/sites.README.txt", - "[web-root]/sites/development.services.yml": "assets/scaffold/files/development.services.yml", - "[web-root]/sites/example.settings.local.php": "assets/scaffold/files/example.settings.local.php", - "[web-root]/sites/example.sites.php": "assets/scaffold/files/example.sites.php", - "[web-root]/sites/default/default.services.yml": "assets/scaffold/files/default.services.yml", - "[web-root]/sites/default/default.settings.php": "assets/scaffold/files/default.settings.php", - "[web-root]/modules/README.txt": "assets/scaffold/files/modules.README.txt", - "[web-root]/profiles/README.txt": "assets/scaffold/files/profiles.README.txt", - "[web-root]/themes/README.txt": "assets/scaffold/files/themes.README.txt" - } - } - }, - "scripts": { - "pre-autoload-dump": "Drupal\\Core\\Composer\\Composer::preAutoloadDump", - "post-autoload-dump": [ - "Drupal\\Core\\Composer\\Composer::ensureHtaccess" - ] - } -} diff --git a/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/CoreRecommended/composer.json b/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/CoreRecommended/composer.json new file mode 100644 index 0000000000..afceb573c9 --- /dev/null +++ b/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/CoreRecommended/composer.json @@ -0,0 +1,62 @@ +{ + "name": "drupal/core-recommended", + "type": "metapackage", + "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.", + "license": "GPL-2.0-or-later", + "conflict": { + "webflo/drupal-core-strict": "*" + }, + "require": { + "drupal/core": "self.version", + "asm89/stack-cors": "1.2.0", + "composer/installers": "v1.7.0", + "composer/semver": "1.5.0", + "doctrine/annotations": "v1.4.0", + "doctrine/cache": "v1.6.2", + "doctrine/collections": "v1.4.0", + "doctrine/common": "v2.7.3", + "doctrine/inflector": "v1.2.0", + "doctrine/lexer": "1.0.2", + "easyrdf/easyrdf": "0.9.1", + "egulias/email-validator": "2.1.11", + "guzzlehttp/guzzle": "6.3.3", + "guzzlehttp/promises": "v1.3.1", + "guzzlehttp/psr7": "1.6.1", + "masterminds/html5": "2.3.0", + "paragonie/random_compat": "v9.99.99", + "pear/archive_tar": "1.4.7", + "pear/console_getopt": "v1.4.2", + "pear/pear-core-minimal": "v1.10.9", + "pear/pear_exception": "v1.0.0", + "psr/container": "1.0.0", + "psr/http-message": "1.0.1", + "psr/log": "1.1.0", + "ralouphie/getallheaders": "3.0.3", + "stack/builder": "v1.0.5", + "symfony-cmf/routing": "1.4.1", + "symfony/class-loader": "v3.4.32", + "symfony/console": "v3.4.32", + "symfony/debug": "v3.4.32", + "symfony/dependency-injection": "v3.4.32", + "symfony/event-dispatcher": "v3.4.32", + "symfony/http-foundation": "v3.4.32", + "symfony/http-kernel": "v3.4.32", + "symfony/polyfill-ctype": "v1.12.0", + "symfony/polyfill-iconv": "v1.12.0", + "symfony/polyfill-mbstring": "v1.12.0", + "symfony/polyfill-php70": "v1.12.0", + "symfony/process": "v3.4.32", + "symfony/psr-http-message-bridge": "v1.1.2", + "symfony/routing": "v3.4.32", + "symfony/serializer": "v3.4.32", + "symfony/translation": "v3.4.32", + "symfony/validator": "v3.4.32", + "symfony/yaml": "v3.4.32", + "twig/twig": "v1.42.3", + "typo3/phar-stream-wrapper": "v3.1.2", + "zendframework/zend-diactoros": "1.7.2", + "zendframework/zend-escaper": "2.6.1", + "zendframework/zend-feed": "2.12.0", + "zendframework/zend-stdlib": "3.2.1" + } +} \ No newline at end of file diff --git a/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/DevDependencies/composer.json b/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/DevDependencies/composer.json new file mode 100644 index 0000000000..6aa9f22fd7 --- /dev/null +++ b/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/DevDependencies/composer.json @@ -0,0 +1,29 @@ +{ + "name": "drupal/dev-dependencies", + "type": "metapackage", + "description": "require-dev dependencies from drupal/drupal; use in addition to drupal/core-recommended to run tests from drupal/core.", + "license": "GPL-2.0-or-later", + "conflict": { + "webflo/drupal-core-require-dev": "*" + }, + "require": { + "behat/mink": "1.8.0 | 1.7.1.1 | 1.7.x-dev", + "behat/mink-goutte-driver": "^1.2", + "behat/mink-selenium2-driver": "1.4.0 | 1.3.1.1 | 1.3.x-dev", + "composer/composer": "^1.8", + "drupal/coder": "^8.3.2", + "jcalderonzumba/gastonjs": "^1.0.2", + "jcalderonzumba/mink-phantomjs-driver": "^0.3.1", + "justinrainbow/json-schema": "^5.2", + "mikey179/vfsstream": "^1.2", + "phpspec/prophecy": "^1.7", + "phpunit/phpunit": "^6.5 || ^7", + "symfony/browser-kit": "^3.4.0", + "symfony/css-selector": "^3.4.0", + "symfony/debug": "^3.4.0", + "symfony/filesystem": "~3.4.0", + "symfony/finder": "~3.4.0", + "symfony/lock": "~3.4.0", + "symfony/phpunit-bridge": "^3.4.3" + } +} \ No newline at end of file diff --git a/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/PinnedDevDependencies/composer.json b/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/PinnedDevDependencies/composer.json new file mode 100644 index 0000000000..347bbd61b5 --- /dev/null +++ b/core/tests/Drupal/Tests/Composer/Metapackage/fixtures/Metapackage/PinnedDevDependencies/composer.json @@ -0,0 +1,64 @@ +{ + "name": "drupal/pinned-dev-dependencies", + "type": "metapackage", + "description": "Pinned require-dev dependencies from drupal/drupal; use in addition to drupal/core-recommended to run tests from drupal/core.", + "license": "GPL-2.0-or-later", + "conflict": { + "webflo/drupal-core-require-dev": "*" + }, + "require": { + "behat/mink": "1.8.0 | 1.7.1.1 | 1.7.x-dev", + "behat/mink-browserkit-driver": "1.3.3", + "behat/mink-goutte-driver": "v1.2.1", + "behat/mink-selenium2-driver": "1.4.0 | 1.3.1.1 | 1.3.x-dev", + "composer/ca-bundle": "1.2.4", + "composer/composer": "1.9.0", + "composer/spdx-licenses": "1.5.2", + "composer/xdebug-handler": "1.3.3", + "doctrine/instantiator": "1.0.5", + "drupal/coder": "8.3.6", + "fabpot/goutte": "v3.2.3", + "instaclick/php-webdriver": "1.4.6", + "jcalderonzumba/gastonjs": "v1.0.2", + "jcalderonzumba/mink-phantomjs-driver": "v0.3.2", + "justinrainbow/json-schema": "5.2.8", + "mikey179/vfsstream": "v1.6.7", + "myclabs/deep-copy": "1.7.0", + "phar-io/manifest": "1.0.1", + "phar-io/version": "1.0.1", + "phpdocumentor/reflection-common": "1.0.1", + "phpdocumentor/reflection-docblock": "4.3.2", + "phpdocumentor/type-resolver": "0.5.1", + "phpspec/prophecy": "1.9.0", + "phpunit/php-code-coverage": "5.3.2", + "phpunit/php-file-iterator": "1.4.5", + "phpunit/php-text-template": "1.2.1", + "phpunit/php-timer": "1.0.9", + "phpunit/php-token-stream": "2.0.2", + "phpunit/phpunit": "6.5.14", + "phpunit/phpunit-mock-objects": "5.0.10", + "sebastian/code-unit-reverse-lookup": "1.0.1", + "sebastian/comparator": "2.1.3", + "sebastian/diff": "2.0.1", + "sebastian/environment": "3.1.0", + "sebastian/exporter": "3.1.2", + "sebastian/global-state": "2.0.0", + "sebastian/object-enumerator": "3.0.3", + "sebastian/object-reflector": "1.1.1", + "sebastian/recursion-context": "3.0.0", + "sebastian/resource-operations": "1.0.0", + "sebastian/version": "2.0.1", + "seld/jsonlint": "1.7.1", + "seld/phar-utils": "1.0.1", + "squizlabs/php_codesniffer": "3.5.0", + "symfony/browser-kit": "v3.4.32", + "symfony/css-selector": "v3.4.32", + "symfony/dom-crawler": "v3.4.32", + "symfony/filesystem": "v3.4.32", + "symfony/finder": "v3.4.32", + "symfony/lock": "v3.4.32", + "symfony/phpunit-bridge": "v3.4.32", + "theseer/tokenizer": "1.1.3", + "webmozart/assert": "1.5.0" + } +} \ No newline at end of file