private function executeBuildCommand(HarbormasterBuild $build, HarbormasterBuildTransaction $xaction)
 {
     $command = $xaction->getNewValue();
     switch ($command) {
         case HarbormasterBuildCommand::COMMAND_RESTART:
             $issuable = $build->canRestartBuild();
             break;
         case HarbormasterBuildCommand::COMMAND_PAUSE:
             $issuable = $build->canPauseBuild();
             break;
         case HarbormasterBuildCommand::COMMAND_RESUME:
             $issuable = $build->canResumeBuild();
             break;
         case HarbormasterBuildCommand::COMMAND_ABORT:
             $issuable = $build->canAbortBuild();
             break;
         default:
             throw new Exception(pht('Unknown command %s', $command));
     }
     if (!$issuable) {
         return;
     }
     $actor = $this->getActor();
     if (!$build->canIssueCommand($actor, $command)) {
         return;
     }
     id(new HarbormasterBuildCommand())->setAuthorPHID($xaction->getAuthorPHID())->setTargetPHID($build->getPHID())->setCommand($command)->save();
     PhabricatorWorker::scheduleTask('HarbormasterBuildWorker', array('buildID' => $build->getID()), array('objectPHID' => $build->getPHID()));
 }
 private function executeBuildCommand(HarbormasterBuild $build, HarbormasterBuildTransaction $xaction)
 {
     $command = $xaction->getNewValue();
     switch ($command) {
         case HarbormasterBuildCommand::COMMAND_RESTART:
             $issuable = $build->canRestartBuild();
             break;
         case HarbormasterBuildCommand::COMMAND_STOP:
             $issuable = $build->canStopBuild();
             break;
         case HarbormasterBuildCommand::COMMAND_RESUME:
             $issuable = $build->canResumeBuild();
             break;
         default:
             throw new Exception("Unknown command {$command}");
     }
     if (!$issuable) {
         return;
     }
     id(new HarbormasterBuildCommand())->setAuthorPHID($xaction->getAuthorPHID())->setTargetPHID($build->getPHID())->setCommand($command)->save();
     PhabricatorWorker::scheduleTask('HarbormasterBuildWorker', array('buildID' => $build->getID()));
 }
 public static function initializeNewBuildTarget(HarbormasterBuild $build, HarbormasterBuildStep $build_step, array $variables)
 {
     return id(new HarbormasterBuildTarget())->setName($build_step->getName())->setBuildPHID($build->getPHID())->setBuildStepPHID($build_step->getPHID())->setClassName($build_step->getClassName())->setDetails($build_step->getDetails())->setTargetStatus(self::STATUS_PENDING)->setVariables($variables)->setBuildGeneration($build->getBuildGeneration());
 }
 private function releaseAllArtifacts(HarbormasterBuild $build)
 {
     $targets = id(new HarbormasterBuildTargetQuery())->setViewer(PhabricatorUser::getOmnipotentUser())->withBuildPHIDs(array($build->getPHID()))->withBuildGenerations(array($build->getBuildGeneration()))->execute();
     if (count($targets) === 0) {
         return;
     }
     $target_phids = mpull($targets, 'getPHID');
     $artifacts = id(new HarbormasterBuildArtifactQuery())->setViewer(PhabricatorUser::getOmnipotentUser())->withBuildTargetPHIDs($target_phids)->execute();
     foreach ($artifacts as $artifact) {
         $artifact->releaseArtifact();
     }
 }