Page MenuHomePhabricator

D15930.id.diff
No OneTemporary

D15930.id.diff

diff --git a/src/applications/differential/query/DifferentialRevisionSearchEngine.php b/src/applications/differential/query/DifferentialRevisionSearchEngine.php
--- a/src/applications/differential/query/DifferentialRevisionSearchEngine.php
+++ b/src/applications/differential/query/DifferentialRevisionSearchEngine.php
@@ -153,6 +153,8 @@
$bucket = $this->getResultBucket($query);
+ $unlanded = $this->loadUnlandedDependencies($revisions);
+
$views = array();
if ($bucket) {
$bucket->setViewer($viewer);
@@ -187,6 +189,7 @@
foreach ($views as $view) {
$view->setHandles($handles);
+ $view->setUnlandedDependencies($unlanded);
}
if (count($views) == 1) {
@@ -223,4 +226,56 @@
return $view;
}
+ private function loadUnlandedDependencies(array $revisions) {
+ $status_accepted = ArcanistDifferentialRevisionStatus::ACCEPTED;
+
+ $phids = array();
+ foreach ($revisions as $revision) {
+ if ($revision->getStatus() != $status_accepted) {
+ continue;
+ }
+
+ $phids[] = $revision->getPHID();
+ }
+
+ if (!$phids) {
+ return array();
+ }
+
+ $query = id(new PhabricatorEdgeQuery())
+ ->withSourcePHIDs($phids)
+ ->withEdgeTypes(
+ array(
+ DifferentialRevisionDependsOnRevisionEdgeType::EDGECONST,
+ ));
+
+ $query->execute();
+
+ $revision_phids = $query->getDestinationPHIDs();
+ if (!$revision_phids) {
+ return array();
+ }
+
+ $viewer = $this->requireViewer();
+
+ $blocking_revisions = id(new DifferentialRevisionQuery())
+ ->setViewer($viewer)
+ ->withPHIDs($revision_phids)
+ ->withStatus(DifferentialRevisionQuery::STATUS_OPEN)
+ ->execute();
+ $blocking_revisions = mpull($blocking_revisions, null, 'getPHID');
+
+ $result = array();
+ foreach ($revisions as $revision) {
+ $revision_phid = $revision->getPHID();
+ $blocking_phids = $query->getDestinationPHIDs(array($revision_phid));
+ $blocking = array_select_keys($blocking_revisions, $blocking_phids);
+ if ($blocking) {
+ $result[$revision_phid] = $blocking;
+ }
+ }
+
+ return $result;
+ }
+
}
diff --git a/src/applications/differential/view/DifferentialRevisionListView.php b/src/applications/differential/view/DifferentialRevisionListView.php
--- a/src/applications/differential/view/DifferentialRevisionListView.php
+++ b/src/applications/differential/view/DifferentialRevisionListView.php
@@ -12,6 +12,16 @@
private $noDataString;
private $noBox;
private $background = null;
+ private $unlandedDependencies = array();
+
+ public function setUnlandedDependencies(array $unlanded_dependencies) {
+ $this->unlandedDependencies = $unlanded_dependencies;
+ return $this;
+ }
+
+ public function getUnlandedDependencies() {
+ return $this->unlandedDependencies;
+ }
public function setNoDataString($no_data_string) {
$this->noDataString = $no_data_string;
@@ -121,6 +131,16 @@
$author_handle = $this->handles[$revision->getAuthorPHID()];
$item->addByline(pht('Author: %s', $author_handle->renderLink()));
+ $unlanded = idx($this->unlandedDependencies, $phid);
+ if ($unlanded) {
+ $item->addAttribute(
+ array(
+ id(new PHUIIconView())->setIcon('fa-chain-broken', 'red'),
+ ' ',
+ pht('Open Dependencies'),
+ ));
+ }
+
$reviewers = array();
// TODO: As above, this should be based on `getReviewerStatus()`.
foreach ($revision->getReviewers() as $reviewer) {

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 27, 12:11 AM (3 d, 17 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7688655
Default Alt Text
D15930.id.diff (3 KB)

Event Timeline