Path: blob/master/src/applications/diffusion/view/DiffusionBranchListView.php
12242 views
<?php12final class DiffusionBranchListView extends DiffusionView {34private $branches;5private $commits = array();67public function setBranches(array $branches) {8assert_instances_of($branches, 'DiffusionRepositoryRef');9$this->branches = $branches;10return $this;11}1213public function setCommits(array $commits) {14assert_instances_of($commits, 'PhabricatorRepositoryCommit');15$this->commits = mpull($commits, null, 'getCommitIdentifier');16return $this;17}1819public function render() {20$drequest = $this->getDiffusionRequest();21$current_branch = $drequest->getBranch();22$repository = $drequest->getRepository();23$commits = $this->commits;24$viewer = $this->getUser();25require_celerity_resource('diffusion-css');2627$buildables = $this->loadBuildables($commits);28$have_builds = false;2930$can_close_branches = ($repository->isHg());3132Javelin::initBehavior('phabricator-tooltips');3334$list = id(new PHUIObjectItemListView())35->addClass('diffusion-history-list')36->addClass('diffusion-branch-list');3738$publisher = $repository->newPublisher();3940foreach ($this->branches as $branch) {41$build_view = null;42$button_bar = new PHUIButtonBarView();43$commit = idx($commits, $branch->getCommitIdentifier());44if ($commit) {45$details = $commit->getSummary();46$datetime = phabricator_datetime($commit->getEpoch(), $viewer);4748$buildable = idx($buildables, $commit->getPHID());49if ($buildable) {50$build_view = $this->renderBuildable($buildable, 'button');51}52} else {53$datetime = null;54$details = null;55}5657if ($repository->supportsBranchComparison()) {58$compare_uri = $drequest->generateURI(59array(60'action' => 'compare',61'head' => $branch->getShortName(),62));63$can_compare = ($branch->getShortName() != $current_branch);64if ($can_compare) {65$button_bar->addButton(66id(new PHUIButtonView())67->setTag('a')68->setIcon('fa-balance-scale')69->setToolTip(pht('Compare'))70->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE)71->setWorkflow(true)72->setHref($compare_uri));73}74}7576$browse_href = $drequest->generateURI(77array(78'action' => 'browse',79'branch' => $branch->getShortName(),80));8182$button_bar->addButton(83id(new PHUIButtonView())84->setIcon('fa-code')85->setHref($browse_href)86->setTag('a')87->setTooltip(pht('Browse'))88->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE));8990$commit_link = $repository->getCommitURI(91$branch->getCommitIdentifier());9293$commit_name = $repository->formatCommitName(94$branch->getCommitIdentifier(), $local = true);9596$commit_tag = id(new PHUITagView())97->setName($commit_name)98->setHref($commit_link)99->setType(PHUITagView::TYPE_SHADE)100->setColor(PHUITagView::COLOR_INDIGO)101->setBorder(PHUITagView::BORDER_NONE)102->setSlimShady(true);103$subhead = array($commit_tag, ' ', $details);104105$item = id(new PHUIObjectItemView())106->setHeader($branch->getShortName())107->setHref($drequest->generateURI(108array(109'action' => 'history',110'branch' => $branch->getShortName(),111)))112->setSubhead($subhead)113->setSideColumn(array(114$build_view,115$button_bar,116));117118if ($branch->getShortName() == $repository->getDefaultBranch()) {119$item->setStatusIcon('fa-star', pht('Default Branch'));120} else {121if ($publisher->shouldPublishRef($branch)) {122$item->setStatusIcon('fa-code-fork', pht('Permanent Ref'));123} else {124$item->setStatusIcon(125'fa-folder-open-o grey', pht('Not a Permanent Ref'));126}127}128129$item->addAttribute(array($datetime));130131if ($can_close_branches) {132$fields = $branch->getRawFields();133$closed = idx($fields, 'closed');134if ($closed) {135$status = pht('Branch Closed');136$item->setDisabled(true);137} else {138$status = pht('Branch Open');139}140$item->addAttribute($status);141}142143$list->addItem($item);144145}146return $list;147148}149}150151152