Page MenuHomePhabricator

D20233.diff
No OneTemporary

D20233.diff

diff --git a/src/applications/harbormaster/engine/HarbormasterBuildEngine.php b/src/applications/harbormaster/engine/HarbormasterBuildEngine.php
--- a/src/applications/harbormaster/engine/HarbormasterBuildEngine.php
+++ b/src/applications/harbormaster/engine/HarbormasterBuildEngine.php
@@ -497,9 +497,33 @@
// passed everything it needs to.
if (!$buildable->isPreparing()) {
+ $behavior_key = HarbormasterBuildPlanBehavior::BEHAVIOR_BUILDABLE;
+ $behavior = HarbormasterBuildPlanBehavior::getBehavior($behavior_key);
+
+ $key_never = HarbormasterBuildPlanBehavior::BUILDABLE_NEVER;
+ $key_building = HarbormasterBuildPlanBehavior::BUILDABLE_IF_BUILDING;
+
$all_pass = true;
$any_fail = false;
foreach ($buildable->getBuilds() as $build) {
+ $plan = $build->getBuildPlan();
+ $option = $behavior->getPlanOption($plan);
+ $option_key = $option->getKey();
+
+ $is_never = ($option_key === $key_never);
+ $is_building = ($option_key === $key_building);
+
+ // If this build "Never" affects the buildable, ignore it.
+ if ($is_never) {
+ continue;
+ }
+
+ // If this build affects the buildable "If Building", but is already
+ // complete, ignore it.
+ if ($is_building && $build->isComplete()) {
+ continue;
+ }
+
if (!$build->isPassed()) {
$all_pass = false;
}
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
@@ -22,6 +22,11 @@
const DRAFTS_IF_BUILDING = 'building';
const DRAFTS_NEVER = 'never';
+ const BEHAVIOR_BUILDABLE = 'buildable';
+ const BUILDABLE_ALWAYS = 'always';
+ const BUILDABLE_IF_BUILDING = 'building';
+ const BUILDABLE_NEVER = 'never';
+
public function setKey($key) {
$this->key = $key;
return $this;
@@ -207,7 +212,7 @@
$aggregate_options = array(
id(new HarbormasterBuildPlanBehaviorOption())
- ->setKey('always')
+ ->setKey(self::BUILDABLE_ALWAYS)
->setIcon('fa-check-circle-o green')
->setName(pht('Always'))
->setIsDefault(true)
@@ -216,7 +221,7 @@
'The buildable waits for the build, and fails if the '.
'build fails.')),
id(new HarbormasterBuildPlanBehaviorOption())
- ->setKey('building')
+ ->setKey(self::BUILDABLE_IF_BUILDING)
->setIcon('fa-pause-circle-o yellow')
->setName(pht('If Building'))
->setDescription(
@@ -224,7 +229,7 @@
'The buildable waits for the build, but does not fail '.
'if the build fails.')),
id(new HarbormasterBuildPlanBehaviorOption())
- ->setKey('never')
+ ->setKey(self::BUILDABLE_NEVER)
->setIcon('fa-circle-o red')
->setName(pht('Never'))
->setDescription(
@@ -310,7 +315,7 @@
'this warning and continue, even if builds have failed.'))
->setOptions($land_options),
id(new self())
- ->setKey('buildable')
+ ->setKey(self::BEHAVIOR_BUILDABLE)
->setEditInstructions(
pht(
'The overall state of a buildable (like a commit or revision) is '.

File Metadata

Mime Type
text/plain
Expires
Sun, Jan 12, 9:52 PM (20 h, 50 s)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6987877
Default Alt Text
D20233.diff (3 KB)

Event Timeline