Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F2895108
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Advanced/Developer...
View Handle
View Hovercard
Size
13 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
rP Phorge
Attached
Detach File
Event Timeline
Log In to Comment