Skip to content

Commit

Permalink
Merge pull request #49 from boesing/qa/remove-composer-v1
Browse files Browse the repository at this point in the history
Removal: remove support for composer v1
  • Loading branch information
boesing authored Jul 3, 2022
2 parents aea0a9c + 88899f5 commit b18208d
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 94 deletions.
10 changes: 0 additions & 10 deletions .laminas-ci.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@
{
"additional_checks": [
{
"name": "PHPUnit using Composer v1",
"job": {
"command": "rm -r vendor/ && composer require --dev --update-with-all-dependencies composer/composer:^1 && xmlstarlet ed -u '/phpunit/@convertDeprecationsToExceptions' -v 'false' phpunit.xml.dist > phpunit.xml && vendor/bin/phpunit",
"php": "*",
"dependencies": "*"
}
}
],
"ignore_php_platform_requirements": {
"8.0": false
}
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
},
"require": {
"php": "^7.4 || ~8.0.0 || ~8.1.0",
"composer-plugin-api": "^1.0 || ^2.0"
"composer-plugin-api": "^2.0"
},
"require-dev": {
"composer/composer": "^2.3",
Expand Down
4 changes: 2 additions & 2 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 0 additions & 27 deletions src/PackageProvider/ComposerV1.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
/**
* @internal
*/
final class ComposerV2 implements PackageProviderDetectionInterface
final class InstalledRepositoryPackageProvider implements PackageProviderDetectionInterface
{
private InstalledRepository $installedRepository;

Expand Down
30 changes: 4 additions & 26 deletions src/PackageProvider/PackageProviderDetectionFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
use Composer\Composer;
use Composer\Installer\PackageEvent;
use Composer\IO\NullIO;
use Composer\Plugin\PluginInterface;
use Composer\Repository\CompositeRepository;
use Composer\Repository\InstalledArrayRepository;
use Composer\Repository\InstalledRepository;
Expand All @@ -16,41 +15,27 @@
use Composer\Repository\RepositoryInterface as ComposerRepositoryInterface;
use Composer\Repository\RootPackageRepository;

use function version_compare;

/**
* @internal
*/
final class PackageProviderDetectionFactory implements PackageProviderDetectionFactoryInterface
{
private Composer $composer;
private ?RootPackageRepository $packageRepository = null;
private RootPackageRepository $packageRepository;

public function __construct(Composer $composer)
{
$this->composer = $composer;
if (false === self::isComposerV1()) {
$this->packageRepository = new RootPackageRepository($composer->getPackage());
}
$this->composer = $composer;
$this->packageRepository = new RootPackageRepository($composer->getPackage());
}

public static function create(Composer $composer): self
{
return new self($composer);
}

public static function isComposerV1(): bool
{
return version_compare(PluginInterface::PLUGIN_API_VERSION, '2.0.0', '<') === true;
}

public function detect(PackageEvent $event, string $packageName): PackageProviderDetectionInterface
{
if (self::isComposerV1()) {
/** @psalm-suppress UndefinedMethod,MixedArgument Yes, the method does not exist when psalm is running. */
return new ComposerV1($event->getPool());
}

$installedRepo = new InstalledRepository($this->prepareRepositoriesForInstalledRepository());
$defaultRepos = new CompositeRepository(RepositoryFactory::defaultRepos(new NullIO()));

Expand All @@ -61,7 +46,7 @@ public function detect(PackageEvent $event, string $packageName): PackageProvide
$installedRepo->addRepository(new InstalledArrayRepository([clone $match]));
}

return new ComposerV2($installedRepo);
return new InstalledRepositoryPackageProvider($installedRepo);
}

/**
Expand All @@ -72,13 +57,6 @@ private function prepareRepositoriesForInstalledRepository(): array
/** @var array<string,string|false> $platformOverrides */
$platformOverrides = $this->composer->getConfig()->get('platform') ?? [];

if (null === $this->packageRepository) {
return [
$this->composer->getRepositoryManager()->getLocalRepository(),
new PlatformRepository([], $platformOverrides),
];
}

return [
$this->packageRepository,
$this->composer->getRepositoryManager()->getLocalRepository(),
Expand Down
51 changes: 24 additions & 27 deletions test/ComponentInstallerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,16 @@
use Composer\DependencyResolver\Operation\UninstallOperation;
use Composer\DependencyResolver\Operation\UpdateOperation;
use Composer\DependencyResolver\Pool;
use Composer\Installer\InstallationManager;
use Composer\Installer\PackageEvent;
use Composer\IO\IOInterface;
use Composer\Package\PackageInterface;
use Composer\Package\RootPackage;
use Composer\Repository\InstalledRepositoryInterface;
use Composer\Repository\RepositoryManager;
use Composer\Repository\RootPackageRepository;
use Generator;
use Laminas\ComponentInstaller\ComponentInstaller;
use Laminas\ComponentInstaller\PackageProvider\PackageProviderDetectionFactory;
use LaminasTest\ComponentInstaller\TestAsset\NativeTypehintedInstallationManager as InstallationManager;
use LaminasTest\ComponentInstaller\TestAsset\NativeTypehintedPackageInterface as PackageInterface;
use org\bovigo\vfs\vfsStream;
use org\bovigo\vfs\vfsStreamDirectory;
use PHPUnit\Framework\MockObject\MockObject;
Expand Down Expand Up @@ -103,30 +102,28 @@ protected function setUp(): void
$io = $this->createMock(IOInterface::class);
$this->io = $io;

if (false === PackageProviderDetectionFactory::isComposerV1()) {
$config = $this->createMock(Config::class);
$this->composer
->method('getConfig')
->willReturn($config);
$repositoryManager = $this->createMock(RepositoryManager::class);
$localRepository = $this->createMock(InstalledRepositoryInterface::class);
$localRepository
->method('getPackages')
->willReturn([]);
$repositoryManager
->method('getLocalRepository')
->willReturn($localRepository);
$this->composer
->method('getRepositoryManager')
->willReturn($repositoryManager);

$this->rootPackage
->method('setRepository')
->with(self::callback(static function (object $repository): bool {
self::assertInstanceOf(RootPackageRepository::class, $repository);
return true;
}));
}
$config = $this->createMock(Config::class);
$this->composer
->method('getConfig')
->willReturn($config);
$repositoryManager = $this->createMock(RepositoryManager::class);
$localRepository = $this->createMock(InstalledRepositoryInterface::class);
$localRepository
->method('getPackages')
->willReturn([]);
$repositoryManager
->method('getLocalRepository')
->willReturn($localRepository);
$this->composer
->method('getRepositoryManager')
->willReturn($repositoryManager);

$this->rootPackage
->method('setRepository')
->with(self::callback(static function (object $repository): bool {
self::assertInstanceOf(RootPackageRepository::class, $repository);
return true;
}));

$this->composer
->method('getPackage')
Expand Down

0 comments on commit b18208d

Please sign in to comment.