diff --git a/src/Drupal/Commands/core/MigrateRunnerCommands.php b/src/Drupal/Commands/core/MigrateRunnerCommands.php
index 6a96849ab6..614efb93c7 100644
--- a/src/Drupal/Commands/core/MigrateRunnerCommands.php
+++ b/src/Drupal/Commands/core/MigrateRunnerCommands.php
@@ -570,29 +570,52 @@ public function stop(string $migrationId): void
*
* @command migrate:reset-status
*
- * @param string $migrationId
- * The ID of migration to reset.
+ * @param string|null $migrationIds
+ * Comma-separated list of migration IDs.
*
* @aliases mrs,migrate-reset-status
*
* @topics docs:migrate
*
+ * @option all Process all migrations.
+ * @option tag A comma-separated list of migration tags to rollback
+ *
+ * @usage migrate:reset-status --all
+ * Reset the status of all migrations
+ * @usage migrate:reset-status --tag=user,main_content
+ * Reset the status of all migrations tagged with user and main_content tags
+ * @usage migrate:reset-status classification,article
+ * Reset the status of the classification and article migrations
+ *
* @validate-module-enabled migrate
- * @validate-migration-id
* @version 10.4
*
* @throws PluginException
*/
- public function resetStatus(string $migrationId): void
+ public function resetStatus(?string $migrationIds = null, array $options = ['all' => false, 'tag' => self::REQ]): void
{
- /** @var MigrationInterface $migration */
- $migration = $this->migrationPluginManager->createInstance($migrationId);
- $status = $migration->getStatus();
- if ($status == MigrationInterface::STATUS_IDLE) {
- $this->logger()->warning(dt('Migration @id is already Idle', ['@id' => $migrationId]));
- } else {
- $migration->setStatus(MigrationInterface::STATUS_IDLE);
- $this->logger()->success(dt('Migration @id reset to Idle', ['@id' => $migrationId]));
+ $tags = $options['tag'];
+ $all = $options['all'];
+
+ if (!$all && !$migrationIds && !$tags) {
+ throw new \Exception(dt('You must specify --all, --tag, or one or more migration names separated by commas'));
+ }
+
+ if (!$list = $this->getMigrationList($migrationIds, $options['tag'])) {
+ $this->logger()->error(dt('No migrations found.'));
+ }
+
+ foreach ($list as $migrations) {
+ foreach ($migrations as $migrationId => $migration) {
+ /** @var MigrationInterface $migration */
+ $status = $migration->getStatus();
+ if ($status == MigrationInterface::STATUS_IDLE) {
+ $this->logger()->warning(dt('Migration @id is already Idle', ['@id' => $migrationId]));
+ } else {
+ $migration->setStatus(MigrationInterface::STATUS_IDLE);
+ $this->logger()->success(dt('Migration @id reset to Idle', ['@id' => $migrationId]));
+ }
+ }
}
}