1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-29 02:02:41 +01:00

Unify more build, property, auditor, and status information into "CommitGraphView"

Summary:
Ref T13552. In unifying the various Graph/List/Table commit views, some information was dropped -- particularly, audit status.

Restore most of it. The result isn't very pretty, but has most of the required information.

Test Plan: {F7637411}

Maniphest Tasks: T13552

Differential Revision: https://secure.phabricator.com/D21417
This commit is contained in:
epriestley 2020-07-12 12:41:18 -07:00
parent 36dac46ff2
commit 8aec3f916b
5 changed files with 216 additions and 69 deletions

View file

@ -9,7 +9,7 @@ return array(
'names' => array( 'names' => array(
'conpherence.pkg.css' => '0e3cf785', 'conpherence.pkg.css' => '0e3cf785',
'conpherence.pkg.js' => '020aebcf', 'conpherence.pkg.js' => '020aebcf',
'core.pkg.css' => '9b2e2e20', 'core.pkg.css' => '9cb7cb3f',
'core.pkg.js' => '845355f4', 'core.pkg.js' => '845355f4',
'dark-console.pkg.js' => '187792c2', 'dark-console.pkg.js' => '187792c2',
'differential.pkg.css' => '5c459f92', 'differential.pkg.css' => '5c459f92',
@ -133,7 +133,7 @@ return array(
'rsrc/css/phui/object-item/phui-oi-color.css' => 'b517bfa0', 'rsrc/css/phui/object-item/phui-oi-color.css' => 'b517bfa0',
'rsrc/css/phui/object-item/phui-oi-drag-ui.css' => 'da15d3dc', 'rsrc/css/phui/object-item/phui-oi-drag-ui.css' => 'da15d3dc',
'rsrc/css/phui/object-item/phui-oi-flush-ui.css' => '490e2e2e', 'rsrc/css/phui/object-item/phui-oi-flush-ui.css' => '490e2e2e',
'rsrc/css/phui/object-item/phui-oi-list-view.css' => 'd7723ecc', 'rsrc/css/phui/object-item/phui-oi-list-view.css' => '4b0def39',
'rsrc/css/phui/object-item/phui-oi-simple-ui.css' => '6a30fa46', 'rsrc/css/phui/object-item/phui-oi-simple-ui.css' => '6a30fa46',
'rsrc/css/phui/phui-action-list.css' => '1b0085b2', 'rsrc/css/phui/phui-action-list.css' => '1b0085b2',
'rsrc/css/phui/phui-action-panel.css' => '6c386cbf', 'rsrc/css/phui/phui-action-panel.css' => '6c386cbf',
@ -866,7 +866,7 @@ return array(
'phui-oi-color-css' => 'b517bfa0', 'phui-oi-color-css' => 'b517bfa0',
'phui-oi-drag-ui-css' => 'da15d3dc', 'phui-oi-drag-ui-css' => 'da15d3dc',
'phui-oi-flush-ui-css' => '490e2e2e', 'phui-oi-flush-ui-css' => '490e2e2e',
'phui-oi-list-view-css' => 'd7723ecc', 'phui-oi-list-view-css' => '4b0def39',
'phui-oi-simple-ui-css' => '6a30fa46', 'phui-oi-simple-ui-css' => '6a30fa46',
'phui-pager-css' => 'd022c7ad', 'phui-pager-css' => 'd022c7ad',
'phui-pinboard-view-css' => '1f08f5d8', 'phui-pinboard-view-css' => '1f08f5d8',

View file

@ -222,7 +222,8 @@ final class PhabricatorCommitSearchEngine
$bucket = $this->getResultBucket($query); $bucket = $this->getResultBucket($query);
$template = id(new DiffusionCommitGraphView()) $template = id(new DiffusionCommitGraphView())
->setViewer($viewer); ->setViewer($viewer)
->setShowAuditors(true);
$views = array(); $views = array();
if ($bucket) { if ($bucket) {

View file

@ -14,6 +14,8 @@ final class DiffusionCommitGraphView
private $buildableMap; private $buildableMap;
private $revisionMap; private $revisionMap;
private $showAuditors;
public function setHistory(array $history) { public function setHistory(array $history) {
assert_instances_of($history, 'DiffusionPathChange'); assert_instances_of($history, 'DiffusionPathChange');
$this->history = $history; $this->history = $history;
@ -34,6 +36,15 @@ final class DiffusionCommitGraphView
return $this->commits; return $this->commits;
} }
public function setShowAuditors($show_auditors) {
$this->showAuditors = $show_auditors;
return $this;
}
public function getShowAuditors() {
return $this->showAuditors;
}
public function setParents(array $parents) { public function setParents(array $parents) {
$this->parents = $parents; $this->parents = $parents;
return $this; return $this;
@ -92,10 +103,36 @@ final class DiffusionCommitGraphView
} }
private function newObjectItemViews() { private function newObjectItemViews() {
$viewer = $this->getViewer();
require_celerity_resource('diffusion-css'); require_celerity_resource('diffusion-css');
$show_builds = $this->shouldShowBuilds(); $show_builds = $this->shouldShowBuilds();
$show_revisions = $this->shouldShowRevisions(); $show_revisions = $this->shouldShowRevisions();
$show_auditors = $this->shouldShowAuditors();
$phids = array();
if ($show_revisions) {
$revision_map = $this->getRevisionMap();
foreach ($revision_map as $revisions) {
foreach ($revisions as $revision) {
$phids[] = $revision->getPHID();
}
}
}
if ($show_auditors) {
$commits = $this->getCommitMap();
foreach ($commits as $commit) {
$audits = $commit->getAudits();
foreach ($audits as $auditor) {
$phids[] = $auditor->getAuditorPHID();
}
}
}
$handles = $viewer->loadHandles($phids);
$views = array(); $views = array();
@ -111,38 +148,52 @@ final class DiffusionCommitGraphView
$short_hash = $this->getCommitObjectName($hash); $short_hash = $this->getCommitObjectName($hash);
$is_disabled = $this->getCommitIsDisabled($commit); $is_disabled = $this->getCommitIsDisabled($commit);
$author_view = $this->getCommitAuthorView($commit);
$item_view = id(new PHUIObjectItemView()) $item_view = id(new PHUIObjectItemView())
->setViewer($viewer)
->setHeader($commit_description) ->setHeader($commit_description)
->setObjectName($short_hash) ->setObjectName($short_hash)
->setHref($commit_link) ->setHref($commit_link)
->setDisabled($is_disabled); ->setDisabled($is_disabled);
if ($author_view !== null) { $this->addBrowseAction($item_view, $hash);
$item_view->addAttribute($author_view);
}
$browse_button = $this->newBrowseButton($hash);
$build_view = null;
if ($show_builds) { if ($show_builds) {
$build_view = $this->newBuildView($hash); $this->addBuildAction($item_view, $hash);
} }
$item_view->setSideColumn( $this->addAuditAction($item_view, $hash);
array(
$build_view, if ($show_auditors) {
$browse_button, $auditor_list = $item_view->newPropertyList();
)); if ($commit) {
$auditors = $this->newAuditorList($commit, $handles);
$auditor_list->addProperty(pht('Auditors'), $auditors);
}
}
$property_list = $item_view->newPropertyList();
if ($commit) {
$author_view = $this->getCommitAuthorView($commit);
if ($author_view) {
$property_list->addProperty(
pht('Author'),
$this->getCommitAuthorView($commit));
}
}
$revision_view = null;
if ($show_revisions) { if ($show_revisions) {
$revision_view = $this->newRevisionView($hash); if ($commit) {
} $revisions = $this->getRevisions($commit);
if ($revisions) {
$revision = head($revisions);
$handle = $handles[$revision->getPHID()];
if ($revision_view !== null) { $property_list->addProperty(
$item_view->addAttribute($revision_view); pht('Revision'),
$handle->renderLink());
}
}
} }
$views[$hash] = $item_view; $views[$hash] = $item_view;
@ -172,6 +223,7 @@ final class DiffusionCommitGraphView
$item_view = $views[$hash]; $item_view = $views[$hash];
$list_view = id(new PHUIObjectItemListView()) $list_view = id(new PHUIObjectItemListView())
->setViewer($viewer)
->setFlush(true) ->setFlush(true)
->addItem($item_view); ->addItem($item_view);
@ -268,6 +320,10 @@ final class DiffusionCommitGraphView
return $show_revisions; return $show_revisions;
} }
private function shouldShowAuditors() {
return $this->getShowAuditors();
}
private function newHistoryItems() { private function newHistoryItems() {
$items = array(); $items = array();
@ -367,24 +423,6 @@ final class DiffusionCommitGraphView
return $commit->newCommitAuthorView($viewer); return $commit->newCommitAuthorView($viewer);
} }
private function newBrowseButton($hash) {
$repository = $this->getRepository();
if ($repository) {
$drequest = $this->getDiffusionRequest();
return $this->linkBrowse(
$drequest->getPath(),
array(
'commit' => $hash,
'branch' => $drequest->getBranch(),
),
$as_button = true);
}
return null;
}
private function getCommit($hash) { private function getCommit($hash) {
$commit_map = $this->getCommitMap(); $commit_map = $this->getCommitMap();
return idx($commit_map, $hash); return idx($commit_map, $hash);
@ -399,18 +437,84 @@ final class DiffusionCommitGraphView
return $this->commitMap; return $this->commitMap;
} }
private function newBuildView($hash) { private function addBrowseAction(PHUIObjectItemView $item, $hash) {
$repository = $this->getRepository();
if (!$repository) {
return;
}
$drequest = $this->getDiffusionRequest();
$path = $drequest->getPath();
$uri = $drequest->generateURI(
array(
'action' => 'browse',
'path' => $path,
));
$item->newAction()
->setIcon('fa-folder-open-o bluegrey')
->setName(pht('Browse Repository'))
->setHref($uri);
}
private function addBuildAction(PHUIObjectItemView $item, $hash) {
$is_disabled = true;
$buildable = null;
$commit = $this->getCommit($hash); $commit = $this->getCommit($hash);
if (!$commit) { if (!$commit) {
return null; $buildable = $this->getBuildable($commit);
} }
$buildable = $this->getBuildable($commit); if ($buildable) {
if (!$buildable) { $icon = $buildable->getStatusIcon();
return null; $color = $buildable->getStatusColor();
$name = $buildable->getStatusDisplayName();
$uri = $buildable->getURI();
} else {
$icon = 'fa-times';
$color = 'grey';
$name = pht('No Builds');
$uri = null;
} }
return $this->renderBuildable($buildable, 'button'); $item->newAction()
->setIcon($icon.' '.$color)
->setName($name)
->setHref($uri)
->setDisabled(($uri === null));
}
private function addAuditAction(PHUIObjectItemView $item_view, $hash) {
$commit = $this->getCommit($hash);
if ($commit) {
$status = $commit->getAuditStatusObject();
$text = $status->getName();
$color = $status->getColor();
$icon = $status->getIcon();
$uri = $commit->getURI();
$is_disabled = $status->isNoAudit();
} else {
$text = pht('No Audit');
$color = 'grey';
$icon = 'fa-times';
$uri = null;
$is_disabled = true;
}
$item_view->newAction()
->setIcon($icon.' '.$color)
->setName($text)
->setHref($uri)
->setDisabled($is_disabled);
} }
private function getBuildable(PhabricatorRepositoryCommit $commit) { private function getBuildable(PhabricatorRepositoryCommit $commit) {
@ -428,28 +532,6 @@ final class DiffusionCommitGraphView
return $this->buildableMap; return $this->buildableMap;
} }
private function newRevisionView($hash) {
$commit = $this->getCommit($hash);
if (!$commit) {
return null;
}
$revisions = $this->getRevisions($commit);
if (!$revisions) {
return null;
}
$revision = head($revisions);
return id(new PHUITagView())
->setName($revision->getMonogram())
->setType(PHUITagView::TYPE_SHADE)
->setColor(PHUITagView::COLOR_BLUE)
->setHref($revision->getURI())
->setBorder(PHUITagView::BORDER_NONE)
->setSlimShady(true);
}
private function getRevisions(PhabricatorRepositoryCommit $commit) { private function getRevisions(PhabricatorRepositoryCommit $commit) {
$revision_map = $this->getRevisionMap(); $revision_map = $this->getRevisionMap();
return idx($revision_map, $commit->getPHID(), array()); return idx($revision_map, $commit->getPHID(), array());
@ -510,4 +592,21 @@ final class DiffusionCommitGraphView
return $commits; return $commits;
} }
private function newAuditorList(
PhabricatorRepositoryCommit $commit,
$handles) {
$auditors = $commit->getAudits();
if (!$auditors) {
return phutil_tag('em', array(), pht('None'));
}
$auditor_phids = mpull($auditors, 'getAuditorPHID');
$auditor_list = $handles->newSublist($auditor_phids)
->renderList()
->setAsInline(true);
return $auditor_list;
}
} }

View file

@ -16,6 +16,7 @@ final class PHUIObjectItemView extends AphrontTagView {
private $bylines = array(); private $bylines = array();
private $grippable; private $grippable;
private $actions = array(); private $actions = array();
private $actionItems = array();
private $headIcons = array(); private $headIcons = array();
private $disabled; private $disabled;
private $imageURI; private $imageURI;
@ -29,6 +30,7 @@ final class PHUIObjectItemView extends AphrontTagView {
private $coverImage; private $coverImage;
private $description; private $description;
private $clickable; private $clickable;
private $propertyLists = array();
private $selectableName; private $selectableName;
private $selectableValue; private $selectableValue;
@ -212,6 +214,18 @@ final class PHUIObjectItemView extends AphrontTagView {
return $this; return $this;
} }
public function newAction() {
$action = new PhabricatorActionView();
$this->actionItems[] = $action;
return $action;
}
public function newPropertyList() {
$list = new PHUIPropertyListView();
$this->propertyLists[] = $list;
return $list;
}
/** /**
* This method has been deprecated, use @{method:setImageIcon} instead. * This method has been deprecated, use @{method:setImageIcon} instead.
* *
@ -598,6 +612,14 @@ final class PHUIObjectItemView extends AphrontTagView {
''); '');
} }
$property_lists = null;
if ($this->propertyLists) {
$property_lists[] = phutil_tag(
'div',
array(),
$this->propertyLists);
}
$content = phutil_tag( $content = phutil_tag(
'div', 'div',
array( array(
@ -606,6 +628,7 @@ final class PHUIObjectItemView extends AphrontTagView {
array( array(
$subhead, $subhead,
$attrs, $attrs,
$property_lists,
$this->renderChildren(), $this->renderChildren(),
)); ));
@ -733,6 +756,23 @@ final class PHUIObjectItemView extends AphrontTagView {
)); ));
} }
$column4 = null;
if ($this->actionItems) {
$action_list = id(new PhabricatorActionListView())
->setViewer($viewer);
foreach ($this->actionItems as $action_item) {
$action_list->addAction($action_item);
}
$column4 = phutil_tag(
'div',
array(
'class' => 'phui-oi-col2 phui-oi-action-list',
),
$action_list);
}
$table = phutil_tag( $table = phutil_tag(
'div', 'div',
array( array(
@ -745,6 +785,7 @@ final class PHUIObjectItemView extends AphrontTagView {
$column1, $column1,
$column2, $column2,
$column3, $column3,
$column4,
))); )));
$box = phutil_tag( $box = phutil_tag(

View file

@ -725,3 +725,9 @@ ul.phui-oi-list-view .phui-oi-selectable
padding: 8px 0; padding: 8px 0;
background: linear-gradient({$lightbluebackground}, #fff 66%, #fff); background: linear-gradient({$lightbluebackground}, #fff 66%, #fff);
} }
.phui-oi-action-list {
background: {$lightbluebackground};
border-left: 1px solid {$thinblueborder};
padding: 4px;
}