diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
index cf07ea8789..dc742b9fe5 100644
--- a/bitbake/lib/toaster/toastergui/buildtables.py
+++ b/bitbake/lib/toaster/toastergui/buildtables.py
@@ -150,3 +150,132 @@ class BuiltPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
yield column
self.columns = list(remove_dep_cols(self.columns))
+
+
+class BuiltRecipesTable(BuildTablesMixin):
+ """ Table to show the recipes that have been built in this build """
+
+ def __init__(self, *args, **kwargs):
+ super(BuiltRecipesTable, self).__init__(*args, **kwargs)
+ self.title = "Recipes built"
+ self.default_orderby = "name"
+
+ def setup_queryset(self, *args, **kwargs):
+ build = Build.objects.get(pk=kwargs['build_id'])
+ self.static_context_extra['build'] = build
+ self.queryset = build.get_recipes()
+ self.queryset = self.queryset.order_by(self.default_orderby)
+
+ def setup_columns(self, *args, **kwargs):
+ recipe_name_tmpl =\
+ ''\
+ '{{data.name}}'\
+ ''
+
+ recipe_version_tmpl =\
+ ''\
+ '{{data.version}}'\
+ ''
+
+ recipe_file_tmpl =\
+ '{{data.file_path}}'\
+ '{% if data.pathflags %}({{data.pathflags}})'\
+ '{% endif %}'
+
+ git_rev_template = '''
+ {% with vcs_ref=data.layer_version.commit %}
+ {% include 'snippets/gitrev_popover.html' %}
+ {% endwith %}
+ '''
+
+ depends_on_tmpl = '''
+ {% with deps=data.r_dependencies_recipe.all %}
+ {% with count=deps|length %}
+ {% if count %}
+
+ {{data.name}} dependencies"
+ data-content="
">
+ {{count}}
+
+ {% endif %}{% endwith %}{% endwith %}
+ '''
+
+ rev_depends_tmpl = '''
+ {% with revs=data.r_dependencies_depends.all %}
+ {% with count=revs|length %}
+ {% if count %}
+
+ {{data.name}} reverse dependencies"
+ data-content="">
+ {{count}}
+
+ {% endif %}{% endwith %}{% endwith %}
+ '''
+
+ self.add_column(title="Name",
+ field_name="name",
+ static_data_name='name',
+ orderable=True,
+ static_data_template=recipe_name_tmpl)
+
+ self.add_column(title="Version",
+ field_name="version",
+ static_data_name='version',
+ static_data_template=recipe_version_tmpl)
+
+ self.add_column(title="Dependencies",
+ static_data_name="dependencies",
+ static_data_template=depends_on_tmpl,
+ hidden=True)
+
+ self.add_column(title="Reverse dependencies",
+ static_data_name="revdeps",
+ static_data_template=rev_depends_tmpl,
+ help_text='Recipe build-time reverse dependencies'
+ ' (i.e. the recipes that depend on this recipe)',
+ hidden=True)
+
+ self.add_column(title="Recipe file",
+ field_name="file_path",
+ static_data_name="file_path",
+ static_data_template=recipe_file_tmpl)
+
+ self.add_column(title="Section",
+ field_name="section",
+ orderable=True)
+
+ self.add_column(title="License",
+ field_name="license",
+ help_text='Multiple license names separated by the'
+ ' pipe character indicates a choice between licenses.'
+ ' Multiple license names separated by the ampersand'
+ ' character indicates multiple licenses exist that'
+ ' cover different parts of the source',
+ orderable=True)
+
+ self.add_column(title="Layer",
+ field_name="layer_version__layer__name",
+ orderable=True)
+
+ self.add_column(title="Layer branch",
+ field_name="layer_version__branch",
+ orderable=True)
+
+ self.add_column(title="Layer commit",
+ static_data_name="commit",
+ static_data_template=git_rev_template)
diff --git a/bitbake/lib/toaster/toastergui/templates/recipes.html b/bitbake/lib/toaster/toastergui/templates/recipes.html
deleted file mode 100644
index fe06f8b205..0000000000
--- a/bitbake/lib/toaster/toastergui/templates/recipes.html
+++ /dev/null
@@ -1,111 +0,0 @@
-{% extends "basebuildpage.html" %}
-
-{% load projecttags %}
-
-{% block title %} Recipes - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
-{% block localbreadcrumb %}
-Recipes
-{% endblock %}
-
-{% block nav-recipes %}
- Recipes
-{% endblock %}
-
-{% block buildinfomain %}
-
-
-
-{% if objects.paginator.count == 0 %}
-
-
-{% else %}
-{% include "basetable_top.html" %}
-
- {% for recipe in objects %}
-
-
- |
- {{recipe.name}}
- |
-
- {{recipe.version}}
- |
-
-
- {% with deps=recipe_deps|get_dict_value:recipe.pk %}
- {% with count=deps|length %}
- {% if count %}
- {{recipe.name}} dependencies"
- data-content="">
- {{count}}
-
- {% endif %}
- {% endwith %}
- {% endwith %}
- |
-
-
- {% with revs=recipe_revs|get_dict_value:recipe.pk %}
- {% with count=revs|length %}
- {% if count %}
- {{recipe.name}} reverse dependencies"
- data-content="">
- {{count}}
-
- {% endif %}
- {% endwith %}
- {% endwith %}
- |
-
- {{recipe.file_path}} {% if recipe.pathflags %}({{recipe.pathflags}}){% endif %} |
-
- {{recipe.section}} |
-
- {{recipe.license}} |
-
- {{recipe.layer_version.layer.name}} |
-
- {{recipe.layer_version.branch}} |
-
-
-
- {{recipe.layer_version.commit|truncatechars:13}}
-
- |
-
-
- {% endfor %}
-
-{% include "basetable_bottom.html" %}
-{% endif %}
-
-{% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py
index 3ce0d51011..0636c956b2 100644
--- a/bitbake/lib/toaster/toastergui/urls.py
+++ b/bitbake/lib/toaster/toastergui/urls.py
@@ -40,8 +40,13 @@ urlpatterns = patterns('toastergui.views',
url(r'^build/(?P\d+)/tasks/(?P\d+)/$', 'tasks_task', name='tasks_task'),
url(r'^build/(?P\d+)/task/(?P\d+)$', 'task', name='task'),
- url(r'^build/(?P\d+)/recipes/$', 'recipes', name='recipes'),
+ url(r'^build/(?P\d+)/recipes/$',
+ buildtables.BuiltRecipesTable.as_view(
+ template_name="buildinfo-toastertable.html"),
+ name='recipes'),
+
url(r'^build/(?P\d+)/recipe/(?P\d+)/active_tab/(?P\d{1})$', 'recipe', name='recipe'),
+
url(r'^build/(?P\d+)/recipe/(?P\d+)$', 'recipe', name='recipe'),
url(r'^build/(?P\d+)/recipe_packages/(?P\d+)$', 'recipe_packages', name='recipe_packages'),
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index de1e4139a1..3a25d5ea1e 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -1274,117 +1274,6 @@ def diskio(request, build_id):
def cputime(request, build_id):
return tasks_common(request, build_id, 'cputime', '')
-def recipes(request, build_id):
- template = 'recipes.html'
- (pagesize, orderby) = _get_parameters_values(request, 100, 'name:+')
- mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby' : orderby }
- retval = _verify_parameters( request.GET, mandatory_parameters )
- if retval:
- return _redirect_parameters( 'recipes', request.GET, mandatory_parameters, build_id = build_id)
- (filter_string, search_term, ordering_string) = _search_tuple(request, Recipe)
-
- build = Build.objects.get(pk=build_id)
-
- queryset = build.get_recipes()
- queryset = _get_queryset(Recipe, queryset, filter_string, search_term, ordering_string, 'name')
-
- recipes = _build_page_range(Paginator(queryset, pagesize),request.GET.get('page', 1))
-
- # prefetch the forward and reverse recipe dependencies
- deps = { }
- revs = { }
- queryset_dependency=Recipe_Dependency.objects.filter(recipe__layer_version__build_id = build_id).select_related("depends_on", "recipe")
- for recipe in recipes:
- deplist = [ ]
- for recipe_dep in [x for x in queryset_dependency if x.recipe_id == recipe.id]:
- deplist.append(recipe_dep)
- deps[recipe.id] = deplist
- revlist = [ ]
- for recipe_dep in [x for x in queryset_dependency if x.depends_on_id == recipe.id]:
- revlist.append(recipe_dep)
- revs[recipe.id] = revlist
-
- context = {
- 'objectname': 'recipes',
- 'build': build,
- 'project': build.project,
- 'objects': recipes,
- 'default_orderby' : 'name:+',
- 'recipe_deps' : deps,
- 'recipe_revs' : revs,
- '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 (i.e. other recipes)',
- 'clclass': 'depends_on', 'hidden': 1,
- },
- {
- 'name':'Reverse dependencies',
- 'qhelp':'Recipe build-time reverse dependencies (i.e. the recipes that depend on this recipe)',
- 'clclass': 'depends_by', 'hidden': 1,
- },
- {
- 'name':'Recipe file',
- 'qhelp':'Path to the recipe .bb file',
- 'orderfield': _get_toggle_order(request, "file_path"),
- 'ordericon':_get_toggle_order_icon(request, "file_path"),
- 'orderkey' : 'file_path',
- 'clclass': 'recipe_file', 'hidden': 0,
- },
- {
- 'name':'Section',
- 'qhelp':'The section in which recipes should be categorized',
- 'orderfield': _get_toggle_order(request, "section"),
- 'ordericon':_get_toggle_order_icon(request, "section"),
- 'orderkey' : 'section',
- 'clclass': 'recipe_section', 'hidden': 0,
- },
- {
- 'name':'License',
- 'qhelp':'The list of source licenses for the recipe. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source',
- 'orderfield': _get_toggle_order(request, "license"),
- 'ordericon':_get_toggle_order_icon(request, "license"),
- 'orderkey' : 'license',
- 'clclass': 'recipe_license', 'hidden': 0,
- },
- {
- 'name':'Layer',
- 'qhelp':'The name of the layer providing the recipe',
- 'orderfield': _get_toggle_order(request, "layer_version__layer__name"),
- 'ordericon':_get_toggle_order_icon(request, "layer_version__layer__name"),
- 'orderkey' : 'layer_version__layer__name',
- 'clclass': 'layer_version__layer__name', 'hidden': 0,
- },
- {
- 'name':'Layer branch',
- 'qhelp':'The Git branch of the layer providing the recipe',
- 'orderfield': _get_toggle_order(request, "layer_version__branch"),
- 'ordericon':_get_toggle_order_icon(request, "layer_version__branch"),
- 'orderkey' : 'layer_version__branch',
- 'clclass': 'layer_version__branch', 'hidden': 1,
- },
- {
- 'name':'Layer commit',
- 'qhelp':'The Git commit of the layer providing the recipe',
- 'clclass': 'layer_version__layer__commit', 'hidden': 1,
- },
- ]
- }
-
- response = render(request, template, context)
- _set_parameters_values(pagesize, orderby, request)
- return response
-
def configuration(request, build_id):
template = 'configuration.html'