From fff576ac850c045158a250e7e27666e146e78d18 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Tue, 17 Aug 2021 15:43:45 +0200 Subject: [PATCH] Fix more deprecations warnings and fix edge case when Composer 2 is in vendor but project was installed with Composer 1, fixes #27 --- src/PackageVersions/Installer.php | 25 +++++- src/PackageVersions/Versions.php | 23 ++++- test/PackageVersionsTest/InstallerTest.php | 100 +++++++++++++++++++-- 3 files changed, 137 insertions(+), 11 deletions(-) diff --git a/src/PackageVersions/Installer.php b/src/PackageVersions/Installer.php index 35f864d..37eb73b 100644 --- a/src/PackageVersions/Installer.php +++ b/src/PackageVersions/Installer.php @@ -82,7 +82,7 @@ private function __construct() */ public static function rootPackageName() : string { - if (!class_exists(InstalledVersions::class, false) || !(method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (!self::composer2ApiUsable()) { return self::ROOT_PACKAGE_NAME; } @@ -100,7 +100,7 @@ public static function rootPackageName() : string */ public static function getVersion(string $packageName): string { - if (class_exists(InstalledVersions::class, false) && (method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (self::composer2ApiUsable()) { return InstalledVersions::getPrettyVersion($packageName) . '@' . InstalledVersions::getReference($packageName); } @@ -113,6 +113,27 @@ public static function getVersion(string $packageName): string 'Required package "' . $packageName . '" is not installed: check your ./vendor/composer/installed.json and/or ./composer.lock files' ); } + + private static function composer2ApiUsable(): bool + { + if (!class_exists(InstalledVersions::class, false)) { + return false; + } + + if (method_exists(InstalledVersions::class, 'getAllRawData')) { + $rawData = InstalledVersions::getAllRawData(); + if (count($rawData) === 1 && count($rawData[0]) === 0) { + return false; + } + } else { + $rawData = InstalledVersions::getRawData(); + if ($rawData === []) { + return false; + } + } + + return true; + } } PHP; diff --git a/src/PackageVersions/Versions.php b/src/PackageVersions/Versions.php index e1cca5d..b3c5cd7 100644 --- a/src/PackageVersions/Versions.php +++ b/src/PackageVersions/Versions.php @@ -54,7 +54,7 @@ public static function rootPackageName() : string */ public static function getVersion(string $packageName): string { - if (!class_exists(InstalledVersions::class, false) || !InstalledVersions::getRawData()) { + if (!self::composer2ApiUsable()) { return FallbackVersions::getVersion($packageName); } @@ -68,4 +68,25 @@ public static function getVersion(string $packageName): string return InstalledVersions::getPrettyVersion($packageName) . '@' . InstalledVersions::getReference($packageName); } + + private static function composer2ApiUsable(): bool + { + if (!class_exists(InstalledVersions::class, false)) { + return false; + } + + if (method_exists(InstalledVersions::class, 'getAllRawData')) { + $rawData = InstalledVersions::getAllRawData(); + if (count($rawData) === 1 && count($rawData[0]) === 0) { + return false; + } + } else { + $rawData = InstalledVersions::getRawData(); + if ($rawData === []) { + return false; + } + } + + return true; + } } diff --git a/test/PackageVersionsTest/InstallerTest.php b/test/PackageVersionsTest/InstallerTest.php index 870dbc8..83278fc 100644 --- a/test/PackageVersionsTest/InstallerTest.php +++ b/test/PackageVersionsTest/InstallerTest.php @@ -315,7 +315,7 @@ private function __construct() */ public static function rootPackageName() : string { - if (!class_exists(InstalledVersions::class, false) || !(method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (!self::composer2ApiUsable()) { return self::ROOT_PACKAGE_NAME; } @@ -333,7 +333,7 @@ public static function rootPackageName() : string */ public static function getVersion(string $packageName): string { - if (class_exists(InstalledVersions::class, false) && (method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (self::composer2ApiUsable()) { return InstalledVersions::getPrettyVersion($packageName) . '@' . InstalledVersions::getReference($packageName); } @@ -346,6 +346,27 @@ public static function getVersion(string $packageName): string 'Required package "' . $packageName . '" is not installed: check your ./vendor/composer/installed.json and/or ./composer.lock files' ); } + + private static function composer2ApiUsable(): bool + { + if (!class_exists(InstalledVersions::class, false)) { + return false; + } + + if (method_exists(InstalledVersions::class, 'getAllRawData')) { + $rawData = InstalledVersions::getAllRawData(); + if (count($rawData) === 1 && count($rawData[0]) === 0) { + return false; + } + } else { + $rawData = InstalledVersions::getRawData(); + if ($rawData === []) { + return false; + } + } + + return true; + } } PHP; @@ -463,7 +484,7 @@ private function __construct() */ public static function rootPackageName() : string { - if (!class_exists(InstalledVersions::class, false) || !(method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (!self::composer2ApiUsable()) { return self::ROOT_PACKAGE_NAME; } @@ -481,7 +502,7 @@ public static function rootPackageName() : string */ public static function getVersion(string $packageName): string { - if (class_exists(InstalledVersions::class, false) && (method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (self::composer2ApiUsable()) { return InstalledVersions::getPrettyVersion($packageName) . '@' . InstalledVersions::getReference($packageName); } @@ -494,6 +515,27 @@ public static function getVersion(string $packageName): string 'Required package "' . $packageName . '" is not installed: check your ./vendor/composer/installed.json and/or ./composer.lock files' ); } + + private static function composer2ApiUsable(): bool + { + if (!class_exists(InstalledVersions::class, false)) { + return false; + } + + if (method_exists(InstalledVersions::class, 'getAllRawData')) { + $rawData = InstalledVersions::getAllRawData(); + if (count($rawData) === 1 && count($rawData[0]) === 0) { + return false; + } + } else { + $rawData = InstalledVersions::getRawData(); + if ($rawData === []) { + return false; + } + } + + return true; + } } PHP; @@ -615,7 +657,7 @@ private function __construct() */ public static function rootPackageName() : string { - if (!class_exists(InstalledVersions::class, false) || !(method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (!self::composer2ApiUsable()) { return self::ROOT_PACKAGE_NAME; } @@ -633,7 +675,7 @@ public static function rootPackageName() : string */ public static function getVersion(string $packageName): string { - if (class_exists(InstalledVersions::class, false) && (method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (self::composer2ApiUsable()) { return InstalledVersions::getPrettyVersion($packageName) . '@' . InstalledVersions::getReference($packageName); } @@ -646,6 +688,27 @@ public static function getVersion(string $packageName): string 'Required package "' . $packageName . '" is not installed: check your ./vendor/composer/installed.json and/or ./composer.lock files' ); } + + private static function composer2ApiUsable(): bool + { + if (!class_exists(InstalledVersions::class, false)) { + return false; + } + + if (method_exists(InstalledVersions::class, 'getAllRawData')) { + $rawData = InstalledVersions::getAllRawData(); + if (count($rawData) === 1 && count($rawData[0]) === 0) { + return false; + } + } else { + $rawData = InstalledVersions::getRawData(); + if ($rawData === []) { + return false; + } + } + + return true; + } } PHP; @@ -1058,7 +1121,7 @@ private function __construct() */ public static function rootPackageName() : string { - if (!class_exists(InstalledVersions::class, false) || !(method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (!self::composer2ApiUsable()) { return self::ROOT_PACKAGE_NAME; } @@ -1076,7 +1139,7 @@ public static function rootPackageName() : string */ public static function getVersion(string $packageName): string { - if (class_exists(InstalledVersions::class, false) && (method_exists(InstalledVersions::class, 'getAllRawData') ? InstalledVersions::getAllRawData() : InstalledVersions::getRawData())) { + if (self::composer2ApiUsable()) { return InstalledVersions::getPrettyVersion($packageName) . '@' . InstalledVersions::getReference($packageName); } @@ -1089,6 +1152,27 @@ public static function getVersion(string $packageName): string 'Required package "' . $packageName . '" is not installed: check your ./vendor/composer/installed.json and/or ./composer.lock files' ); } + + private static function composer2ApiUsable(): bool + { + if (!class_exists(InstalledVersions::class, false)) { + return false; + } + + if (method_exists(InstalledVersions::class, 'getAllRawData')) { + $rawData = InstalledVersions::getAllRawData(); + if (count($rawData) === 1 && count($rawData[0]) === 0) { + return false; + } + } else { + $rawData = InstalledVersions::getRawData(); + if ($rawData === []) { + return false; + } + } + + return true; + } } PHP;