Page MenuHomePhorge

No OneTemporary

diff --git a/src/applications/diffusion/controller/DiffusionPushEventViewController.php b/src/applications/diffusion/controller/DiffusionPushEventViewController.php
index 027cf16bbe..c5eb6368b4 100644
--- a/src/applications/diffusion/controller/DiffusionPushEventViewController.php
+++ b/src/applications/diffusion/controller/DiffusionPushEventViewController.php
@@ -1,178 +1,177 @@
<?php
final class DiffusionPushEventViewController
extends DiffusionPushLogController {
public function shouldAllowPublic() {
return true;
}
public function handleRequest(AphrontRequest $request) {
$viewer = $this->getViewer();
$event = id(new PhabricatorRepositoryPushEventQuery())
->setViewer($viewer)
->withIDs(array($request->getURIData('id')))
->needLogs(true)
->executeOne();
if (!$event) {
return new Aphront404Response();
}
$repository = $event->getRepository();
$title = pht('Push %d', $event->getID());
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(
$repository->getName(),
$repository->getURI());
$crumbs->addTextCrumb(
pht('Push Logs'),
$this->getApplicationURI(
'pushlog/?repositories='.$repository->getMonogram()));
$crumbs->addTextCrumb($title);
$event_properties = $this->buildPropertyList($event);
$detail_box = id(new PHUIObjectBoxView())
->setHeaderText($title)
->addPropertyList($event_properties);
$commits = $this->loadCommits($event);
$commits_table = $this->renderCommitsTable($event, $commits);
$commits_box = id(new PHUIObjectBoxView())
->setHeaderText(pht('Pushed Commits'))
->setTable($commits_table);
$logs = $event->getLogs();
$updates_table = id(new DiffusionPushLogListView())
->setUser($viewer)
- ->setLogs($logs)
- ->setHandles($this->loadViewerHandles(mpull($logs, 'getPusherPHID')));
+ ->setLogs($logs);
$update_box = id(new PHUIObjectBoxView())
->setHeaderText(pht('All Pushed Updates'))
->setTable($updates_table);
return $this->newPage()
->setTitle($title)
->setCrumbs($crumbs)
->appendChild(
array(
$detail_box,
$commits_box,
$update_box,
));
}
private function buildPropertyList(PhabricatorRepositoryPushEvent $event) {
$viewer = $this->getRequest()->getUser();
$view = new PHUIPropertyListView();
$view->addProperty(
pht('Pushed At'),
phabricator_datetime($event->getEpoch(), $viewer));
$view->addProperty(
pht('Pushed By'),
$viewer->renderHandle($event->getPusherPHID()));
$view->addProperty(
pht('Pushed Via'),
$event->getRemoteProtocol());
return $view;
}
private function loadCommits(PhabricatorRepositoryPushEvent $event) {
$viewer = $this->getRequest()->getUser();
$identifiers = array();
foreach ($event->getLogs() as $log) {
if ($log->getRefType() == PhabricatorRepositoryPushLog::REFTYPE_COMMIT) {
$identifiers[] = $log->getRefNew();
}
}
if (!$identifiers) {
return array();
}
// NOTE: Commits may not have been parsed/discovered yet. We need to return
// the identifiers no matter what. If possible, we'll also return the
// corresponding commits.
$commits = id(new DiffusionCommitQuery())
->setViewer($viewer)
->withRepository($event->getRepository())
->withIdentifiers($identifiers)
->execute();
$commits = mpull($commits, null, 'getCommitIdentifier');
$results = array();
foreach ($identifiers as $identifier) {
$results[$identifier] = idx($commits, $identifier);
}
return $results;
}
private function renderCommitsTable(
PhabricatorRepositoryPushEvent $event,
array $commits) {
$viewer = $this->getRequest()->getUser();
$repository = $event->getRepository();
$rows = array();
foreach ($commits as $identifier => $commit) {
if ($commit) {
$partial_import = PhabricatorRepositoryCommit::IMPORTED_MESSAGE |
PhabricatorRepositoryCommit::IMPORTED_CHANGE;
if ($commit->isPartiallyImported($partial_import)) {
$summary = AphrontTableView::renderSingleDisplayLine(
$commit->getSummary());
} else {
$summary = phutil_tag('em', array(), pht('Importing...'));
}
} else {
$summary = phutil_tag('em', array(), pht('Discovering...'));
}
$commit_name = $repository->formatCommitName($identifier);
if ($commit) {
$commit_name = phutil_tag(
'a',
array(
'href' => '/'.$commit_name,
),
$commit_name);
}
$rows[] = array(
$commit_name,
$summary,
);
}
$table = id(new AphrontTableView($rows))
->setNoDataString(pht("This push didn't push any new commits."))
->setHeaders(
array(
pht('Commit'),
pht('Summary'),
))
->setColumnClasses(
array(
'n',
'wide',
));
return $table;
}
}
diff --git a/src/applications/diffusion/view/DiffusionPushLogListView.php b/src/applications/diffusion/view/DiffusionPushLogListView.php
index b3d78f2369..303f0519f6 100644
--- a/src/applications/diffusion/view/DiffusionPushLogListView.php
+++ b/src/applications/diffusion/view/DiffusionPushLogListView.php
@@ -1,149 +1,153 @@
<?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;
+ $viewer = $this->getViewer();
+
+ $handle_phids = array();
+ foreach ($logs as $log) {
+ $handle_phids[] = $log->getPusherPHID();
+ $device_phid = $log->getDevicePHID();
+ if ($device_phid) {
+ $handle_phids[] = $device_phid;
+ }
+ }
+
+ $handles = $viewer->loadHandles($handle_phids);
// 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();
$any_host = false;
foreach ($logs as $log) {
$repository = $log->getRepository();
// Reveal this if it's valid and the user can edit the repository.
$remote_address = '-';
if (isset($editable_repos[$log->getRepositoryPHID()])) {
$remote_address = $log->getPushEvent()->getRemoteAddress();
}
$event_id = $log->getPushEvent()->getID();
$old_ref_link = null;
if ($log->getRefOld() != DiffusionCommitHookEngine::EMPTY_HASH) {
$old_ref_link = phutil_tag(
'a',
array(
'href' => $repository->getCommitURI($log->getRefOld()),
),
$log->getRefOldShort());
}
$device_phid = $log->getDevicePHID();
if ($device_phid) {
- $device = $handles[$device_phid]->renderLink();
+ $device = $viewer->renderHandle($device_phid);
$any_host = true;
} else {
$device = null;
}
$rows[] = array(
phutil_tag(
'a',
array(
'href' => '/diffusion/pushlog/view/'.$event_id.'/',
),
$event_id),
phutil_tag(
'a',
array(
'href' => $repository->getURI(),
),
$repository->getDisplayName()),
- $handles[$log->getPusherPHID()]->renderLink(),
+ $viewer->renderHandle($log->getPusherPHID()),
$remote_address,
$log->getPushEvent()->getRemoteProtocol(),
$device,
$log->getRefType(),
$log->getRefName(),
$old_ref_link,
phutil_tag(
'a',
array(
'href' => $repository->getCommitURI($log->getRefNew()),
),
$log->getRefNewShort()),
// TODO: Make these human-readable.
$log->getChangeFlags(),
$log->getPushEvent()->getRejectCode(),
$viewer->formatShortDateTime($log->getEpoch()),
);
}
$table = id(new AphrontTableView($rows))
->setHeaders(
array(
pht('Push'),
pht('Repository'),
pht('Pusher'),
pht('From'),
pht('Via'),
pht('Host'),
pht('Type'),
pht('Name'),
pht('Old'),
pht('New'),
pht('Flags'),
pht('Code'),
pht('Date'),
))
->setColumnClasses(
array(
'',
'',
'',
'',
'',
'',
'',
'wide',
'n',
'n',
'right',
))
->setColumnVisibility(
array(
true,
true,
true,
true,
true,
$any_host,
));
return $table;
}
}
diff --git a/src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php b/src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php
index 320558de21..8fd3baeb54 100644
--- a/src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php
+++ b/src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php
@@ -1,120 +1,108 @@
<?php
final class PhabricatorRepositoryPushLogSearchEngine
extends PhabricatorApplicationSearchEngine {
public function getResultTypeDescription() {
return pht('Push Logs');
}
public function getApplicationClassName() {
return 'PhabricatorDiffusionApplication';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery();
$saved->setParameter(
'repositoryPHIDs',
$this->readPHIDsFromRequest(
$request,
'repositories',
array(
PhabricatorRepositoryRepositoryPHIDType::TYPECONST,
)));
$saved->setParameter(
'pusherPHIDs',
$this->readUsersFromRequest(
$request,
'pushers'));
return $saved;
}
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
$query = id(new PhabricatorRepositoryPushLogQuery());
$repository_phids = $saved->getParameter('repositoryPHIDs');
if ($repository_phids) {
$query->withRepositoryPHIDs($repository_phids);
}
$pusher_phids = $saved->getParameter('pusherPHIDs');
if ($pusher_phids) {
$query->withPusherPHIDs($pusher_phids);
}
return $query;
}
public function buildSearchForm(
AphrontFormView $form,
PhabricatorSavedQuery $saved_query) {
$repository_phids = $saved_query->getParameter('repositoryPHIDs', array());
$pusher_phids = $saved_query->getParameter('pusherPHIDs', array());
$form
->appendControl(
id(new AphrontFormTokenizerControl())
->setDatasource(new DiffusionRepositoryDatasource())
->setName('repositories')
->setLabel(pht('Repositories'))
->setValue($repository_phids))
->appendControl(
id(new AphrontFormTokenizerControl())
->setDatasource(new PhabricatorPeopleDatasource())
->setName('pushers')
->setLabel(pht('Pushers'))
->setValue($pusher_phids));
}
protected function getURI($path) {
return '/diffusion/pushlog/'.$path;
}
protected function getBuiltinQueryNames() {
return array(
'all' => pht('All Push Logs'),
);
}
public function buildSavedQueryFromBuiltin($query_key) {
$query = $this->newSavedQuery();
$query->setQueryKey($query_key);
switch ($query_key) {
case 'all':
return $query;
}
return parent::buildSavedQueryFromBuiltin($query_key);
}
- protected function getRequiredHandlePHIDsForResultList(
- array $logs,
- PhabricatorSavedQuery $query) {
- $phids = array();
- $phids[] = mpull($logs, 'getPusherPHID');
- $phids[] = mpull($logs, 'getDevicePHID');
- $phids = array_mergev($phids);
- $phids = array_filter($phids);
- return $phids;
- }
-
protected function renderResultList(
array $logs,
PhabricatorSavedQuery $query,
array $handles) {
$table = id(new DiffusionPushLogListView())
- ->setUser($this->requireViewer())
- ->setHandles($handles)
+ ->setViewer($this->requireViewer())
->setLogs($logs);
return id(new PhabricatorApplicationSearchResultView())
->setTable($table);
}
}

File Metadata

Mime Type
text/x-diff
Expires
Jan 19 2025, 20:56 (6 w, 1 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1128673
Default Alt Text
(13 KB)

Event Timeline