From a786ac14f1c6c02c38dc141125035445413f1250 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Thu, 26 May 2016 16:12:20 +0100 Subject: bitbake: toaster: port table for Built packages to ToasterTable This is the table that displays all the packages built in the build. Build -> Packages. Adds a template snippet for the git revision popover. (Bitbake rev: df62f38ff4e634544c9b1e97c5f6ca45e84a4f1e) Signed-off-by: Michael Wood Signed-off-by: Richard Purdie --- bitbake/lib/toaster/toastergui/buildtables.py | 152 +++++++++++++++++++++ bitbake/lib/toaster/toastergui/tables.py | 10 +- .../toastergui/templates/basebuildpage.html | 26 ++-- .../lib/toaster/toastergui/templates/bpackage.html | 106 -------------- .../templates/buildinfo-toastertable.html | 23 ++++ .../templates/snippets/gitrev_popover.html | 8 ++ bitbake/lib/toaster/toastergui/urls.py | 7 +- bitbake/lib/toaster/toastergui/views.py | 90 ------------ 8 files changed, 203 insertions(+), 219 deletions(-) create mode 100644 bitbake/lib/toaster/toastergui/buildtables.py delete mode 100644 bitbake/lib/toaster/toastergui/templates/bpackage.html create mode 100644 bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html create mode 100644 bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html (limited to 'bitbake') diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py new file mode 100644 index 0000000000..cf07ea8789 --- /dev/null +++ b/bitbake/lib/toaster/toastergui/buildtables.py @@ -0,0 +1,152 @@ +# +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# BitBake Toaster Implementation +# +# Copyright (C) 2016 Intel Corporation +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +from orm.models import Build +import toastergui.tables as tables + +from toastergui.widgets import ToasterTable + + +class BuildTablesMixin(ToasterTable): + def get_context_data(self, **kwargs): + # We need to be explicit about which superclass we're calling here + # Otherwise the MRO gets in a right mess + context = ToasterTable.get_context_data(self, **kwargs) + context['build'] = Build.objects.get(pk=kwargs['build_id']) + return context + + +class BuiltPackagesTableBase(tables.PackagesTable): + """ Table to display all the packages built in a build """ + def __init__(self, *args, **kwargs): + super(BuiltPackagesTableBase, self).__init__(*args, **kwargs) + self.title = "Packages 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.package_set.all().exclude(recipe=None) + self.queryset = self.queryset.order_by(self.default_orderby) + + def setup_columns(self, *args, **kwargs): + super(BuiltPackagesTableBase, self).setup_columns(*args, **kwargs) + + def pkg_link_template(val): + """ return the template used for the link with the val as the + element value i.e. inside the """ + + return (''' + %s + ''' % val) + + def recipe_link_template(val): + return (''' + {%% if data.recipe %%} + %(value)s + {%% else %%} + %(value)s + {%% endif %%} + ''' % {'value': val}) + + add_pkg_link_to = ['name', 'version', 'size', 'license'] + add_recipe_link_to = ['recipe__name', 'recipe__version'] + + # Add the recipe and pkg build links to the required columns + for column in self.columns: + # Convert to template field style accessors + tmplv = column['field_name'].replace('__', '.') + tmplv = "{{data.%s}}" % tmplv + + if column['field_name'] in add_pkg_link_to: + # Don't overwrite an existing template + if column['static_data_template']: + column['static_data_template'] =\ + pkg_link_template(column['static_data_template']) + else: + column['static_data_template'] = pkg_link_template(tmplv) + + column['static_data_name'] = column['field_name'] + + elif column['field_name'] in add_recipe_link_to: + # Don't overwrite an existing template + if column['static_data_template']: + column['static_data_template'] =\ + recipe_link_template(column['static_data_template']) + else: + column['static_data_template'] =\ + recipe_link_template(tmplv) + column['static_data_name'] = column['field_name'] + + self.add_column(title="Layer", + field_name="recipe__layer_version__layer__name", + hidden=True, + orderable=True) + + self.add_column(title="Layer branch", + field_name="recipe__layer_version__branch", + hidden=True, + orderable=True) + + git_rev_template = ''' + {% with vcs_ref=data.recipe.layer_version.commit %} + {% include 'snippets/gitrev_popover.html' %} + {% endwith %} + ''' + + self.add_column(title="Layer commit", + static_data_name='vcs_ref', + static_data_template=git_rev_template, + hidden=True) + + +class BuiltPackagesTable(BuildTablesMixin, BuiltPackagesTableBase): + """ Show all the packages built for the selected build """ + def __init__(self, *args, **kwargs): + super(BuiltPackagesTable, self).__init__(*args, **kwargs) + self.title = "Packages built" + self.default_orderby = "name" + + self.empty_state =\ + ('No packages were built. How did this happen?' + 'Well, BitBake reuses as much stuff as possible.' + 'If all of the packages needed were already built and available' + 'in your build infrastructure, BitBake' + 'will not rebuild any of them. This might be slightly confusing,' + 'but it does make everything faster.') + + def setup_columns(self, *args, **kwargs): + super(BuiltPackagesTable, self).setup_columns(*args, **kwargs) + + def remove_dep_cols(columns): + for column in columns: + # We don't need these fields + if column['static_data_name'] in ['reverse_dependencies', + 'dependencies']: + continue + + yield column + + self.columns = list(remove_dep_cols(self.columns)) diff --git a/bitbake/lib/toaster/toastergui/tables.py b/bitbake/lib/toaster/toastergui/tables.py index 0cf96a0ef3..902f62f708 100644 --- a/bitbake/lib/toaster/toastergui/tables.py +++ b/bitbake/lib/toaster/toastergui/tables.py @@ -146,15 +146,8 @@ class LayersTable(ToasterTable): static_data_template=git_dir_template) revision_template = ''' - {% load projecttags %} {% with vcs_ref=data.get_vcs_reference %} - {% if vcs_ref|is_shaid %} - - {{vcs_ref|truncatechars:10}} - - {% else %} - {{vcs_ref}} - {% endif %} + {% include 'snippets/gitrev_popover.html' %} {% endwith %} ''' @@ -718,6 +711,7 @@ class PackagesTable(ToasterTable): self.add_column(title="Approx Size", orderable=True, + field_name="size", static_data_name="size", static_data_template="{% load projecttags %} \ {{data.size|filtered_filesizeformat}}") diff --git a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html index 76a602bf07..c002e42b7d 100644 --- a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html +++ b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html @@ -23,10 +23,19 @@ {% block localbreadcrumb %}{% endblock %} @@ -35,7 +44,7 @@