From d4c3192e1f83140136ab3e85aef67853e5837fa8 Mon Sep 17 00:00:00 2001 From: Andreas Schempp Date: Thu, 19 Jun 2025 11:43:57 +0200 Subject: [PATCH 1/2] Prepend artifacts repository after all providers but set canonical=false --- src/Composer/ArtifactsPlugin.php | 29 +++++++++++--------------- tests/Composer/ArtifactsPluginTest.php | 29 +++++++++++++++++++------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/Composer/ArtifactsPlugin.php b/src/Composer/ArtifactsPlugin.php index 5fd9952..d403d80 100644 --- a/src/Composer/ArtifactsPlugin.php +++ b/src/Composer/ArtifactsPlugin.php @@ -50,9 +50,14 @@ public function activate(Composer $composer, IOInterface $io): void return; } - $this->artifacts = $this->addArtifactRepository($composer, $packagesDir); - - if (null === $this->artifacts) { + $artifactsConfig = ['type' => 'artifact', 'url' => $packagesDir, 'canonical' => false]; + $this->artifacts = $composer + ->getRepositoryManager() + ->createRepository('artifact', $artifactsConfig) + ; + + if (empty($this->artifacts->getPackages())) { + $this->artifacts = null; return; } @@ -63,6 +68,10 @@ public function activate(Composer $composer, IOInterface $io): void } $this->registerProviders($requires); + + // Prepend the artifacts repository after all providers + $composer->getRepositoryManager()->prependRepository($this->artifacts); + $composer->getConfig()->merge(['repositories' => [$artifactsConfig]]); } public function deactivate(Composer $composer, IOInterface $io): void @@ -104,20 +113,6 @@ public static function getSubscribedEvents(): array ]; } - private function addArtifactRepository(Composer $composer, string $repositoryUrl): ?RepositoryInterface - { - $repository = $composer->getRepositoryManager()->createRepository('artifact', ['url' => $repositoryUrl]); - - if (empty($repository->getPackages())) { - return null; - } - - $composer->getRepositoryManager()->prependRepository($repository); - $composer->getConfig()->merge(['repositories' => [['type' => 'artifact', 'url' => $repositoryUrl]]]); - - return $repository; - } - private function registerProviders(array $requires): void { $versionParser = new VersionParser(); diff --git a/tests/Composer/ArtifactsPluginTest.php b/tests/Composer/ArtifactsPluginTest.php index f2b9b18..756afad 100644 --- a/tests/Composer/ArtifactsPluginTest.php +++ b/tests/Composer/ArtifactsPluginTest.php @@ -49,7 +49,7 @@ public function testAddsArtifactsRepositoryFromComposerDir(): void $repositoryManager ->expects($this->once()) ->method('createRepository') - ->with('artifact', ['url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages']) + ->with('artifact', ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages', 'canonical' => false]) ->willReturn($repository) ; @@ -70,6 +70,7 @@ public function testAddsArtifactsRepositoryFromComposerDir(): void [ 'type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages', + 'canonical' => false, ], ], ]) @@ -93,7 +94,7 @@ public function testAddsArtifactsRepositoryFromDataDir(): void $repositoryManager ->expects($this->once()) ->method('createRepository') - ->with('artifact', ['url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages']) + ->with('artifact', ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages', 'canonical' => false]) ->willReturn($repository) ; @@ -112,6 +113,7 @@ public function testAddsArtifactsRepositoryFromDataDir(): void [ 'type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages', + 'canonical' => false, ], ], ]) @@ -162,7 +164,7 @@ public function testDoesNotAddArtifactsRepositoryIfItHasNoPackages(): void $repositoryManager ->expects($this->once()) ->method('createRepository') - ->with('artifact', ['url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages']) + ->with('artifact', ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages', 'canonical' => false]) ->willReturn($repository) ; @@ -190,8 +192,8 @@ public function testRegistersContaoProviders(): void putenv('COMPOSER='.__DIR__.'/../Fixtures/Composer/artifact-data/composer.json'); $repositories = [ - ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages'], ['type' => 'vcs', 'url' => 'https://example.org/'], + ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages', 'canonical' => false], ]; $config = $this->mockConfig(null); @@ -323,7 +325,6 @@ public function testDoesNotRegisterDuplicateRepositories(): void ->expects($this->exactly(2)) ->method('merge') ->withConsecutive( - [$this->arrayHasKey('repositories')], [ $this->logicalAnd( $this->arrayHasKey('repositories'), @@ -334,7 +335,19 @@ public function testDoesNotRegisterDuplicateRepositories(): void ]], ]) ), - ] + ], + [ + $this->logicalAnd( + $this->arrayHasKey('repositories'), + $this->equalTo([ + 'repositories' => [[ + 'type' => 'artifact', + 'url' => __DIR__.'/../Fixtures/Composer/provider-data/contao-manager/packages', + 'canonical' => false, + ]], + ]) + ) + ], ) ; @@ -391,8 +404,8 @@ public function testDoesNotRegisterDuplicateRepositories(): void public function testCorrectlyHandlesMultiplePackagesAndProviders(): void { $repositories = [ - ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/provider-data/contao-manager/packages'], ['type' => 'vcs', 'url' => 'https://example.org/'], + ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/provider-data/contao-manager/packages', 'canonical' => false], ]; $config = $this->mockConfig(__DIR__.'/../Fixtures/Composer/provider-data/contao-manager'); @@ -487,7 +500,7 @@ public function testRegistersContaoProvidersFromRequireCommand(): void putenv('COMPOSER='.__DIR__.'/../Fixtures/Composer/artifact-data/composer.json'); $repositories = [ - ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages'], + ['type' => 'artifact', 'url' => __DIR__.'/../Fixtures/Composer/artifact-data/contao-manager/packages', 'canonical' => false], ['type' => 'vcs', 'url' => 'https://example.org/'], ]; From 9e11fed59f862bee5bb70d873ee12d683a4b86f1 Mon Sep 17 00:00:00 2001 From: Andreas Schempp Date: Thu, 26 Jun 2025 13:48:15 +0200 Subject: [PATCH 2/2] CS --- src/Composer/ArtifactsPlugin.php | 1 + tests/Composer/ArtifactsPluginTest.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Composer/ArtifactsPlugin.php b/src/Composer/ArtifactsPlugin.php index d403d80..9674834 100644 --- a/src/Composer/ArtifactsPlugin.php +++ b/src/Composer/ArtifactsPlugin.php @@ -58,6 +58,7 @@ public function activate(Composer $composer, IOInterface $io): void if (empty($this->artifacts->getPackages())) { $this->artifacts = null; + return; } diff --git a/tests/Composer/ArtifactsPluginTest.php b/tests/Composer/ArtifactsPluginTest.php index 756afad..2fad8db 100644 --- a/tests/Composer/ArtifactsPluginTest.php +++ b/tests/Composer/ArtifactsPluginTest.php @@ -346,7 +346,7 @@ public function testDoesNotRegisterDuplicateRepositories(): void 'canonical' => false, ]], ]) - ) + ), ], ) ;