Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/harbormaster/controller/HarbormasterBuildableListController.php b/src/applications/harbormaster/controller/HarbormasterBuildableListController.php
index 5a66de2129..1f51a8de46 100644
--- a/src/applications/harbormaster/controller/HarbormasterBuildableListController.php
+++ b/src/applications/harbormaster/controller/HarbormasterBuildableListController.php
@@ -1,101 +1,102 @@
<?php
final class HarbormasterBuildableListController
extends HarbormasterController
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey;
public function shouldAllowPublic() {
return true;
}
public function willProcessRequest(array $data) {
$this->queryKey = idx($data, 'queryKey');
}
public function processRequest() {
$request = $this->getRequest();
$controller = id(new PhabricatorApplicationSearchController($request))
->setQueryKey($this->queryKey)
->setSearchEngine(new HarbormasterBuildableSearchEngine())
->setNavigation($this->buildSideNavView());
return $this->delegateToController($controller);
}
public function renderResultsList(
array $buildables,
PhabricatorSavedQuery $query) {
assert_instances_of($buildables, 'HarbormasterBuildable');
$viewer = $this->getRequest()->getUser();
$list = new PHUIObjectItemListView();
foreach ($buildables as $buildable) {
$id = $buildable->getID();
$item = id(new PHUIObjectItemView())
->setHeader(pht('Buildable %d', $buildable->getID()));
+ $item->addAttribute($buildable->getContainerHandle()->getName());
$item->addAttribute($buildable->getBuildableHandle()->getFullName());
if ($id) {
$item->setHref("/B{$id}");
}
$list->addItem($item);
// TODO: This is proof-of-concept for getting meaningful status
// information into this list, and should get an improvement pass
// once we're a little farther along.
$all_pass = true;
$any_fail = false;
foreach ($buildable->getBuilds() as $build) {
if ($build->getBuildStatus() != HarbormasterBuild::STATUS_PASSED) {
$all_pass = false;
}
if ($build->getBuildStatus() == HarbormasterBuild::STATUS_FAILED ||
$build->getBuildStatus() == HarbormasterBuild::STATUS_ERROR) {
$any_fail = true;
}
}
if ($any_fail) {
$item->setBarColor('red');
} else if ($all_pass) {
$item->setBarColor('green');
}
}
return $list;
}
public function buildSideNavView($for_app = false) {
$user = $this->getRequest()->getUser();
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
id(new HarbormasterBuildableSearchEngine())
->setViewer($user)
->addNavigationItems($nav->getMenu());
if ($for_app) {
$nav->addFilter('new/', pht('New Build Plan'));
}
$nav->addLabel('Utilities');
$nav->addFilter('buildable/edit/', pht('New Manual Build'));
$nav->addFilter('plan/', pht('Manage Build Plans'));
$nav->selectFilter(null);
return $nav;
}
public function buildApplicationMenu() {
return $this->buildSideNavView(true)->getMenu();
}
}
diff --git a/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php b/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php
index c37aa7da3b..dbf263f8e2 100644
--- a/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php
+++ b/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php
@@ -1,51 +1,157 @@
<?php
final class HarbormasterBuildableSearchEngine
extends PhabricatorApplicationSearchEngine {
public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery();
+ $revisions = $this->readPHIDsFromRequest(
+ $request,
+ 'revisions',
+ array(
+ DifferentialPHIDTypeRevision::TYPECONST,
+ ));
+
+ $repositories = $this->readPHIDsFromRequest(
+ $request,
+ 'repositories',
+ array(
+ PhabricatorRepositoryPHIDTypeRepository::TYPECONST,
+ ));
+
+ $container_phids = array_merge($revisions, $repositories);
+ $saved->setParameter('containerPHIDs', $container_phids);
+
+ $commits = $this->readPHIDsFromRequest(
+ $request,
+ 'commits',
+ array(
+ PhabricatorRepositoryPHIDTypeCommit::TYPECONST,
+ ));
+
+ $diffs = $this->readListFromRequest($request, 'diffs');
+ if ($diffs) {
+ $diffs = id(new DifferentialDiffQuery())
+ ->setViewer($this->requireViewer())
+ ->withIDs($diffs)
+ ->execute();
+ $diffs = mpull($diffs, 'getPHID', 'getPHID');
+ }
+
+ $buildable_phids = array_merge($commits, $diffs);
+ $saved->setParameter('buildablePHIDs', $buildable_phids);
+
+
return $saved;
}
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
$query = id(new HarbormasterBuildableQuery())
+ ->needContainerHandles(true)
->needBuildableHandles(true)
->needBuilds(true);
+ $container_phids = $saved->getParameter('containerPHIDs', array());
+ if ($container_phids) {
+ $query->withContainerPHIDs($container_phids);
+ }
+
+ $buildable_phids = $saved->getParameter('buildablePHIDs', array());
+
+ if ($buildable_phids) {
+ $query->withBuildablePHIDs($buildable_phids);
+ }
+
return $query;
}
public function buildSearchForm(
AphrontFormView $form,
PhabricatorSavedQuery $saved_query) {
+ $container_phids = $saved_query->getParameter('containerPHIDs', array());
+ $buildable_phids = $saved_query->getParameter('buildablePHIDs', array());
+
+ $all_phids = array_merge($container_phids, $buildable_phids);
+
+ $revision_names = array();
+ $diff_names = array();
+ $repository_names = array();
+ $commit_names = array();
+
+ if ($all_phids) {
+ $objects = id(new PhabricatorObjectQuery())
+ ->setViewer($this->requireViewer())
+ ->withPHIDs($all_phids)
+ ->execute();
+
+ foreach ($all_phids as $phid) {
+ $object = idx($objects, $phid);
+ if (!$object) {
+ continue;
+ }
+
+ if ($object instanceof DifferentialRevision) {
+ $revision_names[] = 'D'.$object->getID();
+ } else if ($object instanceof DifferentialDiff) {
+ $diff_names[] = $object->getID();
+ } else if ($object instanceof PhabricatorRepository) {
+ $repository_names[] = 'r'.$object->getCallsign();
+ } else if ($object instanceof PhabricatorRepositoryCommit) {
+ $repository = $object->getRepository();
+ $commit_names[] = $repository->formatCommitName(
+ $object->getCommitIdentifier());
+ }
+ }
+ }
+
+ $form
+ ->appendChild(
+ id(new AphrontFormTextControl())
+ ->setLabel(pht('Differential Revisions'))
+ ->setName('revisions')
+ ->setValue(implode(', ', $revision_names)))
+ ->appendChild(
+ id(new AphrontFormTextControl())
+ ->setLabel(pht('Differential Diffs'))
+ ->setName('diffs')
+ ->setValue(implode(', ', $diff_names)))
+ ->appendChild(
+ id(new AphrontFormTextControl())
+ ->setLabel(pht('Repositories'))
+ ->setName('repositories')
+ ->setValue(implode(', ', $repository_names)))
+ ->appendChild(
+ id(new AphrontFormTextControl())
+ ->setLabel(pht('Commits'))
+ ->setName('commits')
+ ->setValue(implode(', ', $commit_names)));
}
protected function getURI($path) {
return '/harbormaster/'.$path;
}
public function getBuiltinQueryNames() {
$names = array(
'all' => pht('All Buildables'),
);
return $names;
}
public function buildSavedQueryFromBuiltin($query_key) {
$query = $this->newSavedQuery();
$query->setQueryKey($query_key);
switch ($query_key) {
case 'all':
return $query;
}
return parent::buildSavedQueryFromBuiltin($query_key);
}
}

File Metadata

Mime Type
text/x-diff
Expires
Mon, Jul 28, 7:02 AM (1 w, 20 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
186489
Default Alt Text
(8 KB)

Event Timeline