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)