Summary:
Fixes T4067. The way `DiffusionCommitQuery` works prevents it from loading SVN identifiers in some cases without additional constraints, since "12345" might be an SVN revision 12345, or it might be the first 5 characters of a Git commit hash.
Introduce `withRepository()` as a shorthand for `withDefaultRepository()` + `withRepositoryIDs()`. This tells the query to:
- Only look in the given repository; and
- use the more liberal identifier resolution rules while doing so.
The practical impact this has is that blame tooltips in SVN work again. The other queries which are fixed here were never run in SVN (which doesn't have first-class branches or tags); I've cleaned them up only for completeness.
Test Plan:
- Viewed blame in SVN, saw information again instead of empty tooltip.
- Viewed brnaches/tags in Mercurial and Git.
{F79226}
Reviewers: btrahan
Reviewed By: btrahan
CC: aran
Maniphest Tasks: T4067
Differential Revision: https://secure.phabricator.com/D7523
75 lines
1.9 KiB
PHP
75 lines
1.9 KiB
PHP
<?php
|
|
|
|
final class DiffusionBranchTableController extends DiffusionController {
|
|
|
|
public function shouldAllowPublic() {
|
|
return true;
|
|
}
|
|
|
|
public function processRequest() {
|
|
$drequest = $this->getDiffusionRequest();
|
|
$request = $this->getRequest();
|
|
$viewer = $request->getUser();
|
|
|
|
$repository = $drequest->getRepository();
|
|
|
|
$pager = new AphrontPagerView();
|
|
$pager->setURI($request->getRequestURI(), 'offset');
|
|
$pager->setOffset($request->getInt('offset'));
|
|
|
|
// TODO: Add support for branches that contain commit
|
|
$branches = DiffusionBranchInformation::newFromConduit(
|
|
$this->callConduitWithDiffusionRequest(
|
|
'diffusion.branchquery',
|
|
array(
|
|
'offset' => $pager->getOffset(),
|
|
'limit' => $pager->getPageSize() + 1
|
|
)));
|
|
$branches = $pager->sliceResults($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, 'getHeadCommitIdentifier'))
|
|
->withRepository($repository)
|
|
->execute();
|
|
|
|
$view = id(new DiffusionBranchTableView())
|
|
->setUser($viewer)
|
|
->setBranches($branches)
|
|
->setCommits($commits)
|
|
->setDiffusionRequest($drequest);
|
|
|
|
$panel = id(new AphrontPanelView())
|
|
->setNoBackground(true)
|
|
->appendChild($view)
|
|
->appendChild($pager);
|
|
|
|
$content = $panel;
|
|
}
|
|
|
|
$crumbs = $this->buildCrumbs(
|
|
array(
|
|
'branches' => true,
|
|
));
|
|
|
|
return $this->buildApplicationPage(
|
|
array(
|
|
$crumbs,
|
|
$content,
|
|
),
|
|
array(
|
|
'title' => array(
|
|
pht('Branches'),
|
|
'r'.$repository->getCallsign(),
|
|
),
|
|
));
|
|
}
|
|
|
|
}
|