From 9b9a62741325d9f9882daef9514c474d0365d9be Mon Sep 17 00:00:00 2001 From: Dane Powell Date: Mon, 14 Dec 2020 14:40:11 -0800 Subject: [PATCH] DX-3021: Fix #4292: Check for Composer 2 instead of prestissimo (#4296) * DX-3021: Fix #4292: Check for Composer 2 instead of prestissimo * Fix tests --- src/Robo/Doctor/ComposerCheck.php | 38 +++++++++++++------------------ src/Robo/Inspector/Inspector.php | 18 +++++++++++++++ 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/Robo/Doctor/ComposerCheck.php b/src/Robo/Doctor/ComposerCheck.php index d23f016af..86c7c272c 100644 --- a/src/Robo/Doctor/ComposerCheck.php +++ b/src/Robo/Doctor/ComposerCheck.php @@ -27,6 +27,15 @@ class ComposerCheck extends DoctorCheck { /** * DoctorCheck constructor. + * + * @param \Robo\Config\Config $config + * Robo config. + * @param \Acquia\Blt\Robo\Inspector\Inspector $inspector + * BLT inspector. + * @param \Acquia\Blt\Robo\Common\Executor $executor + * BLT executor. + * @param array $drush_status + * Drush status. */ public function __construct(Config $config, Inspector $inspector, Executor $executor, array $drush_status) { parent::__construct($config, $inspector, $executor, $drush_status); @@ -73,8 +82,7 @@ protected function setComposerLock() { */ public function performAllChecks() { $this->checkRequire(); - $this->checkPrestissimo(); - $this->checkDrupalCore(); + $this->checkVersion(); return $this->problems; } @@ -93,27 +101,13 @@ protected function checkRequire() { } /** - * Check prestissimo. - */ - protected function checkPrestissimo() { - $prestissimo_intalled = $this->getExecutor()->execute("composer global show | grep hirak/prestissimo")->run()->wasSuccessful(); - if (!$prestissimo_intalled) { - $this->logProblem(__FUNCTION__ . ":plugins", [ - "hirak/prestissimo plugin for composer is not installed.", - " Run composer global require hirak/prestissimo to install it.", - " This will improve composer install/update performance by parallelizing the download of dependency information.", - ], 'comment'); - } - } - - /** - * Check Drupal core. + * Check Composer version. */ - protected function checkDrupalCore() { - if (empty($this->composerJson['require']['drupal/core']) && empty($this->composerJson['require']['drupal/core-recommended'])) { - $this->logProblem(__FUNCTION__ . ":plugins", [ - "drupal/core or drupal/core-recommended are not required by the root composer.json.", - " This impairs performance by preventing zaporylie/composer-drupal-optimizations from taking effect.", + protected function checkVersion() { + if (!$this->getInspector()->isComposerMinimumVersionSatisfied('2')) { + $this->logProblem(__FUNCTION__, [ + "Composer 1 detected.", + " Composer 1 is end of life, and Composer 2 includes significant performance improvements. Upgrade to Composer 2 as soon as possible.", ], 'comment'); } } diff --git a/src/Robo/Inspector/Inspector.php b/src/Robo/Inspector/Inspector.php index 0e5987b71..328701d36 100644 --- a/src/Robo/Inspector/Inspector.php +++ b/src/Robo/Inspector/Inspector.php @@ -599,6 +599,24 @@ public function getComposerVersion() { return $version; } + /** + * Verifies that installed minimum Composer version is met. + * + * @param string $minimum_version + * The minimum Composer version that is required. + * + * @return bool + * TRUE if minimum version is satisfied. + */ + public function isComposerMinimumVersionSatisfied($minimum_version) { + // phpcs:ignore + exec("composer --version | cut -d' ' -f3", $output, $exit_code); + if (version_compare($output[0], $minimum_version, '>=')) { + return TRUE; + } + return FALSE; + } + /** * Checks to see if BLT alias is installed on CLI. *