diff --git a/Neos.ContentRepository.BehavioralTests/Classes/Command/PerformanceMeasurementCommandController.php b/Neos.ContentRepository.BehavioralTests/Classes/Command/PerformanceMeasurementCommandController.php index 5423f286e0f..20b95cb0281 100644 --- a/Neos.ContentRepository.BehavioralTests/Classes/Command/PerformanceMeasurementCommandController.php +++ b/Neos.ContentRepository.BehavioralTests/Classes/Command/PerformanceMeasurementCommandController.php @@ -37,7 +37,11 @@ public function __construct( } /** - * @throws \Throwable + * Prepare the performance test by removing existing data and creating nodes for the test. + * + * @param int $nodesPerLevel The number of nodes to create per level. + * @param int $levels The number of levels in the node tree. + * @internal */ public function preparePerformanceTestCommand(int $nodesPerLevel, int $levels): void { @@ -51,7 +55,9 @@ public function preparePerformanceTestCommand(int $nodesPerLevel, int $levels): } /** - * @throws \Throwable + * Test the performance of forking a content stream and measure the time taken. + * + * @internal */ public function testPerformanceCommand(): void { diff --git a/Neos.ContentRepository.BehavioralTests/Classes/ProjectionRaceConditionTester/Command/RaceConditionTrackerCommandController.php b/Neos.ContentRepository.BehavioralTests/Classes/ProjectionRaceConditionTester/Command/RaceConditionTrackerCommandController.php index bd96c289904..6c50a6f55af 100644 --- a/Neos.ContentRepository.BehavioralTests/Classes/ProjectionRaceConditionTester/Command/RaceConditionTrackerCommandController.php +++ b/Neos.ContentRepository.BehavioralTests/Classes/ProjectionRaceConditionTester/Command/RaceConditionTrackerCommandController.php @@ -35,12 +35,23 @@ final class RaceConditionTrackerCommandController extends CommandController */ protected $configuration; + /** + * Reset the race condition tracker by clearing the stored traces in Redis. + * @internal + */ public function resetCommand(): void { RedisInterleavingLogger::connect($this->configuration['redis']['host'], $this->configuration['redis']['port']); RedisInterleavingLogger::reset(); } + + /** + * Analyze the stored trace and detect race conditions and double-processed events. + * + * @param string|null $storeTrace The path to store the full trace in NDJSON format (optional). + * @internal + */ public function analyzeTraceCommand(string $storeTrace = null): void { RedisInterleavingLogger::connect($this->configuration['redis']['host'], $this->configuration['redis']['port']); diff --git a/Neos.ContentRepositoryRegistry/Classes/Command/ContentCommandController.php b/Neos.ContentRepositoryRegistry/Classes/Command/ContentCommandController.php index 62005598387..c32ebe72467 100644 --- a/Neos.ContentRepositoryRegistry/Classes/Command/ContentCommandController.php +++ b/Neos.ContentRepositoryRegistry/Classes/Command/ContentCommandController.php @@ -39,6 +39,15 @@ public function __construct( parent::__construct(); } + /** + * Refreshes the root node dimensions in the specified content repository for the specified workspace. + * + * In the content repository, the root node has to cover all existing dimension space points. + * With this command, the root node can be updated such that it represents all configured dimensions + * + * @param string $contentRepository The content repository identifier. (Default: 'default') + * @param string $workspace The workspace name. (Default: 'live') + */ public function refreshRootNodeDimensionsCommand(string $contentRepository = 'default', string $workspace = WorkspaceName::WORKSPACE_NAME_LIVE): void { $contentRepositoryId = ContentRepositoryId::fromString($contentRepository); @@ -72,6 +81,22 @@ public function refreshRootNodeDimensionsCommand(string $contentRepository = 'de $this->outputLine('Done!'); } + /** + * Moves a dimension space point from the source to the target in the specified workspace and content repository. + * + * With this command all nodes for a given content dimension can be moved to a different dimension. This can be necessary + * if a dimension configuration has been added or renamed. + * + * *Note:* source and target dimensions have to be specified as JSON, for example: + * ``` + * ./flow content:movedimensionspacepoint '{"language": "de"}' '{"language": "en"}' + * ``` + * + * @param string $source The JSON representation of the source dimension space point. (Example: '{"language": "de"}') + * @param string $target The JSON representation of the target dimension space point. (Example: '{"language": "en"}') + * @param string $contentRepository The content repository identifier. (Default: 'default') + * @param string $workspace The workspace name. (Default: 'live') + */ public function moveDimensionSpacePointCommand(string $source, string $target, string $contentRepository = 'default', string $workspace = WorkspaceName::WORKSPACE_NAME_LIVE): void { $contentRepositoryId = ContentRepositoryId::fromString($contentRepository); @@ -98,6 +123,21 @@ public function moveDimensionSpacePointCommand(string $source, string $target, s $this->outputLine('Done!'); } + /** + * Creates node variants recursively from the source to the target dimension space point in the specified workspace and content repository. + * + * This can be necessary if a new content dimension specialization was added (for example a more specific language) + * + * *Note:* source and target dimensions have to be specified as JSON, for example: + * ``` + * ./flow content:createvariantsrecursively '{"language": "de"}' '{"language": "de_ch"}' + * ``` + * + * @param string $source The JSON representation of the source dimension space point. (Example: '{"language": "de"}') + * @param string $target The JSON representation of the target origin dimension space point. (Example: '{"language": "en"}') + * @param string $contentRepository The content repository identifier. (Default: 'default') + * @param string $workspace The workspace name. (Default: 'live') + */ public function createVariantsRecursivelyCommand(string $source, string $target, string $contentRepository = 'default', string $workspace = WorkspaceName::WORKSPACE_NAME_LIVE): void { $contentRepositoryId = ContentRepositoryId::fromString($contentRepository); diff --git a/Neos.ContentRepositoryRegistry/Classes/Command/CrCommandController.php b/Neos.ContentRepositoryRegistry/Classes/Command/CrCommandController.php index c50a34e0289..593904438c7 100644 --- a/Neos.ContentRepositoryRegistry/Classes/Command/CrCommandController.php +++ b/Neos.ContentRepositoryRegistry/Classes/Command/CrCommandController.php @@ -90,6 +90,12 @@ public function replayAllCommand(string $contentRepository = 'default', bool $qu } } + /** + * This will completely prune the data of the specified content repository. + * + * @param string $contentRepository name of the content repository where the data should be pruned from. + * @return void + */ public function pruneCommand(string $contentRepository = 'default'): void { if (!$this->output->askConfirmation(sprintf("This will prune your content repository \"%s\". Are you sure to proceed? (y/n) ", $contentRepository), false)) { diff --git a/Neos.ContentRepositoryRegistry/Classes/Command/StructureAdjustmentsCommandController.php b/Neos.ContentRepositoryRegistry/Classes/Command/StructureAdjustmentsCommandController.php index c99472ac8c2..401b5cd830e 100644 --- a/Neos.ContentRepositoryRegistry/Classes/Command/StructureAdjustmentsCommandController.php +++ b/Neos.ContentRepositoryRegistry/Classes/Command/StructureAdjustmentsCommandController.php @@ -29,6 +29,13 @@ final class StructureAdjustmentsCommandController extends CommandController */ protected $contentRepositoryRegistry; + + /** + * Detect required structure adjustments for the specified node type in the given content repository. + * + * @param string|null $nodeType The node type to find structure adjustments for. If not provided, all adjustments will be shown. (Default: null) + * @param string $contentRepositoryIdentifier The content repository identifier. (Default: 'default') + */ public function detectCommand(string $nodeType = null, string $contentRepositoryIdentifier = 'default'): void { $contentRepositoryId = ContentRepositoryId::fromString($contentRepositoryIdentifier); @@ -45,6 +52,13 @@ public function detectCommand(string $nodeType = null, string $contentRepository $this->printErrors($errors); } + /** + * Apply required structure adjustments for the specified node type in the given content repository. + * + * @param string|null $nodeType The node type to apply structure adjustments for. If not provided, all found adjustments will be applied. (Default: null) + * @param string $contentRepositoryIdentifier The content repository identifier. (Default: 'default') + * @return void + */ public function fixCommand(string $nodeType = null, string $contentRepositoryIdentifier = 'default'): void { $contentRepositoryId = ContentRepositoryId::fromString($contentRepositoryIdentifier); diff --git a/Neos.ContentRepositoryRegistry/Classes/Command/SubprocessProjectionCatchUpCommandController.php b/Neos.ContentRepositoryRegistry/Classes/Command/SubprocessProjectionCatchUpCommandController.php index b0ec9ee2d39..a654d053fcc 100644 --- a/Neos.ContentRepositoryRegistry/Classes/Command/SubprocessProjectionCatchUpCommandController.php +++ b/Neos.ContentRepositoryRegistry/Classes/Command/SubprocessProjectionCatchUpCommandController.php @@ -22,6 +22,11 @@ class SubprocessProjectionCatchUpCommandController extends CommandController */ protected $contentRepositoryRegistry; + /** + * @param string $contentRepositoryIdentifier + * @param string $projectionClassName fully qualified class name of the projection to catch up + * @internal + */ public function catchupCommand(string $contentRepositoryIdentifier, string $projectionClassName): void {