Page MenuHomePhabricator

D7898.id17879.diff
No OneTemporary

D7898.id17879.diff

Index: src/applications/harbormaster/application/PhabricatorApplicationHarbormaster.php
===================================================================
--- src/applications/harbormaster/application/PhabricatorApplicationHarbormaster.php
+++ src/applications/harbormaster/application/PhabricatorApplicationHarbormaster.php
@@ -55,7 +55,7 @@
),
'build/' => array(
'(?:(?P<id>\d+)/)?' => 'HarbormasterBuildViewController',
- '(?P<action>stop|resume|restart)/(?:(?P<id>\d+)/)?'
+ '(?P<action>stop|resume|restart)/(?P<id>\d+)/(?:(?P<via>[^/]+)/)?'
=> 'HarbormasterBuildActionController',
),
'plan/' => array(
Index: src/applications/harbormaster/controller/HarbormasterBuildActionController.php
===================================================================
--- src/applications/harbormaster/controller/HarbormasterBuildActionController.php
+++ src/applications/harbormaster/controller/HarbormasterBuildActionController.php
@@ -5,10 +5,12 @@
private $id;
private $action;
+ private $via;
public function willProcessRequest(array $data) {
$this->id = $data['id'];
$this->action = $data['action'];
+ $this->via = idx($data, 'via');
}
public function processRequest() {
@@ -38,7 +40,14 @@
return new Aphront400Response();
}
- $build_uri = $this->getApplicationURI('/build/'.$build->getID().'/');
+ switch ($this->via) {
+ case 'buildable':
+ $return_uri = $build->getBuildable()->getMonogram();
+ break;
+ default:
+ $return_uri = $this->getApplicationURI('/build/'.$build->getID().'/');
+ break;
+ }
if ($request->isDialogFormPost() && $can_issue) {
@@ -58,7 +67,7 @@
'buildID' => $build->getID()
));
- return id(new AphrontRedirectResponse())->setURI($build_uri);
+ return id(new AphrontRedirectResponse())->setURI($return_uri);
}
switch ($command) {
@@ -134,7 +143,7 @@
->setUser($viewer)
->setTitle($title)
->appendChild($body)
- ->addCancelButton($build_uri);
+ ->addCancelButton($return_uri);
if ($can_issue) {
$dialog->addSubmitButton($submit);
Index: src/applications/harbormaster/controller/HarbormasterBuildViewController.php
===================================================================
--- src/applications/harbormaster/controller/HarbormasterBuildViewController.php
+++ src/applications/harbormaster/controller/HarbormasterBuildViewController.php
@@ -30,6 +30,14 @@
->setUser($viewer)
->setPolicyObject($build);
+ if ($build->isRestarting()) {
+ $header->setStatus('warning', 'red', pht('Restarting'));
+ } else if ($build->isStopping()) {
+ $header->setStatus('warning', 'red', pht('Stopping'));
+ } else if ($build->isResuming()) {
+ $header->setStatus('warning', 'red', pht('Resuming'));
+ }
+
$box = id(new PHUIObjectBoxView())
->setHeader($header);
@@ -37,6 +45,9 @@
$this->buildPropertyLists($box, $build, $actions);
$crumbs = $this->buildApplicationCrumbs();
+ $crumbs->addTextCrumb(
+ $build->getBuildable()->getMonogram(),
+ '/'.$build->getBuildable()->getMonogram());
$crumbs->addTextCrumb($title);
$build_targets = id(new HarbormasterBuildTargetQuery())
Index: src/applications/harbormaster/controller/HarbormasterBuildableViewController.php
===================================================================
--- src/applications/harbormaster/controller/HarbormasterBuildableViewController.php
+++ src/applications/harbormaster/controller/HarbormasterBuildableViewController.php
@@ -38,45 +38,81 @@
->setObjectName(pht('Build %d', $build->getID()))
->setHeader($build->getName())
->setHref($view_uri);
- if ($build->isStopping()) {
- $item->setBarColor('black');
- $item->addAttribute(pht('Stopping'));
+
+ switch ($build->getBuildStatus()) {
+ case HarbormasterBuild::STATUS_INACTIVE:
+ $item->setBarColor('grey');
+ $item->addAttribute(pht('Inactive'));
+ break;
+ case HarbormasterBuild::STATUS_PENDING:
+ $item->setBarColor('blue');
+ $item->addAttribute(pht('Pending'));
+ break;
+ case HarbormasterBuild::STATUS_WAITING:
+ $item->setBarColor('violet');
+ $item->addAttribute(pht('Waiting'));
+ break;
+ case HarbormasterBuild::STATUS_BUILDING:
+ $item->setBarColor('yellow');
+ $item->addAttribute(pht('Building'));
+ break;
+ case HarbormasterBuild::STATUS_PASSED:
+ $item->setBarColor('green');
+ $item->addAttribute(pht('Passed'));
+ break;
+ case HarbormasterBuild::STATUS_FAILED:
+ $item->setBarColor('red');
+ $item->addAttribute(pht('Failed'));
+ break;
+ case HarbormasterBuild::STATUS_ERROR:
+ $item->setBarColor('red');
+ $item->addAttribute(pht('Unexpected Error'));
+ break;
+ case HarbormasterBuild::STATUS_STOPPED:
+ $item->setBarColor('black');
+ $item->addAttribute(pht('Stopped'));
+ break;
+ }
+
+ if ($build->isRestarting()) {
+ $item->addIcon('backward', pht('Restarting'));
+ } else if ($build->isStopping()) {
+ $item->addIcon('stop', pht('Stopping'));
+ } else if ($build->isResuming()) {
+ $item->addIcon('play', pht('Resuming'));
+ }
+
+ $build_id = $build->getID();
+
+ $restart_uri = "build/restart/{$build_id}/buildable/";
+ $resume_uri = "build/resume/{$build_id}/buildable/";
+ $stop_uri = "build/stop/{$build_id}/buildable/";
+
+ $item->addAction(
+ id(new PHUIListItemView())
+ ->setIcon('backward')
+ ->setName(pht('Restart'))
+ ->setHref($this->getApplicationURI($restart_uri))
+ ->setWorkflow(true)
+ ->setDisabled(!$build->canRestartBuild()));
+
+ if ($build->canResumeBuild()) {
+ $item->addAction(
+ id(new PHUIListItemView())
+ ->setIcon('play')
+ ->setName(pht('Resume'))
+ ->setHref($this->getApplicationURI($resume_uri))
+ ->setWorkflow(true));
} else {
- switch ($build->getBuildStatus()) {
- case HarbormasterBuild::STATUS_INACTIVE:
- $item->setBarColor('grey');
- $item->addAttribute(pht('Inactive'));
- break;
- case HarbormasterBuild::STATUS_PENDING:
- $item->setBarColor('blue');
- $item->addAttribute(pht('Pending'));
- break;
- case HarbormasterBuild::STATUS_WAITING:
- $item->setBarColor('violet');
- $item->addAttribute(pht('Waiting'));
- break;
- case HarbormasterBuild::STATUS_BUILDING:
- $item->setBarColor('yellow');
- $item->addAttribute(pht('Building'));
- break;
- case HarbormasterBuild::STATUS_PASSED:
- $item->setBarColor('green');
- $item->addAttribute(pht('Passed'));
- break;
- case HarbormasterBuild::STATUS_FAILED:
- $item->setBarColor('red');
- $item->addAttribute(pht('Failed'));
- break;
- case HarbormasterBuild::STATUS_ERROR:
- $item->setBarColor('red');
- $item->addAttribute(pht('Unexpected Error'));
- break;
- case HarbormasterBuild::STATUS_STOPPED:
- $item->setBarColor('black');
- $item->addAttribute(pht('Stopped'));
- break;
- }
+ $item->addAction(
+ id(new PHUIListItemView())
+ ->setIcon('stop')
+ ->setName(pht('Stop'))
+ ->setHref($this->getApplicationURI($stop_uri))
+ ->setWorkflow(true)
+ ->setDisabled(!$build->canStopBuild()));
}
+
$build_list->addItem($item);
}
Index: src/applications/harbormaster/storage/HarbormasterBuildable.php
===================================================================
--- src/applications/harbormaster/storage/HarbormasterBuildable.php
+++ src/applications/harbormaster/storage/HarbormasterBuildable.php
@@ -26,6 +26,10 @@
->setBuildableStatus(self::STATUS_WHATEVER);
}
+ public function getMonogram() {
+ return 'B'.$this->getID();
+ }
+
/**
* Returns an existing buildable for the object's PHID or creates a
* new buildable implicitly if needed.

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 16, 6:20 AM (1 w, 6 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7386662
Default Alt Text
D7898.id17879.diff (8 KB)

Event Timeline