Something went wrong. Try again.
@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
Something went wrong. Try again.
3.7 kB · 140 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141<?php
final class DiffusionBranchTableController extends DiffusionController {
public function shouldAllowPublic() { return true; }
public function handleRequest(AphrontRequest $request) { $response = $this->loadDiffusionContext(); if ($response) { return $response; }
$viewer = $this->getViewer(); $drequest = $this->getDiffusionRequest(); $repository = $drequest->getRepository();
$pager = id(new PHUIPagerView()) ->readFromRequest($request);
$params = array( 'offset' => $pager->getOffset(), 'limit' => $pager->getPageSize() + 1, 'branch' => null, );
$contains = $drequest->getSymbolicCommit(); if (phutil_nonempty_string($contains)) { $params['contains'] = $contains; }
$branches = $this->callConduitWithDiffusionRequest( 'diffusion.branchquery', $params); $branches = $pager->sliceResults($branches);
$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( pht('No Branches'), pht('This repository has no branches.')); } else { $commits = id(new DiffusionCommitQuery()) ->setViewer($viewer) ->withIdentifiers(mpull($branches, 'getCommitIdentifier')) ->withRepository($repository) ->execute();
$list = id(new DiffusionBranchListView()) ->setUser($viewer) ->setBranches($branches) ->setCommits($commits) ->setDiffusionRequest($drequest);
$content = id(new PHUIObjectBoxView()) ->setHeaderText($repository->getName()) ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) ->addClass('diffusion-mobile-view') ->setTable($list) ->setPager($pager); }
$crumbs = $this->buildCrumbs( array( 'branches' => true, )); $crumbs->setBorder(true);
$header = id(new PHUIHeaderView()) ->setHeader(pht('Branches')) ->setHeaderIcon('fa-code-fork');
if (!$repository->isSVN()) { $branch_tag = $this->renderBranchTag($drequest); $header->addTag($branch_tag); }
$tabs = $this->buildTabsView('branch');
$view = id(new PHUITwoColumnView()) ->setHeader($header) ->setTabs($tabs) ->setFooter(array( $content, ));
return $this->newPage() ->setTitle( array( pht('Branches'), $repository->getDisplayName(), )) ->setCrumbs($crumbs) ->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)); }
}