@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
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add DiffusionBranchListView for browsing branches

Summary: Adds a new DiffusionBranchListView which replaces the BranchTable when browsing all branches in Diffusion. Has all the same capabilities, but is easier to read, adds a Compare button, and plays nicely on mobile. It does take up more space, but I think that's generally OK here since we expect our branches to not be heaping piles of intern revert branches.

Test Plan:
Follow a few repositories with branches, like Phabricator and KDE's Krita. View layouts on mobile, tablet, desktop. Try out new compare button.

{F4996207}

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: avivey, Korvin

Maniphest Tasks: T12824

Differential Revision: https://secure.phabricator.com/D18113

+175 -10
+2 -2
resources/celerity/map.php
··· 71 71 'rsrc/css/application/differential/revision-history.css' => '0e8eb855', 72 72 'rsrc/css/application/differential/revision-list.css' => 'f3c47d33', 73 73 'rsrc/css/application/differential/table-of-contents.css' => 'ae4b7a55', 74 - 'rsrc/css/application/diffusion/diffusion-history.css' => '6870e8c1', 74 + 'rsrc/css/application/diffusion/diffusion-history.css' => '4540f568', 75 75 'rsrc/css/application/diffusion/diffusion-icons.css' => 'a6a1e2ba', 76 76 'rsrc/css/application/diffusion/diffusion-readme.css' => '419dd5b6', 77 77 'rsrc/css/application/diffusion/diffusion-source.css' => '750add59', ··· 569 569 'differential-revision-history-css' => '0e8eb855', 570 570 'differential-revision-list-css' => 'f3c47d33', 571 571 'differential-table-of-contents-css' => 'ae4b7a55', 572 - 'diffusion-history-css' => '6870e8c1', 572 + 'diffusion-history-css' => '4540f568', 573 573 'diffusion-icons-css' => 'a6a1e2ba', 574 574 'diffusion-readme-css' => '419dd5b6', 575 575 'diffusion-source-css' => '750add59',
+2
src/__phutil_library_map__.php
··· 613 613 'DiffusionBlameConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBlameConduitAPIMethod.php', 614 614 'DiffusionBlameQuery' => 'applications/diffusion/query/blame/DiffusionBlameQuery.php', 615 615 'DiffusionBlockHeraldAction' => 'applications/diffusion/herald/DiffusionBlockHeraldAction.php', 616 + 'DiffusionBranchListView' => 'applications/diffusion/view/DiffusionBranchListView.php', 616 617 'DiffusionBranchQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php', 617 618 'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php', 618 619 'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php', ··· 5584 5585 'DiffusionBlameConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 5585 5586 'DiffusionBlameQuery' => 'DiffusionQuery', 5586 5587 'DiffusionBlockHeraldAction' => 'HeraldAction', 5588 + 'DiffusionBranchListView' => 'DiffusionView', 5587 5589 'DiffusionBranchQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 5588 5590 'DiffusionBranchTableController' => 'DiffusionController', 5589 5591 'DiffusionBranchTableView' => 'DiffusionView',
+3 -6
src/applications/diffusion/controller/DiffusionBranchTableController.php
··· 48 48 ->withRepository($repository) 49 49 ->execute(); 50 50 51 - $table = id(new DiffusionBranchTableView()) 51 + $list = id(new DiffusionBranchListView()) 52 52 ->setUser($viewer) 53 53 ->setBranches($branches) 54 54 ->setCommits($commits) ··· 57 57 $content = id(new PHUIObjectBoxView()) 58 58 ->setHeaderText($repository->getName()) 59 59 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 60 - ->setTable($table) 60 + ->setTable($list) 61 61 ->setPager($pager); 62 62 } 63 63 ··· 84 84 $repository->getDisplayName(), 85 85 )) 86 86 ->setCrumbs($crumbs) 87 - ->appendChild( 88 - array( 89 - $view, 90 - )); 87 + ->appendChild($view); 91 88 } 92 89 93 90 }
+149
src/applications/diffusion/view/DiffusionBranchListView.php
··· 1 + <?php 2 + 3 + final class DiffusionBranchListView extends DiffusionView { 4 + 5 + private $branches; 6 + private $commits = array(); 7 + 8 + public function setBranches(array $branches) { 9 + assert_instances_of($branches, 'DiffusionRepositoryRef'); 10 + $this->branches = $branches; 11 + return $this; 12 + } 13 + 14 + public function setCommits(array $commits) { 15 + assert_instances_of($commits, 'PhabricatorRepositoryCommit'); 16 + $this->commits = mpull($commits, null, 'getCommitIdentifier'); 17 + return $this; 18 + } 19 + 20 + public function render() { 21 + $drequest = $this->getDiffusionRequest(); 22 + $current_branch = $drequest->getBranch(); 23 + $repository = $drequest->getRepository(); 24 + $commits = $this->commits; 25 + $viewer = $this->getUser(); 26 + require_celerity_resource('diffusion-history-css'); 27 + 28 + $buildables = $this->loadBuildables($commits); 29 + $have_builds = false; 30 + 31 + $can_close_branches = ($repository->isHg()); 32 + 33 + Javelin::initBehavior('phabricator-tooltips'); 34 + 35 + $doc_href = PhabricatorEnv::getDoclink('Diffusion User Guide: Autoclose'); 36 + $list = id(new PHUIObjectItemListView()) 37 + ->setFlush(true) 38 + ->addClass('diffusion-history-list') 39 + ->addClass('diffusion-branch-list'); 40 + 41 + foreach ($this->branches as $branch) { 42 + $build_view = null; 43 + $button_bar = new PHUIButtonBarView(); 44 + $commit = idx($commits, $branch->getCommitIdentifier()); 45 + if ($commit) { 46 + $details = $commit->getSummary(); 47 + $datetime = phabricator_datetime($commit->getEpoch(), $viewer); 48 + 49 + $buildable = idx($buildables, $commit->getPHID()); 50 + if ($buildable) { 51 + $status = $buildable->getBuildableStatus(); 52 + $icon = HarbormasterBuildable::getBuildableStatusIcon($status); 53 + $color = HarbormasterBuildable::getBuildableStatusColor($status); 54 + $name = HarbormasterBuildable::getBuildableStatusName($status); 55 + $build_view = id(new PHUIButtonView()) 56 + ->setTag('a') 57 + ->setText($name) 58 + ->setIcon($icon) 59 + ->setColor($color) 60 + ->setHref('/'.$buildable->getMonogram()) 61 + ->addClass('mmr') 62 + ->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE); 63 + } 64 + } else { 65 + $datetime = null; 66 + $details = null; 67 + } 68 + 69 + if ($repository->supportsBranchComparison()) { 70 + $compare_uri = $drequest->generateURI( 71 + array( 72 + 'action' => 'compare', 73 + 'head' => $branch->getShortName(), 74 + )); 75 + $can_compare = ($branch->getShortName() != $current_branch); 76 + if ($can_compare) { 77 + $button_bar->addButton( 78 + id(new PHUIButtonView()) 79 + ->setTag('a') 80 + ->setIcon('fa-balance-scale') 81 + ->setToolTip(pht('Compare')) 82 + ->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE) 83 + ->setWorkflow(true) 84 + ->setHref($compare_uri)); 85 + } 86 + } 87 + 88 + $fields = $branch->getRawFields(); 89 + $closed = idx($fields, 'closed'); 90 + if ($closed) { 91 + $status = pht('Closed'); 92 + } else { 93 + $status = pht('Open'); 94 + } 95 + 96 + $browse_href = $drequest->generateURI( 97 + array( 98 + 'action' => 'browse', 99 + 'branch' => $branch->getShortName(), 100 + )); 101 + 102 + $button_bar->addButton( 103 + id(new PHUIButtonView()) 104 + ->setIcon('fa-code') 105 + ->setHref($browse_href) 106 + ->setTag('a') 107 + ->setTooltip(pht('Browse')) 108 + ->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE)); 109 + 110 + $commit_link = $repository->getCommitURI( 111 + $branch->getCommitIdentifier()); 112 + 113 + $commit_name = $repository->formatCommitName( 114 + $branch->getCommitIdentifier(), $local = true); 115 + 116 + $commit_tag = id(new PHUITagView()) 117 + ->setName($commit_name) 118 + ->setHref($commit_link) 119 + ->setType(PHUITagView::TYPE_SHADE) 120 + ->setColor(PHUITagView::COLOR_INDIGO) 121 + ->setBorder(PHUITagView::BORDER_NONE) 122 + ->setSlimShady(true); 123 + $subhead = array($commit_tag, ' ', $details); 124 + 125 + $item = id(new PHUIObjectItemView()) 126 + ->setHeader($branch->getShortName()) 127 + ->setHref($drequest->generateURI( 128 + array( 129 + 'action' => 'history', 130 + 'branch' => $branch->getShortName(), 131 + ))) 132 + ->setSubhead($subhead) 133 + ->setSideColumn(array( 134 + $build_view, 135 + $button_bar, 136 + )); 137 + 138 + if ($branch->getShortName() == $repository->getDefaultBranch()) { 139 + $item->setStatusIcon('fa-code-fork', pht('Default Branch')); 140 + } 141 + $item->addAttribute(array($datetime)); 142 + 143 + $list->addItem($item); 144 + 145 + } 146 + return $list; 147 + 148 + } 149 + }
+2 -2
src/applications/diffusion/view/DiffusionView.php
··· 116 116 117 117 if ($button) { 118 118 return id(new PHUIButtonView()) 119 - ->setText(pht('Browse')) 119 + ->setTag('a') 120 120 ->setIcon('fa-code') 121 121 ->setHref($href) 122 - ->setTag('a') 122 + ->setToolTip(pht('Browse')) 123 123 ->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE); 124 124 } 125 125
+17
webroot/rsrc/css/application/diffusion/diffusion-history.css
··· 30 30 margin-left: 4px; 31 31 } 32 32 33 + /* - Branch Styles ----------------------------------------------------------*/ 34 + 35 + .diffusion-branch-list .phui-oi-attribute a { 36 + color: {$darkbluetext}; 37 + } 38 + 39 + .diffusion-branch-list .phui-oi-attribute-spacer { 40 + visibility: hidden; 41 + } 42 + 43 + .diffusion-branch-list .phui-oi-subhead { 44 + color: {$bluetext}; 45 + } 46 + 47 + .diffusion-branch-list .phui-oi-subhead .phui-tag-view { 48 + margin-right: 4px; 49 + } 33 50 34 51 /* - Phone Style ------------------------------------------------------------*/ 35 52