diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
index 3d5f1c8609..b90e915a1a 100644
--- a/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/bitbake/lib/bb/ui/buildinfohelper.py
@@ -91,9 +91,9 @@ class ORMWrapper(object):
for v in vars(task_object):
if v in task_information.keys():
vars(task_object)[v] = task_information[v]
- # if we got covered by a setscene task, we're SSTATE
- if task_object.outcome == Task.OUTCOME_COVERED and 1 == Task.objects.filter(task_executed=True, build = task_object.build, recipe = task_object.recipe, task_name=task_object.task_name+"_setscene").count():
- task_object.outcome = Task.OUTCOME_SSTATE
+ # if we got covered by a setscene task, we're CACHED
+ if task_object.outcome == Task.OUTCOME_COVERED and 1 == Task.objects.related_setscene(task_object).count():
+ task_object.outcome = Task.OUTCOME_CACHED
outcome_task_setscene = Task.objects.get(task_executed=True, build = task_object.build,
recipe = task_object.recipe, task_name=task_object.task_name+"_setscene").outcome
if outcome_task_setscene == Task.OUTCOME_SUCCESS:
@@ -442,14 +442,19 @@ class BuildInfoHelper(object):
if event.reason == "covered":
task_information['outcome'] = Task.OUTCOME_COVERED
if event.reason == "existing":
- task_information['outcome'] = Task.OUTCOME_EXISTING
+ task_information['outcome'] = Task.OUTCOME_PREBUILT
else:
task_information['task_executed'] = True
if 'noexec' in vars(event) and event.noexec == True:
- task_information['script_type'] = Task.CODING_NOEXEC
+ task_information['task_executed'] = False
+ task_information['outcome'] = Task.OUTCOME_NA
+ task_information['script_type'] = Task.CODING_NA
+
+ # do not assign order numbers to scene tasks
+ if not isinstance(event, bb.runqueue.sceneQueueTaskStarted):
+ self.task_order += 1
+ task_information['order'] = self.task_order
- self.task_order += 1
- task_information['order'] = self.task_order
task_obj = self.orm_wrapper.get_update_task_object(task_information)
self.internal_state[identifier] = {'start_time': datetime.datetime.now()}
diff --git a/bitbake/lib/toaster/bldviewer/templates/simple_task.html b/bitbake/lib/toaster/bldviewer/templates/simple_task.html
index cb6f309fef..a5ed5295ea 100644
--- a/bitbake/lib/toaster/bldviewer/templates/simple_task.html
+++ b/bitbake/lib/toaster/bldviewer/templates/simple_task.html
@@ -33,11 +33,15 @@
{% if task.task_executed %}
Executed |
{% else %}
- Prebuilt |
+ Not Executed |
{% endif %}
{{task.sstate_checksum}} |
- {{task.get_outcome_display}}{% if task.provider %}(by {{task.provider.recipe.name}}.{{task.provider.task_name}}){% endif %} |
+ {{task.get_outcome_display}}{% if task.provider %}(by {{task.provider.recipe.name}}.{{task.provider.task_name}}){% endif %}
+ {% if task.outcome == task.OUTCOME_CACHED %}{% for t in task.get_related_setscene %}
+ ({{t.task_name}} {{t.get_outcome_display}})
+ {% endfor %}{%endif%}
+ |
{{task.message}} |
{{task.elapsed_time}} |
{{task.cpu_usage}} |
diff --git a/bitbake/lib/toaster/bldviewer/views.py b/bitbake/lib/toaster/bldviewer/views.py
index 22b42d39ce..6a90ed7b5a 100644
--- a/bitbake/lib/toaster/bldviewer/views.py
+++ b/bitbake/lib/toaster/bldviewer/views.py
@@ -84,7 +84,7 @@ def _find_task_provider(task):
def task(request, build_id):
template = 'simple_task.html'
- tasks = _build_page_range(Paginator(Task.objects.filter(build=build_id), 100),request.GET.get('page', 1))
+ tasks = _build_page_range(Paginator(Task.objects.filter(build=build_id, order__gt=0), 100),request.GET.get('page', 1))
for t in tasks:
if t.outcome == Task.OUTCOME_COVERED:
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py
index ff26c7d436..7c439487e9 100644
--- a/bitbake/lib/toaster/orm/models.py
+++ b/bitbake/lib/toaster/orm/models.py
@@ -60,6 +60,11 @@ class Target(models.Model):
return self.target
+
+class TaskManager(models.Manager):
+ def related_setscene(self, task_object):
+ return Task.objects.filter(task_executed=True, build = task_object.build, recipe = task_object.recipe, task_name=task_object.task_name+"_setscene")
+
class Task(models.Model):
SSTATE_NA = 0
@@ -75,38 +80,41 @@ class Task(models.Model):
)
CODING_NA = 0
- CODING_NOEXEC = 1
CODING_PYTHON = 2
CODING_SHELL = 3
TASK_CODING = (
(CODING_NA, 'N/A'),
- (CODING_NOEXEC, 'NoExec'),
(CODING_PYTHON, 'Python'),
(CODING_SHELL, 'Shell'),
)
OUTCOME_SUCCESS = 0
OUTCOME_COVERED = 1
- OUTCOME_SSTATE = 2
- OUTCOME_EXISTING = 3
+ OUTCOME_CACHED = 2
+ OUTCOME_PREBUILT = 3
OUTCOME_FAILED = 4
OUTCOME_NA = 5
TASK_OUTCOME = (
(OUTCOME_SUCCESS, 'Succeeded'),
(OUTCOME_COVERED, 'Covered'),
- (OUTCOME_SSTATE, 'Sstate'),
- (OUTCOME_EXISTING, 'Existing'),
+ (OUTCOME_CACHED, 'Cached'),
+ (OUTCOME_PREBUILT, 'Prebuilt'),
(OUTCOME_FAILED, 'Failed'),
(OUTCOME_NA, 'Not Available'),
)
search_allowed_fields = [ "recipe__name", "task_name" ]
+ objects = TaskManager()
+
+ def get_related_setscene(self):
+ return Task.objects.related_setscene(self)
+
build = models.ForeignKey(Build, related_name='task_build')
order = models.IntegerField(null=True)
- task_executed = models.BooleanField(default=False) # True means Executed, False means Prebuilt
+ task_executed = models.BooleanField(default=False) # True means Executed, False means Not/Executed
outcome = models.IntegerField(choices=TASK_OUTCOME, default=OUTCOME_NA)
sstate_checksum = models.CharField(max_length=100, blank=True)
path_to_sstate_obj = models.FilePathField(max_length=500, blank=True)