Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15426059
D20457.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
D20457.diff
View Options
diff --git a/src/applications/diffusion/controller/DiffusionBlameController.php b/src/applications/diffusion/controller/DiffusionBlameController.php
--- a/src/applications/diffusion/controller/DiffusionBlameController.php
+++ b/src/applications/diffusion/controller/DiffusionBlameController.php
@@ -36,27 +36,7 @@
$commit_map = mpull($commits, 'getCommitIdentifier', 'getPHID');
- $revisions = array();
- $revision_map = array();
- if ($commits) {
- $revision_ids = id(new DifferentialRevision())
- ->loadIDsByCommitPHIDs(array_keys($commit_map));
- if ($revision_ids) {
- $revisions = id(new DifferentialRevisionQuery())
- ->setViewer($viewer)
- ->withIDs($revision_ids)
- ->execute();
- $revisions = mpull($revisions, null, 'getID');
- }
-
- foreach ($revision_ids as $commit_phid => $revision_id) {
- // If the viewer can't actually see this revision, skip it.
- if (!isset($revisions[$revision_id])) {
- continue;
- }
- $revision_map[$commit_map[$commit_phid]] = $revision_id;
- }
- }
+ $revision_map = $this->loadRevisionsForCommits($commits);
$base_href = (string)$drequest->generateURI(
array(
@@ -75,8 +55,10 @@
$handle_phids[] = $commit->getAuthorDisplayPHID();
}
- foreach ($revisions as $revision) {
- $handle_phids[] = $revision->getAuthorPHID();
+ foreach ($revision_map as $revisions) {
+ foreach ($revisions as $revision) {
+ $handle_phids[] = $revision->getAuthorPHID();
+ }
}
$handles = $viewer->loadHandles($handle_phids);
@@ -84,13 +66,6 @@
$map = array();
$epochs = array();
foreach ($identifiers as $identifier) {
- $revision_id = idx($revision_map, $identifier);
- if ($revision_id) {
- $revision = idx($revisions, $revision_id);
- } else {
- $revision = null;
- }
-
$skip_href = $base_href.'?before='.$identifier;
$skip_link = javelin_tag(
@@ -115,6 +90,17 @@
$commit = idx($commits, $identifier);
+ $revision = null;
+ if ($commit) {
+ $revisions = idx($revision_map, $commit->getPHID());
+
+ // There may be multiple edges between this commit and revisions in the
+ // database. If there are, just pick one arbitrarily.
+ if ($revisions) {
+ $revision = head($revisions);
+ }
+ }
+
$author_phid = null;
if ($commit) {
@@ -281,4 +267,45 @@
}
}
+ private function loadRevisionsForCommits(array $commits) {
+ if (!$commits) {
+ return array();
+ }
+
+ $commit_phids = mpull($commits, 'getPHID');
+
+ $edge_query = id(new PhabricatorEdgeQuery())
+ ->withSourcePHIDs($commit_phids)
+ ->withEdgeTypes(
+ array(
+ DiffusionCommitHasRevisionEdgeType::EDGECONST,
+ ));
+ $edge_query->execute();
+
+ $revision_phids = $edge_query->getDestinationPHIDs();
+ if (!$revision_phids) {
+ return array();
+ }
+
+ $viewer = $this->getViewer();
+
+ $revisions = id(new DifferentialRevisionQuery())
+ ->setViewer($viewer)
+ ->withPHIDs($revision_phids)
+ ->execute();
+ $revisions = mpull($revisions, null, 'getPHID');
+
+ $map = array();
+ foreach ($commit_phids as $commit_phid) {
+ $revision_phids = $edge_query->getDestinationPHIDs(
+ array(
+ $commit_phid,
+ ));
+
+ $map[$commit_phid] = array_select_keys($revisions, $revision_phids);
+ }
+
+ return $map;
+ }
+
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 24, 6:55 AM (4 d, 4 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7388785
Default Alt Text
D20457.diff (3 KB)
Attached To
Mode
D20457: Move BlameController away from ancient "TABLE_COMMIT"
Attached
Detach File
Event Timeline
Log In to Comment