Page MenuHomePhabricator

D20246.diff
No OneTemporary

D20246.diff

diff --git a/src/infrastructure/daemon/workers/management/PhabricatorWorkerManagementExecuteWorkflow.php b/src/infrastructure/daemon/workers/management/PhabricatorWorkerManagementExecuteWorkflow.php
--- a/src/infrastructure/daemon/workers/management/PhabricatorWorkerManagementExecuteWorkflow.php
+++ b/src/infrastructure/daemon/workers/management/PhabricatorWorkerManagementExecuteWorkflow.php
@@ -11,23 +11,64 @@
pht(
'Execute a task explicitly. This command ignores leases, is '.
'dangerous, and may cause work to be performed twice.'))
- ->setArguments($this->getTaskSelectionArguments());
+ ->setArguments(
+ array_merge(
+ array(
+ array(
+ 'name' => 'retry',
+ 'help' => pht('Retry archived tasks.'),
+ ),
+ array(
+ 'name' => 'repeat',
+ 'help' => pht('Repeat archived, successful tasks.'),
+ ),
+ ),
+ $this->getTaskSelectionArguments()));
}
public function execute(PhutilArgumentParser $args) {
$console = PhutilConsole::getConsole();
$tasks = $this->loadTasks($args);
+ $is_retry = $args->getArg('retry');
+ $is_repeat = $args->getArg('repeat');
+
foreach ($tasks as $task) {
$can_execute = !$task->isArchived();
if (!$can_execute) {
- $console->writeOut(
+ if (!$is_retry) {
+ $console->writeOut(
+ "**<bg:yellow> %s </bg>** %s\n",
+ pht('ARCHIVED'),
+ pht(
+ '%s is already archived, and will not be executed. '.
+ 'Use "--retry" to execute archived tasks.',
+ $this->describeTask($task)));
+ continue;
+ }
+
+ $result_success = PhabricatorWorkerArchiveTask::RESULT_SUCCESS;
+ if ($task->getResult() == $result_success) {
+ if (!$is_repeat) {
+ $console->writeOut(
+ "**<bg:yellow> %s </bg>** %s\n",
+ pht('SUCCEEDED'),
+ pht(
+ '%s has already succeeded, and will not be retried. '.
+ 'Use "--repeat" to repeat successful tasks.',
+ $this->describeTask($task)));
+ continue;
+ }
+ }
+
+ echo tsprintf(
"**<bg:yellow> %s </bg>** %s\n",
pht('ARCHIVED'),
pht(
- '%s is already archived, and can not be executed.',
+ 'Unarchiving %s.',
$this->describeTask($task)));
- continue;
+
+ $task = $task->unarchiveTask();
}
// NOTE: This ignores leases, maybe it should respect them without
diff --git a/src/infrastructure/daemon/workers/management/PhabricatorWorkerManagementRetryWorkflow.php b/src/infrastructure/daemon/workers/management/PhabricatorWorkerManagementRetryWorkflow.php
--- a/src/infrastructure/daemon/workers/management/PhabricatorWorkerManagementRetryWorkflow.php
+++ b/src/infrastructure/daemon/workers/management/PhabricatorWorkerManagementRetryWorkflow.php
@@ -10,15 +10,24 @@
->setSynopsis(
pht(
'Retry selected tasks which previously failed permanently or '.
- 'were cancelled. Only archived, unsuccessful tasks can be '.
- 'retried.'))
- ->setArguments($this->getTaskSelectionArguments());
+ 'were cancelled. Only archived tasks can be retried.'))
+ ->setArguments(
+ array_merge(
+ array(
+ array(
+ 'name' => 'repeat',
+ 'help' => pht(
+ 'Repeat tasks which already completed successfully.'),
+ ),
+ ),
+ $this->getTaskSelectionArguments()));
}
public function execute(PhutilArgumentParser $args) {
$console = PhutilConsole::getConsole();
$tasks = $this->loadTasks($args);
+ $is_repeat = $args->getArg('repeat');
foreach ($tasks as $task) {
if (!$task->isArchived()) {
$console->writeOut(
@@ -32,13 +41,16 @@
$result_success = PhabricatorWorkerArchiveTask::RESULT_SUCCESS;
if ($task->getResult() == $result_success) {
- $console->writeOut(
- "**<bg:yellow> %s </bg>** %s\n",
- pht('SUCCEEDED'),
- pht(
- '%s has already succeeded, and can not be retried.',
- $this->describeTask($task)));
- continue;
+ if (!$is_repeat) {
+ $console->writeOut(
+ "**<bg:yellow> %s </bg>** %s\n",
+ pht('SUCCEEDED'),
+ pht(
+ '%s has already succeeded, and will not be repeated. '.
+ 'Use "--repeat" to repeat successful tasks.',
+ $this->describeTask($task)));
+ continue;
+ }
}
$task->unarchiveTask();

File Metadata

Mime Type
text/plain
Expires
Tue, Dec 24, 8:12 PM (2 h, 36 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6923975
Default Alt Text
D20246.diff (4 KB)

Event Timeline