1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-28 17:52:43 +01:00
phorge-phorge/src/applications/diffusion/controller/DiffusionRefTableController.php

149 lines
3.7 KiB
PHP

<?php
final class DiffusionRefTableController extends DiffusionController {
public function shouldAllowPublic() {
return true;
}
protected function processDiffusionRequest(AphrontRequest $request) {
$viewer = $this->getViewer();
$drequest = $this->getDiffusionRequest();
$repository = $drequest->getRepository();
if (!$drequest->supportsBranches()) {
return $this->newDialog()
->setTitle(pht('No Ref Support'))
->appendParagraph(
pht(
'The version control system this repository uses does not '.
'support named references, so you can not resolve or list '.
'repository refs in this repository.'))
->addCancelButton($repository->getURI());
}
$ref_name = $drequest->getBranch();
$cache_query = id(new DiffusionCachedResolveRefsQuery())
->setRepository($repository);
if ($ref_name !== null) {
$cache_query->withRefs(array($ref_name));
}
$cache_refs = $cache_query->execute();
$vcs_refs = DiffusionQuery::callConduitWithDiffusionRequest(
$viewer,
$drequest,
'diffusion.resolverefs',
array(
'refs' => array($ref_name),
));
$all = array();
foreach ($cache_refs as $ref => $results) {
foreach ($results as $result) {
$id = $result['type'].'/'.$result['identifier'];
$all[$ref][$id]['cache'] = $result;
}
}
foreach ($vcs_refs as $ref => $results) {
foreach ($results as $result) {
$id = $result['type'].'/'.$result['identifier'];
$all[$ref][$id]['vcs'] = $result;
}
}
$rows = array();
foreach ($all as $ref => $results) {
foreach ($results as $info) {
$cache = idx($info, 'cache', array());
$vcs = idx($info, 'vcs', array());
$type = idx($vcs, 'type');
if (!$type) {
$type = idx($cache, 'type');
}
$hash = idx($vcs, 'identifier');
if ($hash !== null) {
$hash = DiffusionView::linkCommit(
$repository,
$hash);
}
$cached_hash = idx($cache, 'identifier');
if ($cached_hash !== null) {
$cached_hash = DiffusionView::linkCommit(
$repository,
$cached_hash);
}
$closed = idx($vcs, 'closed', false);
if (!$vcs) {
$state = null;
} else {
$state = $closed ? pht('Closed') : pht('Open');
}
$cached_closed = idx($cache, 'closed', false);
if (!$cache) {
$cached_state = null;
} else {
$cached_state = $cached_closed ? pht('Closed') : pht('Open');
}
$alternate = idx($vcs, 'alternate');
if ($alternate !== null) {
$alternate = DiffusionView::linkCommit(
$repository,
$alternate);
}
$rows[] = array(
$ref,
$type,
$hash,
$cached_hash,
$state,
$cached_state,
$alternate,
);
}
}
$table = id(new AphrontTableView($rows))
->setHeaders(
array(
pht('Ref'),
pht('Type'),
pht('Hash'),
pht('Cached Hash'),
pht('State'),
pht('Cached State'),
pht('Alternate'),
));
$content = id(new PHUIObjectBoxView())
->setHeaderText(pht('Ref "%s"', $ref_name))
->setTable($table);
$crumbs = $this->buildCrumbs(array());
$crumbs->addTextCrumb(pht('Refs'));
return $this->buildApplicationPage(
array(
$crumbs,
$content,
),
array(
'title' => array(
pht('Refs'),
$repository->getMonogram(),
$ref_name,
),
));
}
}