/** * @task message */ private function validateCommitMessage(ArcanistDifferentialCommitMessage $message) { $reviewers = $message->getFieldValue('reviewerPHIDs'); if (!$reviewers) { $confirm = "You have not specified any reviewers. Continue anyway?"; if (!phutil_console_confirm($confirm)) { throw new ArcanistUsageException('Specify reviewers and retry.'); } } else { if (in_array($this->getUserPHID(), $reviewers)) { throw new ArcanistUsageException("You can not be a reviewer for your own revision."); } else { $users = $this->getConduit()->callMethodSynchronous('user.query', array('phids' => $reviewers)); $untils = array(); foreach ($users as $user) { if (idx($user, 'currentStatus') == 'away') { $untils[] = $user['currentStatusUntil']; } } if (count($untils) == count($reviewers)) { $until = date('l, M j Y', min($untils)); $confirm = "All reviewers are away until {$until}. Continue anyway?"; if (!phutil_console_confirm($confirm)) { throw new ArcanistUsageException('Specify available reviewers and retry.'); } } } } }
/** * @task message */ private function validateCommitMessage(ArcanistDifferentialCommitMessage $message) { $futures = array(); $revision_id = $message->getRevisionID(); if ($revision_id) { $futures['revision'] = $this->getConduit()->callMethod('differential.query', array('ids' => array($revision_id))); } $reviewers = $message->getFieldValue('reviewerPHIDs'); if (!$reviewers) { $confirm = pht('You have not specified any reviewers. Continue anyway?'); if (!phutil_console_confirm($confirm)) { throw new ArcanistUsageException(pht('Specify reviewers and retry.')); } } else { $futures['reviewers'] = $this->getConduit()->callMethod('user.query', array('phids' => $reviewers)); } foreach (new FutureIterator($futures) as $key => $future) { $result = $future->resolve(); switch ($key) { case 'revision': if (empty($result)) { throw new ArcanistUsageException(pht('There is no revision %s.', "D{$revision_id}")); } $this->checkRevisionOwnership(head($result)); break; case 'reviewers': $untils = array(); foreach ($result as $user) { if (idx($user, 'currentStatus') == 'away') { $untils[] = $user['currentStatusUntil']; } } if (count($untils) == count($reviewers)) { $until = date('l, M j Y', min($untils)); $confirm = pht('All reviewers are away until %s. Continue anyway?', $until); if (!phutil_console_confirm($confirm)) { throw new ArcanistUsageException(pht('Specify available reviewers and retry.')); } } break; } } }
/** * @task message */ private function validateCommitMessage(ArcanistDifferentialCommitMessage $message) { $reviewers = $message->getFieldValue('reviewerPHIDs'); if (!$reviewers) { $confirm = "You have not specified any reviewers. Continue anyway?"; if (!phutil_console_confirm($confirm)) { throw new ArcanistUsageException('Specify reviewers and retry.'); } } else { if (in_array($this->getUserPHID(), $reviewers)) { throw new ArcanistUsageException("You can not be a reviewer for your own revision."); } } }