1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-20 01:08:50 +02:00

Filter all lint messages by owner

Summary: Also add link to this page.

Test Plan:
/diffusion/lint/
/diffusion/lint/?owner[0]=a (zero lint messages)
/diffusion/lint/?owner[0]=b (nonzero lint messages)
Clicked the link.

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin

Differential Revision: https://secure.phabricator.com/D4069
This commit is contained in:
vrana 2012-12-03 14:13:38 -08:00
parent 8584b87df4
commit 3645dc2dd9
2 changed files with 83 additions and 7 deletions

View file

@ -4,18 +4,31 @@
final class DiffusionLintController extends DiffusionController {
public function processRequest() {
$request = $this->getRequest();
$user = $this->getRequest()->getUser();
$drequest = $this->diffusionRequest;
if ($this->getRequest()->getStr('lint') !== null) {
$controller = new DiffusionLintDetailsController($this->getRequest());
if ($request->getStr('lint') !== null) {
$controller = new DiffusionLintDetailsController($request);
$controller->setDiffusionRequest($drequest);
return $this->delegateToController($controller);
}
$codes = $this->loadLintCodes();
$codes = array_reverse(isort($codes, 'n'));
$owners = array();
if (!$drequest) {
if (!$request->getArr('owner')) {
$owners[$user->getPHID()] = $user->getFullName();
} else {
$phids = $request->getArr('owner');
$phid = reset($phids);
$handles = $this->loadViewerHandles(array($phid));
$owners[$phid] = $handles[$phid]->getFullName();
}
}
$codes = $this->loadLintCodes(array_keys($owners));
if ($codes && !$drequest) {
$branches = id(new PhabricatorRepositoryBranch())->loadAllWhere(
'id IN (%Ld)',
array_unique(ipull($codes, 'branchID')));
@ -88,6 +101,7 @@ final class DiffusionLintController extends DiffusionController {
'view' => 'lint',
));
$link = null;
if ($this->diffusionRequest) {
$link = hsprintf(
@ -97,6 +111,22 @@ final class DiffusionLintController extends DiffusionController {
'lint' => '',
)),
pht('Switch to List View'));
} else {
$form = id(new AphrontFormView())
->setUser($user)
->setMethod('GET')
->appendChild(
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/users/')
->setLimit(1)
->setName('owner')
->setLabel('Owner')
->setValue($owners))
->appendChild(
id(new AphrontFormSubmitControl())
->setValue('Filter'));
$content[] = id(new AphrontListFilterView())->appendChild($form);
}
$content[] = id(new AphrontPanelView())
@ -115,7 +145,7 @@ final class DiffusionLintController extends DiffusionController {
array('title' => $title));
}
private function loadLintCodes() {
private function loadLintCodes(array $owner_phids) {
$drequest = $this->diffusionRequest;
$conn = id(new PhabricatorRepository())->establishConnection('r');
$where = array('1 = 1');
@ -137,6 +167,46 @@ final class DiffusionLintController extends DiffusionController {
}
}
if ($owner_phids) {
$packages = id(new PhabricatorOwnersOwner())
->loadAllWhere('userPHID IN (%Ls)', $owner_phids);
if (!$packages) {
return array();
}
$paths = id(new PhabricatorOwnersPath())
->loadAllWhere('packageID IN (%Ld)', array_keys($packages));
if (!$paths) {
return array();
}
$repositories = id(new PhabricatorRepository())->loadAllWhere(
'phid IN (%Ls)',
array_unique(mpull($paths, 'getRepositoryPHID')));
$repositories = mpull($repositories, 'getID', 'getPHID');
$branches = id(new PhabricatorRepositoryBranch())->loadAllWhere(
'repositoryID IN (%Ld)',
$repositories);
$branches = mgroup($branches, 'getRepositoryID');
$or = array();
foreach ($paths as $path) {
$branch = idx($branches, $repositories[$path->getRepositoryPHID()]);
if ($branch) {
$or[] = qsprintf(
$conn,
'(branchID IN (%Ld) AND path LIKE %>)',
array_keys($branch),
$path->getPath());
}
}
if (!$or) {
return array();
}
$where[] = '('.implode(' OR ', $or).')';
}
return queryfx_all(
$conn,
'SELECT
@ -149,7 +219,8 @@ final class DiffusionLintController extends DiffusionController {
COUNT(*) AS n
FROM %T
WHERE %Q
GROUP BY branchID, code',
GROUP BY branchID, code
ORDER BY n DESC',
PhabricatorRepository::TABLE_LINTMESSAGE,
implode(' AND ', $where));
}

View file

@ -63,6 +63,11 @@ final class PhabricatorPeopleProfileController
"Commits {$external_arrow}",
'/audit/view/author/'.$username.'/');
$nav->addFilter(
null,
"Lint Messages {$external_arrow}",
'/diffusion/lint/?owner[0]='.$user->getPHID());
$oauths = id(new PhabricatorUserOAuthInfo())->loadAllWhere(
'userID = %d',
$user->getID());