diff --git a/src/applications/diffusion/controller/DiffusionBranchTableController.php b/src/applications/diffusion/controller/DiffusionBranchTableController.php --- a/src/applications/diffusion/controller/DiffusionBranchTableController.php +++ b/src/applications/diffusion/controller/DiffusionBranchTableController.php @@ -37,6 +37,12 @@ $branches = DiffusionRepositoryRef::loadAllFromDictionaries($branches); + // If there is one page of results or fewer, sort branches so the default + // branch is on top and permanent branches are below it. + if (!$pager->getOffset() && !$pager->getHasMorePages()) { + $branches = $this->sortBranches($repository, $branches); + } + $content = null; if (!$branches) { $content = $this->renderStatusMessage( @@ -97,4 +103,38 @@ ->appendChild($view); } + private function sortBranches( + PhabricatorRepository $repository, + array $branches) { + + $publisher = $repository->newPublisher(); + $default_branch = $repository->getDefaultBranch(); + + $vectors = array(); + foreach ($branches as $key => $branch) { + $short_name = $branch->getShortName(); + + if ($short_name === $default_branch) { + $order_default = 0; + } else { + $order_default = 1; + } + + if ($publisher->shouldPublishRef($branch)) { + $order_permanent = 0; + } else { + $order_permanent = 1; + } + + $vectors[$key] = id(new PhutilSortVector()) + ->addInt($order_default) + ->addInt($order_permanent) + ->addString($short_name); + } + + $vectors = msortv($vectors, 'getSelf'); + + return array_select_keys($branches, array_keys($vectors)); + } + } diff --git a/src/applications/diffusion/view/DiffusionBranchListView.php b/src/applications/diffusion/view/DiffusionBranchListView.php --- a/src/applications/diffusion/view/DiffusionBranchListView.php +++ b/src/applications/diffusion/view/DiffusionBranchListView.php @@ -33,10 +33,11 @@ Javelin::initBehavior('phabricator-tooltips'); $list = id(new PHUIObjectItemListView()) - ->setFlush(true) ->addClass('diffusion-history-list') ->addClass('diffusion-branch-list'); + $publisher = $repository->newPublisher(); + foreach ($this->branches as $branch) { $build_view = null; $button_bar = new PHUIButtonBarView(); @@ -116,8 +117,16 @@ )); if ($branch->getShortName() == $repository->getDefaultBranch()) { - $item->setStatusIcon('fa-code-fork', pht('Default Branch')); + $item->setStatusIcon('fa-star', pht('Default Branch')); + } else { + if ($publisher->shouldPublishRef($branch)) { + $item->setStatusIcon('fa-code-fork', pht('Permanent Ref')); + } else { + $item->setStatusIcon( + 'fa-folder-open-o grey', pht('Not a Permanent Ref')); + } } + $item->addAttribute(array($datetime)); if ($can_close_branches) {