1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-29 18:22:41 +01:00

Display lint results for all repos

Summary:
I want to add search per owner, this is a prerequisity for it.
There's no link to this page yet, I didn't find a good place for it.

Test Plan: Displayed it, clicked around.

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin, scottmac

Maniphest Tasks: T2038

Differential Revision: https://secure.phabricator.com/D4067
This commit is contained in:
vrana 2012-12-03 13:12:19 -08:00
parent d2568ac463
commit 8584b87df4
2 changed files with 69 additions and 34 deletions

View file

@ -63,6 +63,7 @@ final class PhabricatorApplicationDiffusion extends PhabricatorApplication {
),
'symbol/(?P<name>[^/]+)/' => 'DiffusionSymbolController',
'external/' => 'DiffusionExternalController',
'lint/' => 'DiffusionLintController',
),
);
}

View file

@ -4,7 +4,7 @@
final class DiffusionLintController extends DiffusionController {
public function processRequest() {
$drequest = $this->getDiffusionRequest();
$drequest = $this->diffusionRequest;
if ($this->getRequest()->getStr('lint') !== null) {
$controller = new DiffusionLintDetailsController($this->getRequest());
@ -15,8 +15,30 @@ final class DiffusionLintController extends DiffusionController {
$codes = $this->loadLintCodes();
$codes = array_reverse(isort($codes, 'n'));
if (!$drequest) {
$branches = id(new PhabricatorRepositoryBranch())->loadAllWhere(
'id IN (%Ld)',
array_unique(ipull($codes, 'branchID')));
$repositories = id(new PhabricatorRepository())->loadAllWhere(
'id IN (%Ld)',
array_unique(mpull($branches, 'getRepositoryID')));
$drequests = array();
foreach ($branches as $id => $branch) {
$drequests[$id] = DiffusionRequest::newFromDictionary(array(
'repository' => $repositories[$branch->getRepositoryID()],
'branch' => $branch->getName(),
));
}
}
$rows = array();
foreach ($codes as $code) {
if (!$this->diffusionRequest) {
$drequest = $drequests[$code['branchID']];
}
$rows[] = array(
hsprintf(
'<a href="%s">%s</a>',
@ -32,6 +54,10 @@ final class DiffusionLintController extends DiffusionController {
'lint' => $code['code'],
)),
$code['files']),
hsprintf(
'<a href="%s">%s</a>',
$drequest->generateURI(array('action' => 'lint')),
$drequest->getCallsign()),
phutil_escape_html(ArcanistLintSeverity::getStringForSeverity(
$code['maxSeverity'])),
phutil_escape_html($code['code']),
@ -44,12 +70,14 @@ final class DiffusionLintController extends DiffusionController {
->setHeaders(array(
'Problems',
'Files',
'Repository',
'Severity',
'Code',
'Name',
'Example',
))
->setColumnClasses(array('n', 'n', '', 'pri', '', ''));
->setColumnVisibility(array(true, true, !$this->diffusionRequest))
->setColumnClasses(array('n', 'n', '', '', 'pri', '', ''));
$content = array();
@ -60,6 +88,8 @@ final class DiffusionLintController extends DiffusionController {
'view' => 'lint',
));
$link = null;
if ($this->diffusionRequest) {
$link = hsprintf(
'<a href="%s">%s</a>',
$drequest->generateURI(array(
@ -67,44 +97,50 @@ final class DiffusionLintController extends DiffusionController {
'lint' => '',
)),
pht('Switch to List View'));
}
$content[] = id(new AphrontPanelView())
->setHeader(pht('%d Lint Message(s)', array_sum(ipull($codes, 'n'))))
->setCaption($link)
->appendChild($table);
$nav = $this->buildSideNav('lint', false);
$nav->appendChild($content);
$title = array('Lint');
if ($this->diffusionRequest) {
$title[] = $drequest->getCallsign();
$content = $this->buildSideNav('lint', false)->appendChild($content);
}
return $this->buildStandardPageResponse(
$nav,
array('title' => array(
'Lint',
$drequest->getRepository()->getCallsign(),
)));
$content,
array('title' => $title));
}
private function loadLintCodes() {
$drequest = $this->getDiffusionRequest();
$drequest = $this->diffusionRequest;
$conn = id(new PhabricatorRepository())->establishConnection('r');
$where = array('1 = 1');
if ($drequest) {
$branch = $drequest->loadBranch();
if (!$branch) {
return array();
}
$conn = $branch->establishConnection('r');
$where[] = qsprintf($conn, 'branchID = %d', $branch->getID());
$where = '';
if ($drequest->getPath() != '') {
$is_dir = (substr($drequest->getPath(), -1) == '/');
$where = qsprintf(
$where[] = qsprintf(
$conn,
'AND path '.($is_dir ? 'LIKE %>' : '= %s'),
'path '.($is_dir ? 'LIKE %>' : '= %s'),
'/'.$drequest->getPath());
}
}
return queryfx_all(
$conn,
'SELECT
branchID,
code,
MAX(severity) AS maxSeverity,
MAX(name) AS maxName,
@ -112,12 +148,10 @@ final class DiffusionLintController extends DiffusionController {
COUNT(DISTINCT path) AS files,
COUNT(*) AS n
FROM %T
WHERE branchID = %d
%Q
GROUP BY code',
WHERE %Q
GROUP BY branchID, code',
PhabricatorRepository::TABLE_LINTMESSAGE,
$branch->getID(),
$where);
implode(' AND ', $where));
}
}