Index: src/__celerity_resource_map__.php =================================================================== --- src/__celerity_resource_map__.php +++ src/__celerity_resource_map__.php @@ -1154,7 +1154,7 @@ ), 'diffusion-source-css' => array( - 'uri' => '/res/f4a2f867/rsrc/css/application/diffusion/diffusion-source.css', + 'uri' => '/res/5076c269/rsrc/css/application/diffusion/diffusion-source.css', 'type' => 'css', 'requires' => array( Index: src/applications/diffusion/controller/DiffusionBrowseFileController.php =================================================================== --- src/applications/diffusion/controller/DiffusionBrowseFileController.php +++ src/applications/diffusion/controller/DiffusionBrowseFileController.php @@ -548,35 +548,49 @@ ++$line_number; } + $request = $this->getRequest(); + $viewer = $request->getUser(); + $commits = array_filter(ipull($display, 'commit')); if ($commits) { - $commits = id(new PhabricatorAuditCommitQuery()) - ->withIdentifiers($drequest->getRepository()->getID(), $commits) - ->needCommitData(true) + $commits = id(new DiffusionCommitQuery()) + ->setViewer($viewer) + ->withRepositoryIDs(array($drequest->getRepository()->getID())) + ->withIdentifiers($commits) ->execute(); $commits = mpull($commits, null, 'getCommitIdentifier'); } - $request = $this->getRequest(); - $user = $request->getUser(); - $revision_ids = id(new DifferentialRevision()) ->loadIDsByCommitPHIDs(mpull($commits, 'getPHID')); $revisions = array(); if ($revision_ids) { $revisions = id(new DifferentialRevisionQuery()) - ->setViewer($user) + ->setViewer($viewer) ->withIDs($revision_ids) ->execute(); } + $phids = array(); + foreach ($commits as $commit) { + if ($commit->getAuthorPHID()) { + $phids[] = $commit->getAuthorPHID(); + } + } + foreach ($revisions as $revision) { + if ($revision->getAuthorPHID()) { + $phids[] = $revision->getAuthorPHID(); + } + } + $handles = $this->loadViewerHandles($phids); + Javelin::initBehavior('phabricator-oncopy', array()); $engine = null; $inlines = array(); if ($this->getRequest()->getStr('lint') !== null && $this->lintMessages) { $engine = new PhabricatorMarkupEngine(); - $engine->setViewer($user); + $engine->setViewer($viewer); foreach ($this->lintMessages as $message) { $inline = id(new PhabricatorAuditInlineComment()) @@ -624,15 +638,15 @@ if (idx($line, 'commit')) { $commit = $line['commit']; - $summary = 'Unknown'; if (idx($commits, $commit)) { - $summary = $commits[$commit]->getCommitData()->getSummary(); + $tooltip = $this->renderCommitTooltip( + $commits[$commit], + $handles, + $line['author']); + } else { + $tooltip = null; } - $tooltip = phabricator_date( - $line['epoch'], - $user)." \xC2\xB7 ".$summary; - Javelin::initBehavior('phabricator-tooltips', array()); require_celerity_resource('aphront-tooltip-css'); @@ -660,26 +674,21 @@ if ($revision_id) { $revision = idx($revisions, $revision_id); - if (!$revision) { - $tooltip = pht('(Invalid revision)'); - } else { - $tooltip = - phabricator_date($revision->getDateModified(), $user). - " \xC2\xB7 ". - $revision->getTitle(); - } - $revision_link = javelin_tag( - 'a', - array( - 'href' => '/D'.$revision_id, - 'sigil' => 'has-tooltip', - 'meta' => array( - 'tip' => $tooltip, - 'align' => 'E', - 'size' => 600, + if ($revision) { + $tooltip = $this->renderRevisionTooltip($revision, $handles); + $revision_link = javelin_tag( + 'a', + array( + 'href' => '/D'.$revision->getID(), + 'sigil' => 'has-tooltip', + 'meta' => array( + 'tip' => $tooltip, + 'align' => 'E', + 'size' => 600, + ), ), - ), - 'D'.$revision_id); + 'D'.$revision->getID()); + } } $uri = $line_href->alter('before', $commit); @@ -701,39 +710,29 @@ 'th', array( 'class' => 'diffusion-blame-link', - 'style' => $style, ), $before_link); - $blame[] = phutil_tag( - 'th', - array( - 'class' => 'diffusion-rev-link', - 'style' => $style, - ), - $commit_link); + $object_links = array(); + $object_links[] = $commit_link; + if ($revision_link) { + $object_links[] = phutil_tag('span', array(), '/'); + $object_links[] = $revision_link; + } $blame[] = phutil_tag( 'th', array( 'class' => 'diffusion-rev-link', - 'style' => $style, - ), - $revision_link); - - $blame[] = phutil_tag( - 'th', - array( - 'class' => 'diffusion-author-link', - 'style' => $style, ), - idx($line, 'author')); + $object_links); } $line_link = phutil_tag( 'a', array( 'href' => $line_href, + 'style' => $style, ), $line['line']); @@ -977,4 +976,36 @@ return head($parents); } + private function renderRevisionTooltip( + DifferentialRevision $revision, + array $handles) { + $viewer = $this->getRequest()->getUser(); + + $date = phabricator_date($revision->getDateModified(), $viewer); + $id = $revision->getID(); + $title = $revision->getTitle(); + $header = "D{$id} {$title}"; + + $author = $handles[$revision->getAuthorPHID()]->getName(); + + return "{$header}\n{$date} \xC2\xB7 {$author}"; + } + + private function renderCommitTooltip( + PhabricatorRepositoryCommit $commit, + array $handles, + $author) { + + $viewer = $this->getRequest()->getUser(); + + $date = phabricator_date($commit->getEpoch(), $viewer); + $summary = trim($commit->getSummary()); + + if ($commit->getAuthorPHID()) { + $author = $handles[$commit->getAuthorPHID()]->getName(); + } + + return "{$summary}\n{$date} \xC2\xB7 {$author}"; + } + } Index: webroot/rsrc/css/application/diffusion/diffusion-source.css =================================================================== --- webroot/rsrc/css/application/diffusion/diffusion-source.css +++ webroot/rsrc/css/application/diffusion/diffusion-source.css @@ -37,8 +37,7 @@ } .diffusion-blame-link, -.diffusion-rev-link, -.diffusion-author-link { +.diffusion-rev-link { white-space: nowrap; } @@ -46,26 +45,27 @@ min-width: 28px; } -.diffusion-rev-link { - min-width: 90px; -} - -.diffusion-author-link { - min-width: 120px; +.diffusion-source th.diffusion-rev-link { + text-align: left; + min-width: 130px; } .diffusion-blame-link a, .diffusion-rev-link a, -.diffusion-author-link a, .diffusion-line-link a { color: {$darkbluetext}; } .diffusion-rev-link a, -.diffusion-author-link span, -.diffusion-author-link a { +.diffusion-rev-link span { margin: 2px 8px 0; - display: block; + display: inline-block; +} + +.diffusion-rev-link span { + margin-right: -4px; + margin-left: -4px; + color: {$lightgreytext}; } .diffusion-blame-link a,