@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at recaptime-dev/main 156 lines 4.6 kB view raw
1<?php 2 3final class DiffusionBranchListView extends DiffusionView { 4 5 private $branches; 6 private $commits = array(); 7 8 /** 9 * @param array<DiffusionRepositoryRef> $branches 10 */ 11 public function setBranches(array $branches) { 12 assert_instances_of($branches, DiffusionRepositoryRef::class); 13 $this->branches = $branches; 14 return $this; 15 } 16 17 /** 18 * @param array<PhabricatorRepositoryCommit> $commits 19 */ 20 public function setCommits(array $commits) { 21 assert_instances_of($commits, PhabricatorRepositoryCommit::class); 22 $this->commits = mpull($commits, null, 'getCommitIdentifier'); 23 return $this; 24 } 25 26 public function render() { 27 $drequest = $this->getDiffusionRequest(); 28 $current_branch = $drequest->getBranch(); 29 $repository = $drequest->getRepository(); 30 $commits = $this->commits; 31 $viewer = $this->getUser(); 32 require_celerity_resource('diffusion-css'); 33 34 $buildables = $this->loadBuildables($commits); 35 $have_builds = false; 36 37 $can_close_branches = ($repository->isHg()); 38 39 Javelin::initBehavior('phabricator-tooltips'); 40 41 $list = id(new PHUIObjectItemListView()) 42 ->addClass('diffusion-history-list') 43 ->addClass('diffusion-branch-list'); 44 45 $publisher = $repository->newPublisher(); 46 47 foreach ($this->branches as $branch) { 48 $build_view = null; 49 $button_bar = new PHUIButtonBarView(); 50 $commit = idx($commits, $branch->getCommitIdentifier()); 51 if ($commit) { 52 $details = $commit->getSummary(); 53 $datetime = phabricator_datetime($commit->getEpoch(), $viewer); 54 55 $buildable = idx($buildables, $commit->getPHID()); 56 if ($buildable) { 57 $build_view = $this->renderBuildable($buildable, 'button'); 58 } 59 } else { 60 $datetime = null; 61 $details = null; 62 } 63 64 if ($repository->supportsBranchComparison()) { 65 $compare_uri = $drequest->generateURI( 66 array( 67 'action' => 'compare', 68 'head' => $branch->getShortName(), 69 )); 70 $can_compare = ($branch->getShortName() != $current_branch); 71 if ($can_compare) { 72 $button_bar->addButton( 73 id(new PHUIButtonView()) 74 ->setTag('a') 75 ->setIcon('fa-balance-scale') 76 ->setToolTip(pht('Compare')) 77 ->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE) 78 ->setWorkflow(true) 79 ->setHref($compare_uri)); 80 } 81 } 82 83 $browse_href = $drequest->generateURI( 84 array( 85 'action' => 'browse', 86 'branch' => $branch->getShortName(), 87 )); 88 89 $button_bar->addButton( 90 id(new PHUIButtonView()) 91 ->setIcon('fa-code') 92 ->setHref($browse_href) 93 ->setTag('a') 94 ->setTooltip(pht('Browse')) 95 ->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE)); 96 97 $commit_link = $repository->getCommitURI( 98 $branch->getCommitIdentifier()); 99 100 $commit_name = $repository->formatCommitName( 101 $branch->getCommitIdentifier(), $local = true); 102 103 $commit_tag = id(new PHUITagView()) 104 ->setName($commit_name) 105 ->setHref($commit_link) 106 ->setType(PHUITagView::TYPE_SHADE) 107 ->setColor(PHUITagView::COLOR_INDIGO) 108 ->setBorder(PHUITagView::BORDER_NONE) 109 ->setSlimShady(true); 110 $subhead = array($commit_tag, ' ', $details); 111 112 $item = id(new PHUIObjectItemView()) 113 ->setHeader($branch->getShortName()) 114 ->setHref($drequest->generateURI( 115 array( 116 'action' => 'history', 117 'branch' => $branch->getShortName(), 118 ))) 119 ->setSubhead($subhead) 120 ->setSideColumn(array( 121 $build_view, 122 $button_bar, 123 )); 124 125 if ($branch->getShortName() == $repository->getDefaultBranch()) { 126 $item->setStatusIcon('fa-star', pht('Default Branch')); 127 } else { 128 if ($publisher->shouldPublishRef($branch)) { 129 $item->setStatusIcon('fa-code-fork', pht('Permanent Ref')); 130 } else { 131 $item->setStatusIcon( 132 'fa-folder-open-o grey', pht('Not a Permanent Ref')); 133 } 134 } 135 136 $item->addAttribute(array($datetime)); 137 138 if ($can_close_branches) { 139 $fields = $branch->getRawFields(); 140 $closed = idx($fields, 'closed'); 141 if ($closed) { 142 $status = pht('Branch Closed'); 143 $item->setDisabled(true); 144 } else { 145 $status = pht('Branch Open'); 146 } 147 $item->addAttribute($status); 148 } 149 150 $list->addItem($item); 151 152 } 153 return $list; 154 155 } 156}