コード例 #1
0
 /**
  * @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.');
                 }
             }
         }
     }
 }
コード例 #2
0
 /**
  * @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;
         }
     }
 }
コード例 #3
0
 /**
  * @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.");
         }
     }
 }