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_stale_revisions.tagged_versions ' )]
41+ private bool $ retainStaleRevisionsTagged ,
42+ #[Autowire(param: 'dirigent.metadata.retain_stale_revisions.dev_versions ' )]
43+ private bool $ retainStaleRevisionsDev ,
3944 ) {
4045 }
4146
@@ -214,12 +219,18 @@ private function updatePackage(Package $package, array $composerPackages, ?VcsDr
214219
215220 private function updateVersion (Version $ version , CompletePackageInterface $ data , ?VcsDriverInterface $ driver = null ): void
216221 {
222+ $ currentMetadata = $ version ->hasCurrentMetadata () ? $ version ->getCurrentMetadata () : null ;
217223 $ metadata = $ this ->createMetadata ($ version , $ data , $ driver );
218224
219- if (! $ version -> hasCurrentMetadata () || $ this ->hasMetadataChanged ($ version -> getCurrentMetadata () , $ metadata )) {
225+ if (null === $ currentMetadata || $ this ->hasMetadataChanged ($ currentMetadata , $ metadata )) {
220226 $ version ->setCurrentMetadata ($ metadata );
221227
222228 $ this ->entityManager ->persist ($ metadata );
229+
230+ $ removePreviousMetadata = $ version ->isDevelopment () ? !$ this ->retainStaleRevisionsDev : !$ this ->retainStaleRevisionsTagged ;
231+ if (null !== $ currentMetadata && $ removePreviousMetadata ) {
232+ $ this ->entityManager ->remove ($ currentMetadata );
233+ }
223234 }
224235
225236 $ version ->setDefaultBranch ($ data ->isDefaultBranch ());
0 commit comments