diff --git a/Neos.ContentRepositoryRegistry/Classes/Command/ContentStreamCommandController.php b/Neos.ContentRepositoryRegistry/Classes/Command/ContentStreamCommandController.php index 4a40dd2ea47..61325fb6a0e 100644 --- a/Neos.ContentRepositoryRegistry/Classes/Command/ContentStreamCommandController.php +++ b/Neos.ContentRepositoryRegistry/Classes/Command/ContentStreamCommandController.php @@ -63,17 +63,32 @@ public function statusCommand(string $contentRepository = 'default'): void * * To prune the removed content streams from the event stream, run ./flow contentStream:pruneRemovedFromEventStream afterwards. * + * NOTE: To ensure that no temporary content streams of the *current* moment are removed, a time threshold is configurable via --remove-temporary-before + * * @param string $contentRepository Identifier of the content repository. (Default: 'default') - * @param string $removeTemporaryBefore includes all temporary content streams like FORKED or CREATED older than that in the removal + * @param string $removeTemporaryBefore includes all temporary content streams like FORKED or CREATED older than that in the removal. To remove all use --remove-temporary-before=-1sec */ public function removeDanglingCommand(string $contentRepository = 'default', string $removeTemporaryBefore = '-1day'): void { $contentRepositoryId = ContentRepositoryId::fromString($contentRepository); $contentStreamPruner = $this->contentRepositoryRegistry->buildService($contentRepositoryId, new ContentStreamPrunerFactory()); + try { + $removeTemporaryBeforeDate = new \DateTimeImmutable($removeTemporaryBefore); + } catch (\Exception $exception) { + $this->outputLine(sprintf('--remove-temporary-before=%s is not a valid date: %s', $removeTemporaryBefore, $exception->getMessage())); + $this->quit(1); + } + + $now = new \DateTimeImmutable('now'); + if ($removeTemporaryBeforeDate > $now) { + $this->outputLine(sprintf('--remove-temporary-before=%s must be in the past', $removeTemporaryBefore)); + $this->quit(1); + } + $contentStreamPruner->removeDanglingContentStreams( $this->outputLine(...), - new \DateTimeImmutable($removeTemporaryBefore) + $removeTemporaryBeforeDate ); }