3 final class HarbormasterManagementRestartWorkflow
4 extends HarbormasterManagementWorkflow
{
6 protected function didConstruct() {
10 "**restart** --active\n".
11 '**restart** --id id')
12 ->setSynopsis(pht('Restart Harbormaster builds.'))
19 'help' => pht('Select one or more builds by ID.'),
23 'help' => pht('Select all active builds.'),
28 public function execute(PhutilArgumentParser
$args) {
29 $viewer = $this->getViewer();
30 $ids = $args->getArg('id');
31 $active = $args->getArg('active');
33 if (!$ids && !$active) {
34 throw new PhutilArgumentUsageException(
35 pht('Use "--id" or "--active" to select builds.'));
36 } if ($ids && $active) {
37 throw new PhutilArgumentUsageException(
38 pht('Use one of "--id" or "--active" to select builds, but not both.'));
41 $query = id(new HarbormasterBuildQuery())
44 $query->withIDs($ids);
46 $query->withBuildStatuses(
47 HarbormasterBuildStatus
::getActiveStatusConstants());
49 $builds = $query->execute();
51 $count = count($builds);
55 pht('No builds to restart.'));
59 $prompt = pht('Restart %s build(s)?', new PhutilNumber($count));
60 if (!phutil_console_confirm($prompt)) {
61 throw new ArcanistUserAbortException();
64 $message = new HarbormasterBuildMessageRestartTransaction();
66 foreach ($builds as $build) {
69 pht('Build %d: %s', $build->getID(), $build->getName()));
72 $message->assertCanSendMessage($viewer, $build);
73 } catch (HarbormasterMessageException
$ex) {
76 $ex->newDisplayString());
81 $message->getHarbormasterBuildMessageType());
85 pht('Sent a restart message to build.'));