Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
index f02f6026d0..bcbd372f75 100644
--- a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
+++ b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
@@ -1,79 +1,80 @@
<?php
final class PhabricatorApplicationDiffusion extends PhabricatorApplication {
public function getShortDescription() {
return 'Repository Browser';
}
public function getBaseURI() {
return '/diffusion/';
}
public function getAutospriteName() {
return 'diffusion';
}
public function getHelpURI() {
return PhabricatorEnv::getDoclink('article/Diffusion_User_Guide.html');
}
public function getFactObjectsForAnalysis() {
return array(
new PhabricatorRepositoryCommit(),
);
}
public function getRoutes() {
return array(
'/r(?P<callsign>[A-Z]+)(?P<commit>[a-z0-9]+)'
=> 'DiffusionCommitController',
'/diffusion/' => array(
'' => 'DiffusionHomeController',
'(?P<callsign>[A-Z]+)/' => array(
'' => 'DiffusionRepositoryController',
'repository/(?P<dblob>.*)' => 'DiffusionRepositoryController',
'change/(?P<dblob>.*)' => 'DiffusionChangeController',
'history/(?P<dblob>.*)' => 'DiffusionHistoryController',
'browse/(?P<dblob>.*)' => 'DiffusionBrowseController',
'lastmodified/(?P<dblob>.*)' => 'DiffusionLastModifiedController',
'diff/' => 'DiffusionDiffController',
'tags/(?P<dblob>.*)' => 'DiffusionTagListController',
'branches/(?P<dblob>.*)' => 'DiffusionBranchTableController',
'lint/(?P<dblob>.*)' => 'DiffusionLintController',
'commit/(?P<commit>[a-z0-9]+)/branches/'
=> 'DiffusionCommitBranchesController',
'commit/(?P<commit>[a-z0-9]+)/tags/'
=> 'DiffusionCommitTagsController',
'commit/(?P<commit>[a-z0-9]+)/edit/'
=> 'DiffusionCommitEditController',
),
'inline/' => array(
'edit/(?P<phid>[^/]+)/' => 'DiffusionInlineCommentController',
'preview/(?P<phid>[^/]+)/' =>
'DiffusionInlineCommentPreviewController',
),
'services/' => array(
'path/' => array(
'complete/' => 'DiffusionPathCompleteController',
'validate/' => 'DiffusionPathValidateController',
),
),
'symbol/(?P<name>[^/]+)/' => 'DiffusionSymbolController',
'external/' => 'DiffusionExternalController',
+ 'lint/' => 'DiffusionLintController',
),
);
}
public function getApplicationGroup() {
return self::GROUP_CORE;
}
public function getApplicationOrder() {
return 0.120;
}
}
diff --git a/src/applications/diffusion/controller/DiffusionLintController.php b/src/applications/diffusion/controller/DiffusionLintController.php
index 81f6d50459..876947ffa1 100644
--- a/src/applications/diffusion/controller/DiffusionLintController.php
+++ b/src/applications/diffusion/controller/DiffusionLintController.php
@@ -1,123 +1,157 @@
<?php
// Copyright 2004-present Facebook. All Rights Reserved.
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());
$controller->setDiffusionRequest($drequest);
return $this->delegateToController($controller);
}
$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>',
$drequest->generateURI(array(
'action' => 'lint',
'lint' => $code['code'],
)),
$code['n']),
hsprintf(
'<a href="%s">%s</a>',
$drequest->generateURI(array(
'action' => 'browse',
'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']),
phutil_escape_html($code['maxName']),
phutil_escape_html($code['maxDescription']),
);
}
$table = id(new AphrontTableView($rows))
->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();
$content[] = $this->buildCrumbs(
array(
'branch' => true,
'path' => true,
'view' => 'lint',
));
- $link = hsprintf(
- '<a href="%s">%s</a>',
- $drequest->generateURI(array(
- 'action' => 'lint',
- 'lint' => '',
- )),
- pht('Switch to List View'));
+ $link = null;
+ if ($this->diffusionRequest) {
+ $link = hsprintf(
+ '<a href="%s">%s</a>',
+ $drequest->generateURI(array(
+ 'action' => 'lint',
+ '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();
- $branch = $drequest->loadBranch();
- if (!$branch) {
- return array();
- }
-
- $conn = $branch->establishConnection('r');
-
- $where = '';
- if ($drequest->getPath() != '') {
- $is_dir = (substr($drequest->getPath(), -1) == '/');
- $where = qsprintf(
- $conn,
- 'AND path '.($is_dir ? 'LIKE %>' : '= %s'),
- '/'.$drequest->getPath());
+ $drequest = $this->diffusionRequest;
+ $conn = id(new PhabricatorRepository())->establishConnection('r');
+ $where = array('1 = 1');
+
+ if ($drequest) {
+ $branch = $drequest->loadBranch();
+ if (!$branch) {
+ return array();
+ }
+
+ $where[] = qsprintf($conn, 'branchID = %d', $branch->getID());
+
+ if ($drequest->getPath() != '') {
+ $is_dir = (substr($drequest->getPath(), -1) == '/');
+ $where[] = qsprintf(
+ $conn,
+ 'path '.($is_dir ? 'LIKE %>' : '= %s'),
+ '/'.$drequest->getPath());
+ }
}
return queryfx_all(
$conn,
'SELECT
+ branchID,
code,
MAX(severity) AS maxSeverity,
MAX(name) AS maxName,
MAX(description) AS maxDescription,
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));
}
}

File Metadata

Mime Type
text/x-diff
Expires
Thu, Nov 6, 8:08 AM (2 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
319080
Default Alt Text
(8 KB)

Event Timeline