diff --git a/src/applications/diffusion/controller/DiffusionBrowseFileController.php b/src/applications/diffusion/controller/DiffusionBrowseFileController.php
index be92f51533..b01b3d02a8 100644
--- a/src/applications/diffusion/controller/DiffusionBrowseFileController.php
+++ b/src/applications/diffusion/controller/DiffusionBrowseFileController.php
@@ -573,6 +573,7 @@ final class DiffusionBrowseFileController extends DiffusionController {
foreach ($this->lintMessages as $message) {
$inline = id(new PhabricatorAuditInlineComment())
+ ->setID($message['id'])
->setSyntheticAuthor(
ArcanistLintSeverity::getStringForSeverity($message['severity']).
' '.$message['code'].' ('.$message['name'].')')
diff --git a/src/applications/diffusion/controller/DiffusionLintController.php b/src/applications/diffusion/controller/DiffusionLintController.php
index 9ace062608..81f6d50459 100644
--- a/src/applications/diffusion/controller/DiffusionLintController.php
+++ b/src/applications/diffusion/controller/DiffusionLintController.php
@@ -6,7 +6,7 @@ final class DiffusionLintController extends DiffusionController {
public function processRequest() {
$drequest = $this->getDiffusionRequest();
- if ($this->getRequest()->getStr('lint')) {
+ if ($this->getRequest()->getStr('lint') !== null) {
$controller = new DiffusionLintDetailsController($this->getRequest());
$controller->setDiffusionRequest($drequest);
return $this->delegateToController($controller);
@@ -49,14 +49,7 @@ final class DiffusionLintController extends DiffusionController {
'Name',
'Example',
))
- ->setColumnClasses(array(
- 'n',
- 'n',
- '',
- 'pri',
- '',
- '',
- ));
+ ->setColumnClasses(array('n', 'n', '', 'pri', '', ''));
$content = array();
@@ -67,8 +60,17 @@ final class DiffusionLintController extends DiffusionController {
'view' => 'lint',
));
+ $link = hsprintf(
+ '%s',
+ $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);
diff --git a/src/applications/diffusion/controller/DiffusionLintDetailsController.php b/src/applications/diffusion/controller/DiffusionLintDetailsController.php
index 8404e5ad43..c8cc969016 100644
--- a/src/applications/diffusion/controller/DiffusionLintDetailsController.php
+++ b/src/applications/diffusion/controller/DiffusionLintDetailsController.php
@@ -8,7 +8,8 @@ final class DiffusionLintDetailsController extends DiffusionController {
$offset = $this->getRequest()->getInt('offset', 0);
$drequest = $this->getDiffusionRequest();
- $messages = $this->loadLintMessages($limit, $offset);
+ $branch = $drequest->loadBranch();
+ $messages = $this->loadLintMessages($branch, $limit, $offset);
$is_dir = (substr('/'.$drequest->getPath(), -1) == '/');
$rows = array();
@@ -27,6 +28,7 @@ final class DiffusionLintDetailsController extends DiffusionController {
'action' => 'browse',
'path' => $message['path'],
'line' => $message['line'],
+ 'commit' => $branch->getLintCommit(),
)),
$message['line']);
@@ -35,7 +37,6 @@ final class DiffusionLintDetailsController extends DiffusionController {
$line,
phutil_escape_html(ArcanistLintSeverity::getStringForSeverity(
$message['severity'])),
- phutil_escape_html($message['code']),
phutil_escape_html($message['name']),
phutil_escape_html($message['description']),
);
@@ -46,21 +47,11 @@ final class DiffusionLintDetailsController extends DiffusionController {
'Path',
'Line',
'Severity',
- 'Code',
'Name',
- 'Example',
+ 'Description',
))
- ->setColumnClasses(array(
- '',
- 'n',
- '',
- 'pri',
- '',
- '',
- ))
- ->setColumnVisibility(array(
- $is_dir,
- ));
+ ->setColumnClasses(array('', 'n', '', '', ''))
+ ->setColumnVisibility(array($is_dir));
$content = array();
@@ -77,8 +68,20 @@ final class DiffusionLintDetailsController extends DiffusionController {
->setHasMorePages(count($messages) >= $limit)
->setURI($this->getRequest()->getRequestURI(), 'offset');
+ $lint = $drequest->getLint();
+ $link = hsprintf(
+ '%s',
+ $drequest->generateURI(array(
+ 'action' => 'lint',
+ 'lint' => null,
+ )),
+ pht('Switch to Grouped View'));
+
$content[] = id(new AphrontPanelView())
- ->setHeader(pht('%d Lint Message(s)', count($messages)))
+ ->setHeader(
+ ($lint != '' ? phutil_escape_html($lint)." \xC2\xB7 " : '').
+ pht('%d Lint Message(s)', count($messages)))
+ ->setCaption($link)
->appendChild($table)
->appendChild($pager);
@@ -93,37 +96,45 @@ final class DiffusionLintDetailsController extends DiffusionController {
)));
}
- private function loadLintMessages($limit, $offset) {
+ private function loadLintMessages(
+ PhabricatorRepositoryBranch $branch,
+ $limit,
+ $offset) {
+
$drequest = $this->getDiffusionRequest();
- $branch = $drequest->loadBranch();
if (!$branch) {
return array();
}
$conn = $branch->establishConnection('r');
- $where = '';
+ $where = array();
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());
}
+ if ($drequest->getLint() != '') {
+ $where[] = qsprintf(
+ $conn,
+ 'code = %s',
+ $drequest->getLint());
+ }
+
return queryfx_all(
$conn,
'SELECT *
FROM %T
WHERE branchID = %d
- AND code = %s
- %Q
+ AND %Q
ORDER BY path, code, line
LIMIT %d OFFSET %d',
PhabricatorRepository::TABLE_LINTMESSAGE,
$branch->getID(),
- $drequest->getLint(),
- $where,
+ implode(' AND ', $where),
$limit,
$offset);
}
diff --git a/src/applications/diffusion/request/DiffusionRequest.php b/src/applications/diffusion/request/DiffusionRequest.php
index 59817092d2..94610f3790 100644
--- a/src/applications/diffusion/request/DiffusionRequest.php
+++ b/src/applications/diffusion/request/DiffusionRequest.php
@@ -317,7 +317,7 @@ abstract class DiffusionRequest {
'path' => $this->getPath(),
'branch' => $this->getBranch(),
'commit' => $default_commit,
- 'lint' => $this->getLint(),
+ 'lint' => idx($params, 'lint', $this->getLint()),
);
foreach ($defaults as $key => $val) {
if (!isset($params[$key])) { // Overwrite NULL.
diff --git a/src/applications/diffusion/view/DiffusionBrowseTableView.php b/src/applications/diffusion/view/DiffusionBrowseTableView.php
index 17a8924f59..a5ab00bbfd 100644
--- a/src/applications/diffusion/view/DiffusionBrowseTableView.php
+++ b/src/applications/diffusion/view/DiffusionBrowseTableView.php
@@ -85,7 +85,7 @@ final class DiffusionBrowseTableView extends DiffusionView {
'%s',
$drequest->generateURI(array(
'action' => 'lint',
- 'lint' => '',
+ 'lint' => null,
)),
number_format($lint));
}
@@ -174,7 +174,7 @@ final class DiffusionBrowseTableView extends DiffusionView {
$commit = $path->getLastModifiedCommit();
if ($commit) {
$drequest = clone $request;
- $drequest->setPath($path->getPath().$dir_slash);
+ $drequest->setPath($request->getPath().$path->getPath().$dir_slash);
$dict = self::renderLastModifiedColumns(
$drequest,
$this->handles,