Unverified Commit 770237b6 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3087626 by greg.1.anderson, Mixologic, jibran, Mile23, alexpott, xjm:...

Issue #3087626 by greg.1.anderson, Mixologic, jibran, Mile23, alexpott, xjm: Convert drupal/core-recommended & c. into a subtree split
parent 1bfa7c6d
Loading
Loading
Loading
Loading
+6 −2
Changes for composer.json: 6 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -70,11 +70,15 @@
        }
    },
    "scripts": {
        "pre-install-cmd": "Drupal\\Core\\Composer\\Composer::ensureComposerVersion",
        "pre-update-cmd": "Drupal\\Core\\Composer\\Composer::ensureComposerVersion",
        "pre-install-cmd": "Drupal\\Composer\\Composer::ensureComposerVersion",
        "pre-update-cmd": "Drupal\\Composer\\Composer::ensureComposerVersion",
        "pre-autoload-dump": "Drupal\\Core\\Composer\\Composer::preAutoloadDump",
        "drupal-phpunit-upgrade-check": "Drupal\\Core\\Composer\\Composer::upgradePHPUnit",
        "drupal-phpunit-upgrade": "@composer update phpunit/phpunit symfony/phpunit-bridge phpspec/prophecy symfony/yaml --with-dependencies --no-progress",
        "post-update-cmd": [
            "Drupal\\Composer\\Composer::generateMetapackages",
            "Drupal\\Composer\\Composer::ensureBehatDriverVersions"
        ],
        "phpcs": "phpcs --standard=core/phpcs.xml.dist --runtime-set installed_paths $($COMPOSER_BINARY config vendor-dir)/drupal/coder/coder_sniffer --",
        "phpcbf": "phpcbf --standard=core/phpcs.xml.dist --runtime-set installed_paths $($COMPOSER_BINARY config vendor-dir)/drupal/coder/coder_sniffer --"
    },
+24 −24
Changes for composer.lock: 24 added lines, 24 removed lines.
Original line number Diff line number Diff line
@@ -946,14 +946,14 @@
            "authors": [
                {
                    "name": "Nicholas Humfrey",
                    "role": "Developer",
                    "email": "njh@aelius.com",
                    "homepage": "http://www.aelius.com/njh/"
                    "homepage": "http://www.aelius.com/njh/",
                    "role": "Developer"
                },
                {
                    "name": "Alexey Zakhlestin",
                    "role": "Developer",
                    "email": "indeyets@gmail.com"
                    "email": "indeyets@gmail.com",
                    "role": "Developer"
                }
            ],
            "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
@@ -3562,16 +3562,16 @@
        },
        {
            "name": "behat/mink-selenium2-driver",
            "version": "dev-master",
            "version": "1.3.x-dev",
            "source": {
                "type": "git",
                "url": "https://github.com/minkphp/MinkSelenium2Driver.git",
                "reference": "8684ee4e634db7abda9039ea53545f86fc1e105a"
                "reference": "0a09c4341621fca937a726827611b20ce3e2c259"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/8684ee4e634db7abda9039ea53545f86fc1e105a",
                "reference": "8684ee4e634db7abda9039ea53545f86fc1e105a",
                "url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/0a09c4341621fca937a726827611b20ce3e2c259",
                "reference": "0a09c4341621fca937a726827611b20ce3e2c259",
                "shasum": ""
            },
            "require": {
@@ -3598,15 +3598,15 @@
                "MIT"
            ],
            "authors": [
                {
                    "name": "Konstantin Kudryashov",
                    "email": "ever.zet@gmail.com",
                    "homepage": "http://everzet.com"
                },
                {
                    "name": "Pete Otaqui",
                    "email": "pete@otaqui.com",
                    "homepage": "https://github.com/pete-otaqui"
                },
                {
                    "name": "Konstantin Kudryashov",
                    "email": "ever.zet@gmail.com",
                    "homepage": "http://everzet.com"
                }
            ],
            "description": "Selenium2 (WebDriver) driver for Mink framework",
@@ -3619,7 +3619,7 @@
                "testing",
                "webdriver"
            ],
            "time": "2018-10-10T12:39:06+00:00"
            "time": "2019-09-02T09:46:54+00:00"
        },
        {
            "name": "composer/ca-bundle",
@@ -4420,18 +4420,18 @@
            "authors": [
                {
                    "name": "Arne Blankerts",
                    "role": "Developer",
                    "email": "arne@blankerts.de"
                    "email": "arne@blankerts.de",
                    "role": "Developer"
                },
                {
                    "name": "Sebastian Heuer",
                    "role": "Developer",
                    "email": "sebastian@phpeople.de"
                    "email": "sebastian@phpeople.de",
                    "role": "Developer"
                },
                {
                    "name": "Sebastian Bergmann",
                    "role": "Developer",
                    "email": "sebastian@phpunit.de"
                    "email": "sebastian@phpunit.de",
                    "role": "Developer"
                }
            ],
            "description": "Library for handling version information and constraints",
@@ -4790,8 +4790,8 @@
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "role": "lead",
                    "email": "sebastian@phpunit.de"
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Simple template engine.",
@@ -5594,8 +5594,8 @@
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "role": "lead",
                    "email": "sebastian@phpunit.de"
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Library that helps with managing the version number of Git-hosted PHP projects",

composer/Composer.php

0 → 100644
+81 −0
Changes for composer/Composer.php: 81 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Drupal\Composer;

use Composer\Composer as ComposerApp;
use Composer\Script\Event;
use Composer\Semver\Comparator;
use Drupal\Composer\Generator\PackageGenerator;
use Drupal\Composer\Generator\Util\DrupalCoreComposer;

/**
 * Provides static functions for composer script events. See also
 * core/lib/Drupal/Composer/Composer.php, which contains similar
 * scripts needed by projects that include drupal/core. Scripts that
 * are only needed by drupal/drupal go here.
 *
 * @see https://getcomposer.org/doc/articles/scripts.md
 */
class Composer {

  /**
   * Update metapackages whenever composer.lock is updated.
   *
   * @param \Composer\Script\Event $event
   */
  public static function generateMetapackages(Event $event) {
    $generator = new PackageGenerator();
    $generator->generate($event->getIO(), getcwd());
  }

  /**
   * Ensure that the minimum required version of Composer is running.
   * Throw an exception if Composer is too old.
   */
  public static function ensureComposerVersion() {
    $composerVersion = method_exists(ComposerApp::class, 'getVersion') ?
      ComposerApp::getVersion() : ComposerApp::VERSION;
    if (Comparator::lessThan($composerVersion, '1.9.0')) {
      throw new \RuntimeException("Drupal core development requires Composer 1.9.0, but Composer $composerVersion is installed. Please run 'composer self-update'.");
    }
  }

  /**
   * Ensure that the right version of behat/mink-selenium2-driver is locked.
   * Throw an exception if we do not have 1.3.x-dev.
   *
   * @todo: Remove this once https://www.drupal.org/node/3078671 is fixed.
   */
  public static function ensureBehatDriverVersions() {
    $drupalCoreComposer = DrupalCoreComposer::createFromPath(getcwd());

    $expectedVersion = '1.3.x-dev';
    $behatMinkSelenium2DriverInfo = $drupalCoreComposer->packageLockInfo('behat/mink-selenium2-driver', TRUE);
    if ($behatMinkSelenium2DriverInfo['version'] != $expectedVersion) {
      $drupalVersion = static::drupalVersionBranch();
      $message = <<< __EOT__
Drupal requires behat/mink-selenium2-driver:$expectedVersion in its composer.json
file, but it is pinned to {$behatMinkSelenium2DriverInfo['version']} in the composer.lock file.
This sometimes happens when Composer becomes confused. To fix:

1. `git checkout -- composer.lock`, or otherwise reset to a known-good lock file.
2. `rm -rf vendor`
3. `composer install`
4. `COMPOSER_ROOT_VERSION={$drupalVersion} composer update ...` (where ... is
   the update arguments you wish to run, e.g. --lock).
__EOT__;
      throw new \RuntimeException($message);
    }
  }

  /**
   * Return the branch name the current Drupal version is associated with.
   *
   * @return string
   *   A branch name, e.g. 8.9.x or 9.0.x.
   */
  public static function drupalVersionBranch() {
    return preg_replace('#\.[0-9]+-dev#', '.x-dev', \Drupal::VERSION);
  }

}
+68 −0
Changes for composer/Generator/Builder/DrupalCoreRecommendedBuilder.php: 68 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Drupal\Composer\Generator\Builder;

/**
 * Builder to produce metapackage for drupal/core-recommended.
 */
class DrupalCoreRecommendedBuilder extends DrupalPackageBuilder {

  /**
   * {@inheritdoc}
   */
  public function getPath() {
    return 'CoreRecommended';
  }

  /**
   * {@inheritdoc}
   */
  public function getPackage() {

    $composer = $this->initialPackageMetadata();

    // Pull up the composer lock data.
    $composerLockData = $this->drupalCoreInfo->composerLock();
    if (!isset($composerLockData['packages'])) {
      return $composer;
    }

    // Make a list of packages we do not want to put in the 'require' section.
    $remove_list = ['drupal/core', 'wikimedia/composer-merge-plugin'];

    // Copy the 'packages' section from the Composer lock into our 'require'
    // section. There is also a 'packages-dev' section, but we do not need
    // to pin 'require-dev' versions, as 'require-dev' dependencies are never
    // included from subprojects. Use 'drupal/core-dev-dependencies' to get
    // Drupal's dev dependencies.
    foreach ($composerLockData['packages'] as $package) {
      // If there is no 'source' record, then this is a path repository
      // or something else that we do not want to include.
      if (isset($package['source']) && !in_array($package['name'], $remove_list)) {
        $composer['require'][$package['name']] = $package['version'];
      }
    }
    return $composer;
  }

  /**
   * 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",
      ],
    ];
  }

}
+62 −0
Changes for composer/Generator/Builder/DrupalDevDependenciesBuilder.php: 62 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Drupal\Composer\Generator\Builder;

/**
 * Builder to produce metapackage for drupal/dev-dependencies.
 */
class DrupalDevDependenciesBuilder extends DrupalPackageBuilder {

  /**
   * {@inheritdoc}
   */
  public function getPath() {
    return 'DevDependencies';
  }

  /**
   * {@inheritdoc}
   */
  public function getPackage() {

    $composer = $this->initialPackageMetadata();

    // 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';
    }

    // Do the same sort of conversion for behat/mink-selenium2-driver.
    if (isset($composer['require']['behat/mink-selenium2-driver']) && ($composer['require']['behat/mink-selenium2-driver'] == '1.3.x-dev')) {
      $composer['require']['behat/mink-selenium2-driver'] = '1.4.0 | 1.3.1.1 | 1.3.x-dev';
    }

    // Sort our required packages by key.
    ksort($composer['require']);

    return $composer;
  }

  /**
   * 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" => "*",
      ],
    ];
  }

}
Loading