diff --git a/src/applications/differential/storage/DifferentialRevision.php b/src/applications/differential/storage/DifferentialRevision.php index 9861e23496..6ef71276be 100644 --- a/src/applications/differential/storage/DifferentialRevision.php +++ b/src/applications/differential/storage/DifferentialRevision.php @@ -69,6 +69,18 @@ final class DifferentialRevision extends DifferentialDAO { return $this; } + public function loadIDsByCommitPHIDs($phids) { + if (!$phids) { + return array(); + } + $revision_ids = queryfx_all( + $this->establishConnection('r'), + 'SELECT * FROM %T WHERE commitPHID IN (%Ls)', + self::TABLE_COMMIT, + $phids); + return ipull($revision_ids, 'revisionID', 'commitPHID'); + } + public function loadCommitPHIDs() { if (!$this->getID()) { return ($this->commits = array()); diff --git a/src/applications/diffusion/controller/DiffusionBrowseFileController.php b/src/applications/diffusion/controller/DiffusionBrowseFileController.php index 9eab88f5c3..6207cb9e09 100644 --- a/src/applications/diffusion/controller/DiffusionBrowseFileController.php +++ b/src/applications/diffusion/controller/DiffusionBrowseFileController.php @@ -388,20 +388,13 @@ final class DiffusionBrowseFileController extends DiffusionController { $commits = mpull($commits, null, 'getCommitIdentifier'); } - $revision_ids = array(); + $revision_ids = id(new DifferentialRevision()) + ->loadIDsByCommitPHIDs(mpull($commits, 'getPHID')); $revisions = array(); - if ($commits) { - $revision_ids = queryfx_all( - id(new DifferentialRevision())->establishConnection('r'), - 'SELECT * FROM %T WHERE commitPHID IN (%Ls)', - DifferentialRevision::TABLE_COMMIT, - mpull($commits, 'getPHID')); - if ($revision_ids) { - $revision_ids = ipull($revision_ids, 'revisionID', 'commitPHID'); - $revisions = id(new DifferentialRevision())->loadAllWhere( - 'id IN (%Ld)', - $revision_ids); - } + if ($revision_ids) { + $revisions = id(new DifferentialRevision())->loadAllWhere( + 'id IN (%Ld)', + $revision_ids); } $request = $this->getRequest(); diff --git a/src/applications/diffusion/controller/DiffusionCommitController.php b/src/applications/diffusion/controller/DiffusionCommitController.php index 874397a539..7d6c89180f 100644 --- a/src/applications/diffusion/controller/DiffusionCommitController.php +++ b/src/applications/diffusion/controller/DiffusionCommitController.php @@ -682,6 +682,7 @@ final class DiffusionCommitController extends DiffusionController { $history_table = new DiffusionHistoryTableView(); $history_table->setDiffusionRequest($drequest); $history_table->setHistory($merges); + $history_table->loadRevisions(); $phids = $history_table->getRequiredHandlePHIDs(); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); diff --git a/src/applications/diffusion/controller/DiffusionHistoryController.php b/src/applications/diffusion/controller/DiffusionHistoryController.php index 5c7b31bd83..bdc6d75c02 100644 --- a/src/applications/diffusion/controller/DiffusionHistoryController.php +++ b/src/applications/diffusion/controller/DiffusionHistoryController.php @@ -81,6 +81,7 @@ final class DiffusionHistoryController extends DiffusionController { $history_table = new DiffusionHistoryTableView(); $history_table->setDiffusionRequest($drequest); $history_table->setHistory($history); + $history_table->loadRevisions(); $phids = $history_table->getRequiredHandlePHIDs(); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); diff --git a/src/applications/diffusion/controller/DiffusionRepositoryController.php b/src/applications/diffusion/controller/DiffusionRepositoryController.php index dc994ba090..5af5cc6bf6 100644 --- a/src/applications/diffusion/controller/DiffusionRepositoryController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryController.php @@ -70,6 +70,7 @@ final class DiffusionRepositoryController extends DiffusionController { $history_table->setDiffusionRequest($drequest); $history_table->setHandles($handles); $history_table->setHistory($history); + $history_table->loadRevisions(); $history_table->setParents($history_query->getParents()); $history_table->setIsHead(true); diff --git a/src/applications/diffusion/view/DiffusionHistoryTableView.php b/src/applications/diffusion/view/DiffusionHistoryTableView.php index 7ee28b8920..bd2a113929 100644 --- a/src/applications/diffusion/view/DiffusionHistoryTableView.php +++ b/src/applications/diffusion/view/DiffusionHistoryTableView.php @@ -19,6 +19,7 @@ final class DiffusionHistoryTableView extends DiffusionView { private $history; + private $revisions = array(); private $handles = array(); private $isHead; private $parents; @@ -29,6 +30,18 @@ final class DiffusionHistoryTableView extends DiffusionView { return $this; } + public function loadRevisions() { + $commit_phids = array(); + foreach ($this->history as $item) { + if ($item->getCommit()) { + $commit_phids[] = $item->getCommit()->getPHID(); + } + } + $this->revisions = id(new DifferentialRevision()) + ->loadIDsByCommitPHIDs($commit_phids); + return $this; + } + public function setHandles(array $handles) { assert_instances_of($handles, 'PhabricatorObjectHandle'); $this->handles = $handles; @@ -134,6 +147,9 @@ final class DiffusionHistoryTableView extends DiffusionView { self::linkCommit( $drequest->getRepository(), $history->getCommitIdentifier()), + ($commit ? + self::linkRevision(idx($this->revisions, $commit->getPHID())) : + null), $change, $date, $time, @@ -150,6 +166,7 @@ final class DiffusionHistoryTableView extends DiffusionView { 'Browse', '', 'Commit', + 'Revision', 'Change', 'Date', 'Time', @@ -161,6 +178,7 @@ final class DiffusionHistoryTableView extends DiffusionView { '', 'threads', 'n', + 'n', '', '', 'right', diff --git a/src/applications/diffusion/view/DiffusionView.php b/src/applications/diffusion/view/DiffusionView.php index 79b1377a90..5cb6d93af1 100644 --- a/src/applications/diffusion/view/DiffusionView.php +++ b/src/applications/diffusion/view/DiffusionView.php @@ -134,4 +134,17 @@ abstract class DiffusionView extends AphrontView { $commit_name); } + final public static function linkRevision($id) { + if (!$id) { + return null; + } + + return phutil_render_tag( + 'a', + array( + 'href' => "/D{$id}", + ), + "D{$id}"); + } + }