2323use Composer \Pcre \Preg ;
2424use Composer \Repository \Vcs \VcsDriverInterface ;
2525use Doctrine \ORM \EntityManagerInterface ;
26+ use Symfony \Component \DependencyInjection \Attribute \Autowire ;
2627use Symfony \Component \Messenger \MessageBusInterface ;
2728use Symfony \Component \Messenger \Stamp \DispatchAfterCurrentBusStamp ;
2829use Symfony \Component \Messenger \Stamp \TransportNamesStamp ;
@@ -36,6 +37,10 @@ public function __construct(
3637 private KeywordRepository $ keywordRepository ,
3738 private RegistryRepository $ registryRepository ,
3839 private PackageRepository $ packageRepository ,
40+ #[Autowire(param: 'dirigent.metadata.retain_revisions.tagged_versions ' )]
41+ private bool $ retainRevisionsTagged ,
42+ #[Autowire(param: 'dirigent.metadata.retain_revisions.dev_versions ' )]
43+ private bool $ retainRevisionsDev ,
3944 ) {
4045 }
4146
@@ -217,8 +222,15 @@ private function updateVersion(Version $version, CompletePackageInterface $data,
217222 $ metadata = $ this ->createMetadata ($ version , $ data , $ driver );
218223
219224 if (!$ version ->hasCurrentMetadata () || $ this ->hasMetadataChanged ($ version ->getCurrentMetadata (), $ metadata )) {
225+ $ existingMetadata = $ version ->getCurrentMetadata ();
226+
220227 $ version ->setCurrentMetadata ($ metadata );
221228
229+ $ pruneMetadata = $ version ->isDevelopment () ? !$ this ->retainRevisionsDev : !$ this ->retainRevisionsTagged ;
230+ if ($ pruneMetadata ) {
231+ $ this ->entityManager ->remove ($ existingMetadata );
232+ }
233+
222234 $ this ->entityManager ->persist ($ metadata );
223235 }
224236
0 commit comments