Skip to content

Commit 38e5c04

Browse files
bug #704 Don't filter locked packages (nicolas-grekas)
This PR was merged into the 1.9-dev branch. Discussion ---------- Don't filter locked packages As hinted in composer/composer#9290 (comment) Commits ------- 3705322 Don't filter locked packages
2 parents 7335ec0 + 3705322 commit 38e5c04

File tree

5 files changed

+66
-53
lines changed

5 files changed

+66
-53
lines changed

src/Flex.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -863,7 +863,7 @@ public function truncatePackages(PrePoolCreateEvent $event)
863863
if (!$this->filter) {
864864
return;
865865
}
866-
$event->setPackages($this->filter->removeLegacyPackages($event->getPackages()));
866+
$event->setPackages($this->filter->removeLegacyPackages($event->getPackages(), $event->getRequest()->getFixedOrLockedPackages()));
867867
}
868868

869869
private function initOptions(): Options

src/PackageFilter.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,24 @@ public function __construct(IOInterface $io, string $symfonyRequire, Downloader
4040

4141
/**
4242
* @param PackageInterface[] $data
43+
* @param PackageInterface[] $lockedPackages
4344
*
4445
* @return PackageInterface[]
4546
*/
46-
public function removeLegacyPackages(array $data): array
47+
public function removeLegacyPackages(array $data, array $lockedPackages): array
4748
{
4849
if (!$this->symfonyConstraints || !$data) {
4950
return $data;
5051
}
5152

53+
$lockedVersions = [];
54+
foreach ($lockedPackages as $package) {
55+
$lockedVersions[$package->getName()] = [$package->getVersion()];
56+
if ($package instanceof AliasPackage) {
57+
$lockedVersions[$package->getName()][] = $package->getAliasOf()->getVersion();
58+
}
59+
}
60+
5261
$knownVersions = $this->getVersions();
5362
$filteredPackages = [];
5463
$symfonyPackages = [];
@@ -59,7 +68,7 @@ public function removeLegacyPackages(array $data): array
5968
if ($package instanceof AliasPackage) {
6069
$versions[] = $package->getAliasOf()->getVersion();
6170
}
62-
if ('symfony/symfony' !== $name && !isset($knownVersions['splits'][$name])) {
71+
if ('symfony/symfony' !== $name && (!isset($knownVersions['splits'][$name]) || array_intersect($versions, $lockedVersions[$name] ?? []))) {
6372
$filteredPackages[] = $package;
6473
continue;
6574
}

tests/CacheTest.php

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function provideRemoveLegacyTags()
3939
return [
4040
'extra' => [
4141
'branch-alias' => [
42-
'dev-master' => $versionAlias.'-dev',
42+
'dev-main' => $versionAlias.'-dev',
4343
],
4444
],
4545
];
@@ -50,18 +50,14 @@ public function provideRemoveLegacyTags()
5050
'1.0.0' => [],
5151
],
5252
'symfony/symfony' => [
53-
'3.3.0' => [
54-
'version_normalized' => '3.3.0.0',
55-
],
56-
'3.4.0' => [
57-
'version_normalized' => '3.4.0.0',
58-
],
59-
'dev-master' => $branchAlias('3.5'),
53+
'3.3.0' => ['version_normalized' => '3.3.0.0'],
54+
'3.4.0' => ['version_normalized' => '3.4.0.0'],
55+
'dev-main' => $branchAlias('3.5'),
6056
],
6157
'symfony/foo' => [
6258
'3.3.0' => ['version_normalized' => '3.3.0.0'],
6359
'3.4.0' => ['version_normalized' => '3.4.0.0'],
64-
'dev-master' => $branchAlias('3.5'),
60+
'dev-main' => $branchAlias('3.5'),
6561
],
6662
];
6763

@@ -83,19 +79,17 @@ public function provideRemoveLegacyTags()
8379
unset($expected['symfony/symfony']['3.4.0']);
8480
unset($expected['symfony/foo']['3.4.0']);
8581

86-
yield 'master-only' => [$expected, $packages, '~3.5', ['splits' => [
82+
yield 'main-only' => [$expected, $packages, '~3.5', ['splits' => [
8783
'symfony/foo' => ['3.4', '3.5'],
8884
]]];
8985

9086
$packages = [
9187
'symfony/symfony' => [
92-
'2.8.0' => [
93-
'version_normalized' => '2.8.0.0',
94-
],
88+
'2.8.0' => ['version_normalized' => '2.8.0.0'],
9589
],
9690
'symfony/legacy' => [
9791
'2.8.0' => ['version_normalized' => '2.8.0.0'],
98-
'dev-master' => $branchAlias('2.8'),
92+
'dev-main' => $branchAlias('2.8'),
9993
],
10094
];
10195

@@ -106,25 +100,23 @@ public function provideRemoveLegacyTags()
106100

107101
$packages = [
108102
'symfony/symfony' => [
109-
'2.8.0' => [
110-
'version_normalized' => '2.8.0.0',
111-
],
112-
'dev-master' => $branchAlias('3.0'),
103+
'2.8.0' => ['version_normalized' => '2.8.0.0'],
104+
'dev-main' => $branchAlias('3.0'),
113105
],
114106
'symfony/foo' => [
115107
'2.8.0' => ['version_normalized' => '2.8.0.0'],
116-
'dev-master' => $branchAlias('3.0'),
108+
'dev-main' => $branchAlias('3.0'),
117109
],
118110
'symfony/new' => [
119-
'dev-master' => $branchAlias('3.0'),
111+
'dev-main' => $branchAlias('3.0'),
120112
],
121113
];
122114

123115
$expected = $packages;
124-
unset($expected['symfony/symfony']['dev-master']);
125-
unset($expected['symfony/foo']['dev-master']);
116+
unset($expected['symfony/symfony']['dev-main']);
117+
unset($expected['symfony/foo']['dev-main']);
126118

127-
yield 'master-is-filtered-only-when-in-range' => [$expected, $packages, '~2.8', ['splits' => [
119+
yield 'main-is-filtered-only-when-in-range' => [$expected, $packages, '~2.8', ['splits' => [
128120
'symfony/foo' => ['2.8', '3.0'],
129121
'symfony/new' => ['3.0'],
130122
]]];

tests/FlexTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function testPostInstall()
4949
'Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle' => ['all'],
5050
],
5151
],
52-
'origin' => 'dummy/dummy:[email protected]/symfony/recipes:master',
52+
'origin' => 'dummy/dummy:[email protected]/symfony/recipes:main',
5353
],
5454
],
5555
'locks' => [
@@ -87,7 +87,7 @@ public function testPostInstall()
8787
<<<EOF
8888
8989
Symfony operations: 1 recipe ()
90-
- Configuring dummy/dummy (>=1.0): From github.com/symfony/recipes:master
90+
- Configuring dummy/dummy (>=1.0): From github.com/symfony/recipes:main
9191
9292
EOF
9393
,

tests/PackageFilterTest.php

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class PackageFilterTest extends TestCase
2323
/**
2424
* @dataProvider provideRemoveLegacyPackages
2525
*/
26-
public function testRemoveLegacyPackages(array $expected, array $packages, string $symfonyRequire, array $versions)
26+
public function testRemoveLegacyPackages(array $expected, array $packages, string $symfonyRequire, array $versions, array $lockedPackages = [])
2727
{
2828
$downloader = $this->getMockBuilder('Symfony\Flex\Downloader')->disableOriginalConstructor()->getMock();
2929
$downloader->expects($this->once())
@@ -51,8 +51,9 @@ public function testRemoveLegacyPackages(array $expected, array $packages, strin
5151

5252
$expected = $configToPackage($expected);
5353
$packages = $configToPackage($packages);
54+
$lockedPackages = $configToPackage($lockedPackages);
5455

55-
$actual = $filter->removeLegacyPackages($packages);
56+
$actual = $filter->removeLegacyPackages($packages, $lockedPackages);
5657

5758
usort($expected, $sortPackages);
5859
usort($actual, $sortPackages);
@@ -82,7 +83,7 @@ public function provideRemoveLegacyPackages()
8283
return [
8384
'extra' => [
8485
'branch-alias' => [
85-
'dev-master' => $versionAlias.'-dev',
86+
'dev-main' => $versionAlias.'-dev',
8687
],
8788
],
8889
];
@@ -93,18 +94,14 @@ public function provideRemoveLegacyPackages()
9394
'1.0.0' => [],
9495
],
9596
'symfony/symfony' => [
96-
'3.3.0' => [
97-
'version_normalized' => '3.3.0.0',
98-
],
99-
'3.4.0' => [
100-
'version_normalized' => '3.4.0.0',
101-
],
102-
'dev-master' => $branchAlias('3.5'),
97+
'3.3.0' => ['version_normalized' => '3.3.0.0'],
98+
'3.4.0' => ['version_normalized' => '3.4.0.0'],
99+
'dev-main' => $branchAlias('3.5'),
103100
],
104101
'symfony/foo' => [
105102
'3.3.0' => ['version_normalized' => '3.3.0.0'],
106103
'3.4.0' => ['version_normalized' => '3.4.0.0'],
107-
'dev-master' => $branchAlias('3.5'),
104+
'dev-main' => $branchAlias('3.5'),
108105
],
109106
];
110107

@@ -126,19 +123,17 @@ public function provideRemoveLegacyPackages()
126123
unset($expected['symfony/symfony']['3.4.0']);
127124
unset($expected['symfony/foo']['3.4.0']);
128125

129-
yield 'master-only' => [$expected, $packages, '~3.5', ['splits' => [
126+
yield 'main-only' => [$expected, $packages, '~3.5', ['splits' => [
130127
'symfony/foo' => ['3.4', '3.5'],
131128
]]];
132129

133130
$packages = [
134131
'symfony/symfony' => [
135-
'2.8.0' => [
136-
'version_normalized' => '2.8.0.0',
137-
],
132+
'2.8.0' => ['version_normalized' => '2.8.0.0'],
138133
],
139134
'symfony/legacy' => [
140135
'2.8.0' => ['version_normalized' => '2.8.0.0'],
141-
'dev-master' => $branchAlias('2.8'),
136+
'dev-main' => $branchAlias('2.8'),
142137
],
143138
];
144139

@@ -149,27 +144,44 @@ public function provideRemoveLegacyPackages()
149144

150145
$packages = [
151146
'symfony/symfony' => [
152-
'2.8.0' => [
153-
'version_normalized' => '2.8.0.0',
154-
],
155-
'dev-master' => $branchAlias('3.0'),
147+
'2.8.0' => ['version_normalized' => '2.8.0.0'],
148+
'dev-main' => $branchAlias('3.0'),
156149
],
157150
'symfony/foo' => [
158151
'2.8.0' => ['version_normalized' => '2.8.0.0'],
159-
'dev-master' => $branchAlias('3.0'),
152+
'dev-main' => $branchAlias('3.0'),
160153
],
161154
'symfony/new' => [
162-
'dev-master' => $branchAlias('3.0'),
155+
'dev-main' => $branchAlias('3.0'),
163156
],
164157
];
165158

166159
$expected = $packages;
167-
unset($expected['symfony/symfony']['dev-master']);
168-
unset($expected['symfony/foo']['dev-master']);
160+
unset($expected['symfony/symfony']['dev-main']);
161+
unset($expected['symfony/foo']['dev-main']);
169162

170-
yield 'master-is-filtered-only-when-in-range' => [$expected, $packages, '~2.8', ['splits' => [
163+
yield 'main-is-filtered-only-when-in-range' => [$expected, $packages, '~2.8', ['splits' => [
171164
'symfony/foo' => ['2.8', '3.0'],
172165
'symfony/new' => ['3.0'],
173166
]]];
167+
168+
$packages = [
169+
'symfony/symfony' => [
170+
'3.0.0' => ['version_normalized' => '3.0.0.0'],
171+
],
172+
'symfony/foo' => [
173+
'3.0.0' => ['version_normalized' => '3.0.0.0'],
174+
],
175+
];
176+
177+
$lockedPackages = [
178+
'symfony/foo' => [
179+
'3.0.0' => ['version_normalized' => '3.0.0.0'],
180+
],
181+
];
182+
183+
yield 'locked-packages-are-preserved' => [$packages, $packages, '~2.8', ['splits' => [
184+
'symfony/foo' => ['2.8', '3.0'],
185+
]], $lockedPackages];
174186
}
175187
}

0 commit comments

Comments
 (0)