Skip to content

Commit 3cb6c26

Browse files
committed
Implement pinning of package versions in PackageMetadataResolver
1 parent 0826a7e commit 3cb6c26

1 file changed

Lines changed: 9 additions & 5 deletions

File tree

src/Package/PackageMetadataResolver.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ private function updatePackage(Package $package, array $composerPackages, ?VcsDr
213213

214214
// Remove outdated versions
215215
foreach ($existingVersionMetadata as $version) {
216-
$removeVersion = $version->isDevelopment() ? !$this->retainPrunedVersionsDev : !$this->retainPrunedVersionsTagged;
216+
$removeVersion = !$version->isPinned() && ($version->isDevelopment() ? !$this->retainPrunedVersionsDev : !$this->retainPrunedVersionsTagged);
217217
if ($removeVersion) {
218218
$this->entityManager->remove($version);
219219
} elseif (!$version->isPruned()) {
@@ -236,13 +236,17 @@ private function updateVersion(Version $version, CompletePackageInterface $data,
236236

237237
if (null === $currentMetadata || $this->hasMetadataChanged($currentMetadata, $metadata)) {
238238
$metadata->setRevision($version->getNextRevision(increment: true));
239-
$version->setCurrentMetadata($metadata);
240239

241240
$this->entityManager->persist($metadata);
242241

243-
$removePreviousMetadata = $version->isDevelopment() ? !$this->retainStaleRevisionsDev : !$this->retainStaleRevisionsTagged;
244-
if (null !== $currentMetadata && $removePreviousMetadata) {
245-
$this->entityManager->remove($currentMetadata);
242+
$retainStaleRevisions = $version->isDevelopment() ? $this->retainStaleRevisionsDev : $this->retainStaleRevisionsTagged;
243+
if (!$version->isPinned() || !$retainStaleRevisions) {
244+
$version->setCurrentMetadata($metadata);
245+
$version->setPinned(false);
246+
247+
if (null !== $currentMetadata && !$retainStaleRevisions) {
248+
$this->entityManager->remove($currentMetadata);
249+
}
246250
}
247251
}
248252

0 commit comments

Comments
 (0)