Page MenuHomePhabricator

D20232.diff
No OneTemporary

D20232.diff

diff --git a/src/applications/differential/storage/DifferentialRevision.php b/src/applications/differential/storage/DifferentialRevision.php
--- a/src/applications/differential/storage/DifferentialRevision.php
+++ b/src/applications/differential/storage/DifferentialRevision.php
@@ -877,7 +877,7 @@
PhabricatorUser $viewer,
array $phids) {
- return id(new HarbormasterBuildQuery())
+ $builds = id(new HarbormasterBuildQuery())
->setViewer($viewer)
->withBuildablePHIDs($phids)
->withAutobuilds(false)
@@ -893,6 +893,41 @@
HarbormasterBuildStatus::STATUS_DEADLOCKED,
))
->execute();
+
+ // Filter builds based on the "Hold Drafts" behavior of their associated
+ // build plans.
+
+ $hold_drafts = HarbormasterBuildPlanBehavior::BEHAVIOR_DRAFTS;
+ $behavior = HarbormasterBuildPlanBehavior::getBehavior($hold_drafts);
+
+ $key_never = HarbormasterBuildPlanBehavior::DRAFTS_NEVER;
+ $key_building = HarbormasterBuildPlanBehavior::DRAFTS_IF_BUILDING;
+
+ foreach ($builds as $key => $build) {
+ $plan = $build->getBuildPlan();
+ $hold_key = $behavior->getPlanOption($plan)->getKey();
+
+ $hold_never = ($hold_key === $key_never);
+ $hold_building = ($hold_key === $key_building);
+
+ // If the build "Never" holds drafts from promoting, we don't care what
+ // the status is.
+ if ($hold_never) {
+ unset($builds[$key]);
+ continue;
+ }
+
+ // If the build holds drafts from promoting "While Building", we only
+ // care about the status until it completes.
+ if ($hold_building) {
+ if ($build->isComplete()) {
+ unset($builds[$key]);
+ continue;
+ }
+ }
+ }
+
+ return $builds;
}
diff --git a/src/applications/harbormaster/plan/HarbormasterBuildPlanBehavior.php b/src/applications/harbormaster/plan/HarbormasterBuildPlanBehavior.php
--- a/src/applications/harbormaster/plan/HarbormasterBuildPlanBehavior.php
+++ b/src/applications/harbormaster/plan/HarbormasterBuildPlanBehavior.php
@@ -17,6 +17,11 @@
const RESTARTABLE_ALWAYS = 'always';
const RESTARTABLE_NEVER = 'never';
+ const BEHAVIOR_DRAFTS = 'hold-drafts';
+ const DRAFTS_ALWAYS = 'always';
+ const DRAFTS_IF_BUILDING = 'building';
+ const DRAFTS_NEVER = 'never';
+
public function setKey($key) {
$this->key = $key;
return $this;
@@ -138,7 +143,7 @@
public static function newPlanBehaviors() {
$draft_options = array(
id(new HarbormasterBuildPlanBehaviorOption())
- ->setKey('always')
+ ->setKey(self::DRAFTS_ALWAYS)
->setIcon('fa-check-circle-o green')
->setName(pht('Always'))
->setIsDefault(true)
@@ -147,7 +152,7 @@
'Revisions are not sent for review until the build completes, '.
'and are returned to the author for updates if the build fails.')),
id(new HarbormasterBuildPlanBehaviorOption())
- ->setKey('building')
+ ->setKey(self::DRAFTS_IF_BUILDING)
->setIcon('fa-pause-circle-o yellow')
->setName(pht('If Building'))
->setDescription(
@@ -155,7 +160,7 @@
'Revisions are not sent for review until the build completes, '.
'but they will be sent for review even if it fails.')),
id(new HarbormasterBuildPlanBehaviorOption())
- ->setKey('never')
+ ->setKey(self::DRAFTS_NEVER)
->setIcon('fa-circle-o red')
->setName(pht('Never'))
->setDescription(
@@ -262,7 +267,7 @@
$behaviors = array(
id(new self())
- ->setKey('hold-drafts')
+ ->setKey(self::BEHAVIOR_DRAFTS)
->setName(pht('Hold Drafts'))
->setEditInstructions(
pht(

File Metadata

Mime Type
text/plain
Expires
Fri, May 10, 11:24 PM (3 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6284255
Default Alt Text
D20232.diff (3 KB)

Event Timeline