diff options
| author | Farrell Wymore <farrell.wymore@windriver.com> | 2014-04-02 12:10:55 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-04-05 14:55:29 +0100 |
| commit | 396e2153a99c7ec742ec5432d471e8b0d88c0a3f (patch) | |
| tree | 09dc21163410b68d76843c5d8a73d3ab6b274867 /bitbake/lib/toaster | |
| parent | 10297261219d4373843b31e8aaaed094fcbcf605 (diff) | |
| download | poky-396e2153a99c7ec742ec5432d471e8b0d88c0a3f.tar.gz | |
bitbake: toaster: added covered task list
if a task has a 'covered' indication, the list of tasks that
covered the task are computed and displayed. amended to add tooltip.
[YOCTO #5925]
(Bitbake rev: bb05ee13f53f10988579b6238802327732041d0c)
Signed-off-by: Farrell Wymore <farrell.wymore@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster')
| -rw-r--r-- | bitbake/lib/toaster/toastergui/templates/task.html | 11 | ||||
| -rw-r--r-- | bitbake/lib/toaster/toastergui/views.py | 64 |
2 files changed, 52 insertions, 23 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/task.html b/bitbake/lib/toaster/toastergui/templates/task.html index c1504b6041..66a6695ec1 100644 --- a/bitbake/lib/toaster/toastergui/templates/task.html +++ b/bitbake/lib/toaster/toastergui/templates/task.html | |||
| @@ -109,7 +109,16 @@ | |||
| 109 | </dt> | 109 | </dt> |
| 110 | <dd> | 110 | <dd> |
| 111 | <ul> | 111 | <ul> |
| 112 | <li><p class="alert-info">TODO:Covering tasks will be displayed here</p></li> | 112 | {% for t in covered_by %} |
| 113 | <li> | ||
| 114 | <a href="{%url 'task' t.build.pk t.pk%}" | ||
| 115 | class="task-info" | ||
| 116 | title="{{t.get_executed_display}} | {{t.get_outcome_display}}"> | ||
| 117 | {{t.recipe.name}}_{{t.recipe.version}} | ||
| 118 | {{t.task_name}} | ||
| 119 | </a> | ||
| 120 | </li> | ||
| 121 | {% endfor %} | ||
| 113 | </ul> | 122 | </ul> |
| 114 | </dd> | 123 | </dd> |
| 115 | </dl> | 124 | </dl> |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 2da81c1ede..910b3b9532 100644 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
| @@ -448,38 +448,58 @@ def builddashboard( request, build_id ): | |||
| 448 | return render( request, template, context ) | 448 | return render( request, template, context ) |
| 449 | 449 | ||
| 450 | 450 | ||
| 451 | def task(request, build_id, task_id): | 451 | def generateCoveredList( task ): |
| 452 | template = "task.html" | 452 | revList = _find_task_revdep( task ); |
| 453 | if Task.objects.filter(pk=task_id).count() == 0 : | 453 | list = { }; |
| 454 | return redirect(builds) | 454 | for t in revList: |
| 455 | task = Task.objects.filter(pk=task_id)[0] | 455 | if ( t.outcome == Task.OUTCOME_COVERED ): |
| 456 | 456 | list.update( generateCoveredList( t )); | |
| 457 | dependencies = sorted(_find_task_dep(task), key=lambda t:'%s_%s %s'%(t.recipe.name, t.recipe.version, t.task_name)) | 457 | else: |
| 458 | reverse_dependencies = sorted(_find_task_revdep(task), key=lambda t:'%s_%s %s'%(t.recipe.name, t.recipe.version, t.task_name)) | 458 | list[ t.task_name ] = t; |
| 459 | return( list ); | ||
| 459 | 460 | ||
| 461 | def task( request, build_id, task_id ): | ||
| 462 | template = "task.html" | ||
| 463 | tasks = Task.objects.filter( pk=task_id ) | ||
| 464 | if tasks.count( ) == 0: | ||
| 465 | return redirect( builds ) | ||
| 466 | task = tasks[ 0 ]; | ||
| 467 | dependencies = sorted( | ||
| 468 | _find_task_dep( task ), | ||
| 469 | key=lambda t:'%s_%s %s'%(t.recipe.name, t.recipe.version, t.task_name)) | ||
| 470 | reverse_dependencies = sorted( | ||
| 471 | _find_task_revdep( task ), | ||
| 472 | key=lambda t:'%s_%s %s'%( t.recipe.name, t.recipe.version, t.task_name )) | ||
| 473 | coveredBy = ''; | ||
| 474 | if ( task.outcome == Task.OUTCOME_COVERED ): | ||
| 475 | dict = generateCoveredList( task ) | ||
| 476 | coveredBy = [ ] | ||
| 477 | for name, t in dict.items( ): | ||
| 478 | coveredBy.append( t ) | ||
| 460 | log_head = '' | 479 | log_head = '' |
| 461 | log_body = '' | 480 | log_body = '' |
| 462 | if task.outcome == task.OUTCOME_FAILED: | 481 | if task.outcome == task.OUTCOME_FAILED: |
| 463 | pass | 482 | pass |
| 464 | # FIXME: the log should be read from the orm_logmessage table. | ||
| 465 | # This will be fixed when the backend is done. | ||
| 466 | 483 | ||
| 467 | context = { | 484 | context = { |
| 468 | 'build' : Build.objects.filter(pk=build_id)[0], | 485 | 'build' : Build.objects.filter( pk = build_id )[ 0 ], |
| 469 | 'object': task, | 486 | 'object' : task, |
| 470 | 'task':task, | 487 | 'task' : task, |
| 471 | 'deps': dependencies, | 488 | 'covered_by' : coveredBy, |
| 472 | 'rdeps': reverse_dependencies, | 489 | 'deps' : dependencies, |
| 473 | 'log_head':log_head, | 490 | 'rdeps' : reverse_dependencies, |
| 474 | 'log_body':log_body, | 491 | 'log_head' : log_head, |
| 475 | 'showing_matches':False, | 492 | 'log_body' : log_body, |
| 493 | 'showing_matches' : False, | ||
| 476 | } | 494 | } |
| 495 | if request.GET.get( 'show_matches', "" ): | ||
| 496 | context[ 'showing_matches' ] = True | ||
| 497 | context[ 'matching_tasks' ] = Task.objects.filter( | ||
| 498 | sstate_checksum=task.sstate_checksum ).filter( | ||
| 499 | build__completed_on__lt=task.build.completed_on ).order_by('-build__completed_on') | ||
| 477 | 500 | ||
| 478 | if request.GET.get('show_matches', ""): | 501 | return render( request, template, context ) |
| 479 | context['showing_matches'] = True | ||
| 480 | context['matching_tasks'] = Task.objects.filter(sstate_checksum=task.sstate_checksum).filter(build__completed_on__lt=task.build.completed_on).order_by('-build__completed_on') | ||
| 481 | 502 | ||
| 482 | return render(request, template, context) | ||
| 483 | 503 | ||
| 484 | def recipe(request, build_id, recipe_id): | 504 | def recipe(request, build_id, recipe_id): |
| 485 | template = "recipe.html" | 505 | template = "recipe.html" |
