diff --git a/composer.json b/composer.json index 35d626b..0d88319 100644 --- a/composer.json +++ b/composer.json @@ -11,12 +11,12 @@ ], "require": { "php": "^7.4.0", - "composer-plugin-api": "^1.1.0" + "composer-plugin-api": "^1.1.0 || ^2.0" }, "require-dev": { "phpunit/phpunit": "^9.0.1", "infection/infection": "^0.15.3", - "composer/composer": "^1.9.3", + "composer/composer": "^1.9.3 || ^2.0@dev", "ext-zip": "^1.15.0", "doctrine/coding-standard": "^7.0.2", "vimeo/psalm": "^3.9.3" diff --git a/src/PackageVersions/FallbackVersions.php b/src/PackageVersions/FallbackVersions.php index 7c20e41..5bbf4c8 100644 --- a/src/PackageVersions/FallbackVersions.php +++ b/src/PackageVersions/FallbackVersions.php @@ -78,7 +78,13 @@ private static function getPackageData() : array $data = json_decode(file_get_contents($path), true); switch (basename($path)) { case 'installed.json': - $packageData[] = $data; + // composer 2.x installed.json format + if (isset($data['packages'])) { + $packageData[] = $data['packages']; + } else { + // composer 1.x installed.json format + $packageData[] = $data; + } break; case 'composer.lock': $packageData[] = $data['packages'] + ($data['packages-dev'] ?? []); diff --git a/src/PackageVersions/Installer.php b/src/PackageVersions/Installer.php index 4ebd24e..f53c9f5 100644 --- a/src/PackageVersions/Installer.php +++ b/src/PackageVersions/Installer.php @@ -87,6 +87,16 @@ public function activate(Composer $composer, IOInterface $io) : void // Nothing to do here, as all features are provided through event listeners } + public function deactivate(Composer $composer, IOInterface $io) : void + { + // Nothing to do here, as all features are provided through event listeners + } + + public function uninstall(Composer $composer, IOInterface $io) : void + { + // Nothing to do here, as all features are provided through event listeners + } + /** * {@inheritDoc} */ diff --git a/test/PackageVersionsTest/FallbackVersionsTest.php b/test/PackageVersionsTest/FallbackVersionsTest.php index b2419b1..dbe003c 100644 --- a/test/PackageVersionsTest/FallbackVersionsTest.php +++ b/test/PackageVersionsTest/FallbackVersionsTest.php @@ -73,6 +73,10 @@ public function testValidVersionsWithoutComposerLock() : void public function testValidVersionsWithoutInstalledJson() : void { $packages = json_decode(file_get_contents(__DIR__ . '/../../vendor/composer/installed.json'), true); + // normalize composer 2.x installed.json format to the 1.x one + if (isset($packages['packages'])) { + $packages = $packages['packages']; + } if ($packages === []) { // In case of --no-dev flag