Path: blob/master/src/applications/diffusion/controller/DiffusionPushEventViewController.php
12242 views
<?php12final class DiffusionPushEventViewController3extends DiffusionLogController {45public function handleRequest(AphrontRequest $request) {6$viewer = $this->getViewer();78$event = id(new PhabricatorRepositoryPushEventQuery())9->setViewer($viewer)10->withIDs(array($request->getURIData('id')))11->needLogs(true)12->executeOne();13if (!$event) {14return new Aphront404Response();15}1617$repository = $event->getRepository();18$title = pht('Push %d', $event->getID());1920$crumbs = $this->buildApplicationCrumbs();21$crumbs->addTextCrumb(22$repository->getName(),23$repository->getURI());2425$crumbs->addTextCrumb(26pht('Push Logs'),27$this->getApplicationURI(28'pushlog/?repositories='.$repository->getMonogram()));29$crumbs->addTextCrumb($title);3031$event_properties = $this->buildPropertyList($event);3233$detail_box = id(new PHUIObjectBoxView())34->setHeaderText($title)35->addPropertyList($event_properties);3637$commits = $this->loadCommits($event);38$commits_table = $this->renderCommitsTable($event, $commits);3940$commits_box = id(new PHUIObjectBoxView())41->setHeaderText(pht('Pushed Commits'))42->setTable($commits_table);4344$logs = $event->getLogs();4546$updates_table = id(new DiffusionPushLogListView())47->setUser($viewer)48->setLogs($logs);4950$update_box = id(new PHUIObjectBoxView())51->setHeaderText(pht('All Pushed Updates'))52->setTable($updates_table);5354return $this->newPage()55->setTitle($title)56->setCrumbs($crumbs)57->appendChild(58array(59$detail_box,60$commits_box,61$update_box,62));63}6465private function buildPropertyList(PhabricatorRepositoryPushEvent $event) {66$viewer = $this->getRequest()->getUser();67$view = new PHUIPropertyListView();6869$view->addProperty(70pht('Pushed At'),71phabricator_datetime($event->getEpoch(), $viewer));7273$view->addProperty(74pht('Pushed By'),75$viewer->renderHandle($event->getPusherPHID()));7677$view->addProperty(78pht('Pushed Via'),79$event->getRemoteProtocol());8081return $view;82}8384private function loadCommits(PhabricatorRepositoryPushEvent $event) {85$viewer = $this->getRequest()->getUser();8687$identifiers = array();88foreach ($event->getLogs() as $log) {89if ($log->getRefType() == PhabricatorRepositoryPushLog::REFTYPE_COMMIT) {90$identifiers[] = $log->getRefNew();91}92}9394if (!$identifiers) {95return array();96}9798// NOTE: Commits may not have been parsed/discovered yet. We need to return99// the identifiers no matter what. If possible, we'll also return the100// corresponding commits.101102$commits = id(new DiffusionCommitQuery())103->setViewer($viewer)104->withRepository($event->getRepository())105->withIdentifiers($identifiers)106->execute();107108$commits = mpull($commits, null, 'getCommitIdentifier');109110$results = array();111foreach ($identifiers as $identifier) {112$results[$identifier] = idx($commits, $identifier);113}114115return $results;116}117118private function renderCommitsTable(119PhabricatorRepositoryPushEvent $event,120array $commits) {121122$viewer = $this->getRequest()->getUser();123$repository = $event->getRepository();124125$rows = array();126foreach ($commits as $identifier => $commit) {127if ($commit) {128$partial_import = PhabricatorRepositoryCommit::IMPORTED_MESSAGE |129PhabricatorRepositoryCommit::IMPORTED_CHANGE;130if ($commit->isPartiallyImported($partial_import)) {131$summary = AphrontTableView::renderSingleDisplayLine(132$commit->getSummary());133} else {134$summary = phutil_tag('em', array(), pht('Importing...'));135}136} else {137$summary = phutil_tag('em', array(), pht('Discovering...'));138}139140$commit_name = $repository->formatCommitName($identifier);141if ($commit) {142$commit_name = phutil_tag(143'a',144array(145'href' => '/'.$commit_name,146),147$commit_name);148}149150$rows[] = array(151$commit_name,152$summary,153);154}155156$table = id(new AphrontTableView($rows))157->setNoDataString(pht("This push didn't push any new commits."))158->setHeaders(159array(160pht('Commit'),161pht('Summary'),162))163->setColumnClasses(164array(165'n',166'wide',167));168169return $table;170}171172}173174175