diff --git a/src/applications/differential/application/PhabricatorApplicationDifferential.php b/src/applications/differential/application/PhabricatorApplicationDifferential.php index c1b032e271..baa795589a 100644 --- a/src/applications/differential/application/PhabricatorApplicationDifferential.php +++ b/src/applications/differential/application/PhabricatorApplicationDifferential.php @@ -73,13 +73,14 @@ final class PhabricatorApplicationDifferential extends PhabricatorApplication { ->withStatus(DifferentialRevisionQuery::STATUS_OPEN) ->execute(); - list($active, $waiting) = DifferentialRevisionQuery::splitResponsible( - $revisions, - array($user->getPHID())); + list($blocking, $active, $waiting) = + DifferentialRevisionQuery::splitResponsible( + $revisions, + array($user->getPHID())); $status = array(); - $active = count($active); + $active = count($blocking) + count($active); $type = $active ? PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION : PhabricatorApplicationStatusView::TYPE_EMPTY; diff --git a/src/applications/differential/controller/DifferentialRevisionListController.php b/src/applications/differential/controller/DifferentialRevisionListController.php index 8e7972c6df..59188c7d04 100644 --- a/src/applications/differential/controller/DifferentialRevisionListController.php +++ b/src/applications/differential/controller/DifferentialRevisionListController.php @@ -435,9 +435,19 @@ final class DifferentialRevisionListController extends DifferentialController { $views = array(); switch ($filter) { case 'active': - list($active, $waiting) = DifferentialRevisionQuery::splitResponsible( - $revisions, - $user_phids); + list($blocking, $active, $waiting) = + DifferentialRevisionQuery::splitResponsible( + $revisions, + $user_phids); + + $view = id(clone $template) + ->setHighlightAge(true) + ->setRevisions($blocking) + ->loadAssets(); + $views[] = array( + 'title' => pht('Blocking Others'), + 'view' => $view, + ); $view = id(clone $template) ->setHighlightAge(true) diff --git a/src/applications/differential/query/DifferentialRevisionQuery.php b/src/applications/differential/query/DifferentialRevisionQuery.php index 56f85464bc..3b65ce72fd 100644 --- a/src/applications/differential/query/DifferentialRevisionQuery.php +++ b/src/applications/differential/query/DifferentialRevisionQuery.php @@ -892,13 +892,14 @@ final class DifferentialRevisionQuery { } public static function splitResponsible(array $revisions, array $user_phids) { + $blocking = array(); $active = array(); $waiting = array(); $status_review = ArcanistDifferentialRevisionStatus::NEEDS_REVIEW; - // Bucket revisions into $active (revisions you need to do something - // about) and $waiting (revisions you're waiting on someone else to do - // something about). + // Bucket revisions into $blocking (revisions where you are blocking + // others), $active (revisions you need to do something about) and $waiting + // (revisions you're waiting on someone else to do something about). foreach ($revisions as $revision) { $needs_review = ($revision->getStatus() == $status_review); $filter_is_author = in_array($revision->getAuthorPHID(), $user_phids); @@ -907,13 +908,17 @@ final class DifferentialRevisionQuery { // true, the user needs to act on it. Otherwise, they're waiting on // it. if ($needs_review ^ $filter_is_author) { - $active[] = $revision; + if ($needs_review) { + $blocking[] = $revision; + } else { + $active[] = $revision; + } } else { $waiting[] = $revision; } } - return array($active, $waiting); + return array($blocking, $active, $waiting); } diff --git a/src/applications/directory/controller/PhabricatorDirectoryMainController.php b/src/applications/directory/controller/PhabricatorDirectoryMainController.php index 5d8f01576d..a59914bfec 100644 --- a/src/applications/directory/controller/PhabricatorDirectoryMainController.php +++ b/src/applications/directory/controller/PhabricatorDirectoryMainController.php @@ -183,11 +183,11 @@ final class PhabricatorDirectoryMainController $revision_query->setLimit(null); $revisions = $revision_query->execute(); - list($active, $waiting) = DifferentialRevisionQuery::splitResponsible( - $revisions, - array($user_phid)); + list($blocking, $active, ) = DifferentialRevisionQuery::splitResponsible( + $revisions, + array($user_phid)); - if (!$active) { + if (!$blocking && !$active) { return $this->renderMiniPanel( 'No Waiting Revisions', 'No revisions are waiting on you.'); @@ -208,7 +208,7 @@ final class PhabricatorDirectoryMainController $revision_view = id(new DifferentialRevisionListView()) ->setHighlightAge(true) - ->setRevisions($active) + ->setRevisions(array_merge($blocking, $active)) ->setFields(DifferentialRevisionListView::getDefaultFields()) ->setUser($user) ->loadAssets();