From 77eeb4200efa28af080c8343333cd651aaeb3923 Mon Sep 17 00:00:00 2001 From: David Reyna Date: Thu, 6 Feb 2014 21:06:27 -0800 Subject: bitbake: toaster: implement recipe summary page Implement the updated design for the recipe summay page, with pop-up boxes for the dependecies and layer commit ids, column filtering, and column sorting support. [YOCTO #4294] (Bitbake rev: 92b71c8e6cfcd656866fbf9bd00bf184b223c5fa) Signed-off-by: David Reyna Signed-off-by: Richard Purdie --- bitbake/lib/toaster/orm/models.py | 1 + .../lib/toaster/toastergui/templates/recipes.html | 106 ++++++++++++++------- bitbake/lib/toaster/toastergui/views.py | 77 ++++++++++++++- 3 files changed, 145 insertions(+), 39 deletions(-) (limited to 'bitbake') diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 113631def0..1803de60e5 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py @@ -209,6 +209,7 @@ class Package_File(models.Model): size = models.IntegerField() class Recipe(models.Model): + search_allowed_fields = ['name', 'version', 'file_path', 'license', 'layer_version__layer__name', 'layer_version__branch', 'layer_version__commit', 'layer_version__layer__local_path'] name = models.CharField(max_length=100, blank=True) version = models.CharField(max_length=100, blank=True) layer_version = models.ForeignKey('Layer_Version', related_name='recipe_layer_version') diff --git a/bitbake/lib/toaster/toastergui/templates/recipes.html b/bitbake/lib/toaster/toastergui/templates/recipes.html index 2e0c2d1c6d..aa0610434f 100755 --- a/bitbake/lib/toaster/toastergui/templates/recipes.html +++ b/bitbake/lib/toaster/toastergui/templates/recipes.html @@ -1,51 +1,83 @@ {% extends "basebuildpage.html" %} +{% load projecttags %} + {% block localbreadcrumb %}
  • Recipes
  • {% endblock %} {% block buildinfomain %} -
    +
    + {% include "basetable_top.html" %} - - - Name - Version - Summary - Description - Section - License - License file - Homepage - Bugtracker - File_path - Recipe Dependency - - - {% for recipe in objects %} + {% for recipe in objects %} - - {{recipe.name}} - {{recipe.version}} - {{recipe.summary}} - {{recipe.description}} - {{recipe.section}} - {{recipe.license}} - {{recipe.licensing_info}} - {{recipe.homepage}} - {{recipe.bugtracker}} - {{recipe.file_path}} - -
    - {% for rr in recipe.r_dependencies_recipe.all %} - {{rr.depends_on.name}}
    - {% endfor %} -
    - - + + {{recipe.name}} + {{recipe.version}} + + + {% if recipe.r_dependencies_recipe.all.count %} + {{recipe.name}} depends on" + data-content="
      + {% for i in recipe.r_dependencies_recipe.all|dictsort:"depends_on.name"%} +
    • {{i.depends_on.name}}
    • + {% endfor %} +
    "> + {{recipe.r_dependencies_recipe.all.count}} + + {% endif %} + + + + {% if recipe.r_dependencies_depends.all.count %} + {{recipe.name}} is brought in by" + data-content="
      + {% for i in recipe.r_dependencies_depends.all|dictsort:"recipe.name"%} +
    • {{i.recipe.name}}
    • + {% endfor %} +
    "> + {{recipe.r_dependencies_depends.all.count}} + + {% endif %} + + + {{recipe.file_path}} + + {{recipe.section}} + + {{recipe.license}} + + {{recipe.layer_version.layer.name}} + + {{recipe.layer_version.branch}} + + + + {{recipe.layer_version.commit|truncatechars:13}} + + + + {{recipe.layer_version.layer.local_path}} + - {% endfor %} + {% endfor %} {% include "basetable_bottom.html" %}
    diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 37e2af2574..1105829d96 100644 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py @@ -540,7 +540,7 @@ def tasks(request, build_id): def recipes(request, build_id): template = 'recipes.html' - mandatory_parameters = { 'count': 100, 'page' : 1}; + mandatory_parameters = { 'count': 100, 'page' : 1, 'orderby':'name:+'}; retval = _verify_parameters( request.GET, mandatory_parameters ) if retval: return _redirect_parameters( 'recipes', request.GET, mandatory_parameters, build_id = build_id) @@ -550,7 +550,80 @@ def recipes(request, build_id): recipes = _build_page_range(Paginator(queryset, request.GET.get('count', 100)),request.GET.get('page', 1)) - context = {'build': Build.objects.filter(pk=build_id)[0], 'objects': recipes, } + context = { + 'objectname': 'recipes', + 'build': Build.objects.filter(pk=build_id)[0], + 'objects': recipes, + 'tablecols':[ + { + 'name':'Recipe', + 'qhelp':'Information about a single piece of software, including where to download the source, configuration options, how to compile the source files and how to package the compiled output', + 'orderfield': _get_toggle_order(request, "name"), + 'ordericon':_get_toggle_order_icon(request, "name"), + }, + { + 'name':'Recipe version', + 'qhelp':'The recipe version and revision', + }, + { + 'name':'Dependencies', + 'qhelp':'Recipe build-time dependencies (other recipes)', + 'clclass': 'depends_on', 'hidden': 1, + }, + { + 'name':'Reverse dependencies', + 'qhelp':'Recipe build-time reverse dependencies (i.e. which other recipes depend on this recipe)', + 'clclass': 'depends_by', 'hidden': 1, + }, + { + 'name':'Recipe file', + 'qhelp':'Location in disk of the recipe .bb file', + 'orderfield': _get_toggle_order(request, "file_path"), + 'ordericon':_get_toggle_order_icon(request, "file_path"), + 'clclass': 'recipe_file', 'hidden': 0, + }, + { + 'name':'Section', + 'qhelp':'The section in which packages should be categorised. There are 5 sections: base, console, utils, devel and libs', + 'orderfield': _get_toggle_order(request, "section"), + 'ordericon':_get_toggle_order_icon(request, "section"), + 'clclass': 'recipe_section', 'hidden': 0, + }, + { + 'name':'License', + 'qhelp':'The list of source licenses for the recipe. Separate license names using | (pipe) means there is a choice between licenses. Separate license names using & (ampersand) means multiple licenses exist that cover different parts of the source', + 'orderfield': _get_toggle_order(request, "license"), + 'ordericon':_get_toggle_order_icon(request, "license"), + 'clclass': 'recipe_license', 'hidden': 0, + }, + { + 'name':'Layer', + 'qhelp':'The name of the layer prodiving the recipe', + 'orderfield': _get_toggle_order(request, "layer_version__layer__name"), + 'ordericon':_get_toggle_order_icon(request, "layer_version__layer__name"), + 'clclass': 'layer_version__layer__name', 'hidden': 0, + }, + { + 'name':'Layer branch', + 'qhelp':'The Git branch of the layer prodiving the recipe', + 'orderfield': _get_toggle_order(request, "layer_version__branch"), + 'ordericon':_get_toggle_order_icon(request, "layer_version__branch"), + 'clclass': 'layer_version__branch', 'hidden': 1, + }, + { + 'name':'Layer commit', + 'qhelp':'The Git commit of the layer prodiving the recipe', + 'clclass': 'layer_version__layer__commit', 'hidden': 1, + }, + { + 'name':'Layer directory', + 'qhelp':'Location in disk of the layer prodiving the recipe', + 'orderfield': _get_toggle_order(request, "layer_version__layer__local_path"), + 'ordericon':_get_toggle_order_icon(request, "layer_version__layer__local_path"), + 'clclass': 'layer_version__layer__local_path', 'hidden': 1, + }, + ] + } return render(request, template, context) -- cgit v1.2.3-54-g00ecf