@@ -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