mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-19 03:50:54 +01:00
Move Push log rendering to SearchEngine
Summary: Ref T4986. Move push logs to a View, then have all the stuff that needs to use it use that View. Test Plan: Viewed push logs and transaction detail in Diffusion. Created a panel. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T4986 Differential Revision: https://secure.phabricator.com/D9104
This commit is contained in:
parent
23ada21d35
commit
82102cd95a
6 changed files with 159 additions and 128 deletions
|
@ -528,6 +528,7 @@ phutil_register_library_map(array(
|
||||||
'DiffusionPushEventViewController' => 'applications/diffusion/controller/DiffusionPushEventViewController.php',
|
'DiffusionPushEventViewController' => 'applications/diffusion/controller/DiffusionPushEventViewController.php',
|
||||||
'DiffusionPushLogController' => 'applications/diffusion/controller/DiffusionPushLogController.php',
|
'DiffusionPushLogController' => 'applications/diffusion/controller/DiffusionPushLogController.php',
|
||||||
'DiffusionPushLogListController' => 'applications/diffusion/controller/DiffusionPushLogListController.php',
|
'DiffusionPushLogListController' => 'applications/diffusion/controller/DiffusionPushLogListController.php',
|
||||||
|
'DiffusionPushLogListView' => 'applications/diffusion/view/DiffusionPushLogListView.php',
|
||||||
'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php',
|
'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php',
|
||||||
'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php',
|
'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php',
|
||||||
'DiffusionRefNotFoundException' => 'applications/diffusion/exception/DiffusionRefNotFoundException.php',
|
'DiffusionRefNotFoundException' => 'applications/diffusion/exception/DiffusionRefNotFoundException.php',
|
||||||
|
@ -3166,11 +3167,8 @@ phutil_register_library_map(array(
|
||||||
'DiffusionPathValidateController' => 'DiffusionController',
|
'DiffusionPathValidateController' => 'DiffusionController',
|
||||||
'DiffusionPushEventViewController' => 'DiffusionPushLogController',
|
'DiffusionPushEventViewController' => 'DiffusionPushLogController',
|
||||||
'DiffusionPushLogController' => 'DiffusionController',
|
'DiffusionPushLogController' => 'DiffusionController',
|
||||||
'DiffusionPushLogListController' =>
|
'DiffusionPushLogListController' => 'DiffusionPushLogController',
|
||||||
array(
|
'DiffusionPushLogListView' => 'AphrontView',
|
||||||
0 => 'DiffusionPushLogController',
|
|
||||||
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
|
|
||||||
),
|
|
||||||
'DiffusionQuery' => 'PhabricatorQuery',
|
'DiffusionQuery' => 'PhabricatorQuery',
|
||||||
'DiffusionRawDiffQuery' => 'DiffusionQuery',
|
'DiffusionRawDiffQuery' => 'DiffusionQuery',
|
||||||
'DiffusionRefNotFoundException' => 'Exception',
|
'DiffusionRefNotFoundException' => 'Exception',
|
||||||
|
|
|
@ -52,7 +52,12 @@ final class DiffusionPushEventViewController
|
||||||
->setHeaderText(pht('Pushed Commits'))
|
->setHeaderText(pht('Pushed Commits'))
|
||||||
->appendChild($commits_table);
|
->appendChild($commits_table);
|
||||||
|
|
||||||
$updates_table = $this->renderPushLogTable($event->getLogs());
|
$logs = $event->getLogs();
|
||||||
|
|
||||||
|
$updates_table = id(new DiffusionPushLogListView())
|
||||||
|
->setUser($viewer)
|
||||||
|
->setLogs($logs)
|
||||||
|
->setHandles($this->loadViewerHandles(mpull($logs, 'getPusherPHID')));
|
||||||
|
|
||||||
$update_box = id(new PHUIObjectBoxView())
|
$update_box = id(new PHUIObjectBoxView())
|
||||||
->setHeaderText(pht('All Pushed Updates'))
|
->setHeaderText(pht('All Pushed Updates'))
|
||||||
|
|
|
@ -2,111 +2,4 @@
|
||||||
|
|
||||||
abstract class DiffusionPushLogController extends DiffusionController {
|
abstract class DiffusionPushLogController extends DiffusionController {
|
||||||
|
|
||||||
public function renderPushLogTable(array $logs) {
|
|
||||||
$viewer = $this->getRequest()->getUser();
|
|
||||||
|
|
||||||
$this->loadHandles(mpull($logs, 'getPusherPHID'));
|
|
||||||
|
|
||||||
// Figure out which repositories are editable. We only let you see remote
|
|
||||||
// IPs if you have edit capability on a repository.
|
|
||||||
$editable_repos = array();
|
|
||||||
if ($logs) {
|
|
||||||
$editable_repos = id(new PhabricatorRepositoryQuery())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->requireCapabilities(
|
|
||||||
array(
|
|
||||||
PhabricatorPolicyCapability::CAN_VIEW,
|
|
||||||
PhabricatorPolicyCapability::CAN_EDIT,
|
|
||||||
))
|
|
||||||
->withPHIDs(mpull($logs, 'getRepositoryPHID'))
|
|
||||||
->execute();
|
|
||||||
$editable_repos = mpull($editable_repos, null, 'getPHID');
|
|
||||||
}
|
|
||||||
|
|
||||||
$rows = array();
|
|
||||||
foreach ($logs as $log) {
|
|
||||||
|
|
||||||
// Reveal this if it's valid and the user can edit the repository.
|
|
||||||
$remote_addr = '-';
|
|
||||||
if (isset($editable_repos[$log->getRepositoryPHID()])) {
|
|
||||||
$remote_long = $log->getPushEvent()->getRemoteAddress();
|
|
||||||
if ($remote_long) {
|
|
||||||
$remote_addr = long2ip($remote_long);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$event_id = $log->getPushEvent()->getID();
|
|
||||||
|
|
||||||
$callsign = $log->getRepository()->getCallsign();
|
|
||||||
$rows[] = array(
|
|
||||||
phutil_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => $this->getApplicationURI('pushlog/view/'.$event_id.'/'),
|
|
||||||
),
|
|
||||||
$event_id),
|
|
||||||
phutil_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => $this->getApplicationURI($callsign.'/'),
|
|
||||||
),
|
|
||||||
$callsign),
|
|
||||||
$this->getHandle($log->getPusherPHID())->renderLink(),
|
|
||||||
$remote_addr,
|
|
||||||
$log->getPushEvent()->getRemoteProtocol(),
|
|
||||||
$log->getRefType(),
|
|
||||||
$log->getRefName(),
|
|
||||||
phutil_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '/r'.$callsign.$log->getRefOld(),
|
|
||||||
),
|
|
||||||
$log->getRefOldShort()),
|
|
||||||
phutil_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '/r'.$callsign.$log->getRefNew(),
|
|
||||||
),
|
|
||||||
$log->getRefNewShort()),
|
|
||||||
|
|
||||||
// TODO: Make these human-readable.
|
|
||||||
$log->getChangeFlags(),
|
|
||||||
$log->getPushEvent()->getRejectCode(),
|
|
||||||
phabricator_datetime($log->getEpoch(), $viewer),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$table = id(new AphrontTableView($rows))
|
|
||||||
->setHeaders(
|
|
||||||
array(
|
|
||||||
pht('Push'),
|
|
||||||
pht('Repository'),
|
|
||||||
pht('Pusher'),
|
|
||||||
pht('From'),
|
|
||||||
pht('Via'),
|
|
||||||
pht('Type'),
|
|
||||||
pht('Name'),
|
|
||||||
pht('Old'),
|
|
||||||
pht('New'),
|
|
||||||
pht('Flags'),
|
|
||||||
pht('Code'),
|
|
||||||
pht('Date'),
|
|
||||||
))
|
|
||||||
->setColumnClasses(
|
|
||||||
array(
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'wide',
|
|
||||||
'n',
|
|
||||||
'n',
|
|
||||||
'date',
|
|
||||||
));
|
|
||||||
|
|
||||||
return $table;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
final class DiffusionPushLogListController extends DiffusionPushLogController
|
final class DiffusionPushLogListController extends DiffusionPushLogController {
|
||||||
implements PhabricatorApplicationSearchResultsControllerInterface {
|
|
||||||
|
|
||||||
private $queryKey;
|
private $queryKey;
|
||||||
|
|
||||||
|
@ -23,19 +22,6 @@ final class DiffusionPushLogListController extends DiffusionPushLogController
|
||||||
return $this->delegateToController($controller);
|
return $this->delegateToController($controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderResultsList(
|
|
||||||
array $logs,
|
|
||||||
PhabricatorSavedQuery $query) {
|
|
||||||
|
|
||||||
$table = $this->renderPushLogTable($logs);
|
|
||||||
|
|
||||||
$box = id(new PHUIBoxView())
|
|
||||||
->addMargin(PHUI::MARGIN_LARGE)
|
|
||||||
->appendChild($table);
|
|
||||||
|
|
||||||
return $box;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function buildSideNavView($for_app = false) {
|
public function buildSideNavView($for_app = false) {
|
||||||
$viewer = $this->getRequest()->getUser();
|
$viewer = $this->getRequest()->getUser();
|
||||||
|
|
||||||
|
|
126
src/applications/diffusion/view/DiffusionPushLogListView.php
Normal file
126
src/applications/diffusion/view/DiffusionPushLogListView.php
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class DiffusionPushLogListView extends AphrontView {
|
||||||
|
|
||||||
|
private $logs;
|
||||||
|
private $handles;
|
||||||
|
|
||||||
|
public function setLogs(array $logs) {
|
||||||
|
assert_instances_of($logs, 'PhabricatorRepositoryPushLog');
|
||||||
|
$this->logs = $logs;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setHandles(array $handles) {
|
||||||
|
$this->handles = $handles;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
$logs = $this->logs;
|
||||||
|
$viewer = $this->getUser();
|
||||||
|
$handles = $this->handles;
|
||||||
|
|
||||||
|
// Figure out which repositories are editable. We only let you see remote
|
||||||
|
// IPs if you have edit capability on a repository.
|
||||||
|
$editable_repos = array();
|
||||||
|
if ($logs) {
|
||||||
|
$editable_repos = id(new PhabricatorRepositoryQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->requireCapabilities(
|
||||||
|
array(
|
||||||
|
PhabricatorPolicyCapability::CAN_VIEW,
|
||||||
|
PhabricatorPolicyCapability::CAN_EDIT,
|
||||||
|
))
|
||||||
|
->withPHIDs(mpull($logs, 'getRepositoryPHID'))
|
||||||
|
->execute();
|
||||||
|
$editable_repos = mpull($editable_repos, null, 'getPHID');
|
||||||
|
}
|
||||||
|
|
||||||
|
$rows = array();
|
||||||
|
foreach ($logs as $log) {
|
||||||
|
|
||||||
|
// Reveal this if it's valid and the user can edit the repository.
|
||||||
|
$remote_addr = '-';
|
||||||
|
if (isset($editable_repos[$log->getRepositoryPHID()])) {
|
||||||
|
$remote_long = $log->getPushEvent()->getRemoteAddress();
|
||||||
|
if ($remote_long) {
|
||||||
|
$remote_addr = long2ip($remote_long);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$event_id = $log->getPushEvent()->getID();
|
||||||
|
|
||||||
|
$callsign = $log->getRepository()->getCallsign();
|
||||||
|
$rows[] = array(
|
||||||
|
phutil_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => '/diffusion/pushlog/view/'.$event_id.'/',
|
||||||
|
),
|
||||||
|
$event_id),
|
||||||
|
phutil_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => '/diffusion/'.$callsign.'/',
|
||||||
|
),
|
||||||
|
$callsign),
|
||||||
|
$handles[$log->getPusherPHID()]->renderLink(),
|
||||||
|
$remote_addr,
|
||||||
|
$log->getPushEvent()->getRemoteProtocol(),
|
||||||
|
$log->getRefType(),
|
||||||
|
$log->getRefName(),
|
||||||
|
phutil_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => '/r'.$callsign.$log->getRefOld(),
|
||||||
|
),
|
||||||
|
$log->getRefOldShort()),
|
||||||
|
phutil_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => '/r'.$callsign.$log->getRefNew(),
|
||||||
|
),
|
||||||
|
$log->getRefNewShort()),
|
||||||
|
|
||||||
|
// TODO: Make these human-readable.
|
||||||
|
$log->getChangeFlags(),
|
||||||
|
$log->getPushEvent()->getRejectCode(),
|
||||||
|
phabricator_datetime($log->getEpoch(), $viewer),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$table = id(new AphrontTableView($rows))
|
||||||
|
->setHeaders(
|
||||||
|
array(
|
||||||
|
pht('Push'),
|
||||||
|
pht('Repository'),
|
||||||
|
pht('Pusher'),
|
||||||
|
pht('From'),
|
||||||
|
pht('Via'),
|
||||||
|
pht('Type'),
|
||||||
|
pht('Name'),
|
||||||
|
pht('Old'),
|
||||||
|
pht('New'),
|
||||||
|
pht('Flags'),
|
||||||
|
pht('Code'),
|
||||||
|
pht('Date'),
|
||||||
|
))
|
||||||
|
->setColumnClasses(
|
||||||
|
array(
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'wide',
|
||||||
|
'n',
|
||||||
|
'n',
|
||||||
|
'date',
|
||||||
|
));
|
||||||
|
|
||||||
|
return $table;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -107,4 +107,27 @@ final class PhabricatorRepositoryPushLogSearchEngine
|
||||||
return parent::buildSavedQueryFromBuiltin($query_key);
|
return parent::buildSavedQueryFromBuiltin($query_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getRequiredHandlePHIDsForResultList(
|
||||||
|
array $logs,
|
||||||
|
PhabricatorSavedQuery $query) {
|
||||||
|
return mpull($logs, 'getPusherPHID');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function renderResultList(
|
||||||
|
array $logs,
|
||||||
|
PhabricatorSavedQuery $query,
|
||||||
|
array $handles) {
|
||||||
|
|
||||||
|
$table = id(new DiffusionPushLogListView())
|
||||||
|
->setUser($this->requireViewer())
|
||||||
|
->setHandles($handles)
|
||||||
|
->setLogs($logs);
|
||||||
|
|
||||||
|
$box = id(new PHUIBoxView())
|
||||||
|
->addMargin(PHUI::MARGIN_LARGE)
|
||||||
|
->appendChild($table);
|
||||||
|
|
||||||
|
return $box;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue