private function buildRetryListView(PhabricatorWorkerTask $task)
 {
     $view = new PHUIPropertyListView();
     $data = id(new PhabricatorWorkerTaskData())->load($task->getDataID());
     $task->setData($data->getData());
     $worker = $task->getWorkerInstance();
     $view->addProperty(pht('Failure Count'), $task->getFailureCount());
     $retry_count = $worker->getMaximumRetryCount();
     if ($retry_count === null) {
         $max_retries = phutil_tag('em', array(), pht('Retries Forever'));
         $retry_count = INF;
     } else {
         $max_retries = $retry_count;
     }
     $view->addProperty(pht('Maximum Retries'), $max_retries);
     $projection = clone $task;
     $projection->makeEphemeral();
     $next = array();
     for ($ii = $task->getFailureCount(); $ii < $retry_count; $ii++) {
         $projection->setFailureCount($ii);
         $next[] = $worker->getWaitBeforeRetry($projection);
         if (count($next) > 10) {
             break;
         }
     }
     if ($next) {
         $cumulative = 0;
         foreach ($next as $key => $duration) {
             if ($duration === null) {
                 $duration = 60;
             }
             $cumulative += $duration;
             $next[$key] = phutil_format_relative_time($cumulative);
         }
         if ($ii != $retry_count) {
             $next[] = '...';
         }
         $retries_in = implode(', ', $next);
     } else {
         $retries_in = pht('No More Retries');
     }
     $view->addProperty(pht('Retries After'), $retries_in);
     return $view;
 }