1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-15 18:10:53 +01:00

(stable) Don't fatal when viewing tags pointing at commits we haven't imported/parsed yet

Summary:
In Diffusion, the "Tags" view may read commits which haven't imported or parsed yet, and thus don't have loadable objects.

Most of this logic tests for `if ($commit)`, but the author part did not. Instead, don't render author information if `$commit` is not present.

Test Plan:
  - Loaded tags view with commits present.
  - Faked `$commit = null;`, loaded tag view, got this instead of a fatal:

{F5068432}

Reviewers: chad, amckinley

Reviewed By: chad

Differential Revision: https://secure.phabricator.com/D18290
This commit is contained in:
epriestley 2017-07-28 10:37:53 -07:00
parent 81b5f90dd2
commit 57a584e270

View file

@ -52,24 +52,12 @@ final class DiffusionTagListView extends DiffusionView {
'commit' => $tag->getCommitIdentifier(), 'commit' => $tag->getCommitIdentifier(),
)); ));
$author = null; if ($commit) {
if ($commit && $commit->getAuthorPHID()) { $author = $this->renderAuthor($tag, $commit);
$author = $this->handles[$commit->getAuthorPHID()]->renderLink();
} else if ($commit && $commit->getCommitData()) {
$author = self::renderName($commit->getCommitData()->getAuthorName());
} else { } else {
$author = self::renderName($tag->getAuthor()); $author = null;
} }
$committed = phabricator_datetime($commit->getEpoch(), $viewer);
$author_name = phutil_tag(
'strong',
array(
'class' => 'diffusion-history-author-name',
),
$author);
$authored = pht('%s on %s.', $author_name, $committed);
$description = null; $description = null;
if ($tag->getType() == 'git/tag') { if ($tag->getType() == 'git/tag') {
// In Git, a tag may be a "real" tag, or just a reference to a commit. // In Git, a tag may be a "real" tag, or just a reference to a commit.
@ -139,16 +127,43 @@ final class DiffusionTagListView extends DiffusionView {
->setHref($tag_href) ->setHref($tag_href)
->addAttribute(array($commit_tag)) ->addAttribute(array($commit_tag))
->addAttribute($description) ->addAttribute($description)
->addAttribute($authored)
->setSideColumn(array( ->setSideColumn(array(
$build_view, $build_view,
$button_bar, $button_bar,
)); ));
if ($author) {
$item->addAttribute($author);
}
$list->addItem($item); $list->addItem($item);
} }
return $list; return $list;
} }
private function renderAuthor(
DiffusionRepositoryTag $tag,
PhabricatorRepositoryCommit $commit) {
$viewer = $this->getViewer();
if ($commit->getAuthorPHID()) {
$author = $this->handles[$commit->getAuthorPHID()]->renderLink();
} else if ($commit->getCommitData()) {
$author = self::renderName($commit->getCommitData()->getAuthorName());
} else {
$author = self::renderName($tag->getAuthor());
}
$committed = phabricator_datetime($commit->getEpoch(), $viewer);
$author_name = phutil_tag(
'strong',
array(
'class' => 'diffusion-history-author-name',
),
$author);
return pht('%s on %s.', $author_name, $committed);
}
} }