diff --git a/etc/status/public_html/jquery.zuul.js b/etc/status/public_html/jquery.zuul.js
index 5d155aff62..c13e48caee 100644
--- a/etc/status/public_html/jquery.zuul.js
+++ b/etc/status/public_html/jquery.zuul.js
@@ -370,6 +370,11 @@
icon_title = 'Waiting until closer to head of queue to' +
' start jobs';
}
+ else if (change.live !== true) {
+ // Grey icon
+ icon_name = 'grey.png';
+ icon_title = 'Dependent change independently tested';
+ }
else if (change.failing_reasons &&
change.failing_reasons.length > 0) {
var reason = change.failing_reasons.join(', ');
diff --git a/zuul/model.py b/zuul/model.py
index 2a69b79029..b94295d824 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -118,11 +118,13 @@ class Pipeline(object):
tree = self.job_trees.get(project)
return tree
- def getJobs(self, changeish):
- tree = self.getJobTree(changeish.project)
+ def getJobs(self, item):
+ if not item.live:
+ return []
+ tree = self.getJobTree(item.change.project)
if not tree:
return []
- return changeish.filterJobs(tree.getJobs())
+ return item.change.filterJobs(tree.getJobs())
def _findJobsToRun(self, job_trees, item):
torun = []
@@ -159,21 +161,21 @@ class Pipeline(object):
return self._findJobsToRun(tree.job_trees, item)
def haveAllJobsStarted(self, item):
- for job in self.getJobs(item.change):
+ for job in self.getJobs(item):
build = item.current_build_set.getBuild(job.name)
if not build or not build.start_time:
return False
return True
def areAllJobsComplete(self, item):
- for job in self.getJobs(item.change):
+ for job in self.getJobs(item):
build = item.current_build_set.getBuild(job.name)
if not build or not build.result:
return False
return True
def didAllJobsSucceed(self, item):
- for job in self.getJobs(item.change):
+ for job in self.getJobs(item):
if not job.voting:
continue
build = item.current_build_set.getBuild(job.name)
@@ -189,7 +191,7 @@ class Pipeline(object):
return True
def didAnyJobFail(self, item):
- for job in self.getJobs(item.change):
+ for job in self.getJobs(item):
if not job.voting:
continue
build = item.current_build_set.getBuild(job.name)
@@ -200,7 +202,7 @@ class Pipeline(object):
def isHoldingFollowingChanges(self, item):
if not item.live:
return False
- for job in self.getJobs(item.change):
+ for job in self.getJobs(item):
if not job.hold_following_changes:
continue
build = item.current_build_set.getBuild(job.name)
@@ -700,6 +702,7 @@ class QueueItem(object):
changeish = self.change
ret = {}
ret['active'] = self.active
+ ret['live'] = self.live
if hasattr(changeish, 'url') and changeish.url is not None:
ret['url'] = changeish.url
else:
@@ -720,7 +723,7 @@ class QueueItem(object):
else:
ret['owner'] = None
max_remaining = 0
- for job in self.pipeline.getJobs(changeish):
+ for job in self.pipeline.getJobs(self):
now = time.time()
build = self.current_build_set.getBuild(job.name)
elapsed = None
@@ -796,7 +799,7 @@ class QueueItem(object):
changeish.project.name,
changeish._id(),
self.item_ahead)
- for job in self.pipeline.getJobs(changeish):
+ for job in self.pipeline.getJobs(self):
build = self.current_build_set.getBuild(job.name)
if build:
result = build.result
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index 42a42a301e..49e6698cad 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -1521,7 +1521,7 @@ class BasePipelineManager(object):
else:
url_pattern = None
- for job in self.pipeline.getJobs(item.change):
+ for job in self.pipeline.getJobs(item):
build = item.current_build_set.getBuild(job.name)
result = build.result
pattern = url_pattern