summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorMichael Wood <michael.g.wood@intel.com>2016-05-26 16:12:20 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-06-15 08:35:04 +0100
commita786ac14f1c6c02c38dc141125035445413f1250 (patch)
tree0e591f980a70afecbbde39c77e62b7f12ec4a889 /bitbake
parentb63f9518e718db09e14c8287fadf0bebcdf5ec9e (diff)
downloadpoky-a786ac14f1c6c02c38dc141125035445413f1250.tar.gz
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 <michael.g.wood@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/toaster/toastergui/buildtables.py152
-rw-r--r--bitbake/lib/toaster/toastergui/tables.py10
-rw-r--r--bitbake/lib/toaster/toastergui/templates/basebuildpage.html26
-rw-r--r--bitbake/lib/toaster/toastergui/templates/bpackage.html106
-rw-r--r--bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html23
-rw-r--r--bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html8
-rw-r--r--bitbake/lib/toaster/toastergui/urls.py7
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py90
8 files changed, 203 insertions, 219 deletions
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 @@
1#
2# ex:ts=4:sw=4:sts=4:et
3# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
4#
5# BitBake Toaster Implementation
6#
7# Copyright (C) 2016 Intel Corporation
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License version 2 as
11# published by the Free Software Foundation.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License along
19# with this program; if not, write to the Free Software Foundation, Inc.,
20# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21
22from orm.models import Build
23import toastergui.tables as tables
24
25from toastergui.widgets import ToasterTable
26
27
28class BuildTablesMixin(ToasterTable):
29 def get_context_data(self, **kwargs):
30 # We need to be explicit about which superclass we're calling here
31 # Otherwise the MRO gets in a right mess
32 context = ToasterTable.get_context_data(self, **kwargs)
33 context['build'] = Build.objects.get(pk=kwargs['build_id'])
34 return context
35
36
37class BuiltPackagesTableBase(tables.PackagesTable):
38 """ Table to display all the packages built in a build """
39 def __init__(self, *args, **kwargs):
40 super(BuiltPackagesTableBase, self).__init__(*args, **kwargs)
41 self.title = "Packages built"
42 self.default_orderby = "name"
43
44 def setup_queryset(self, *args, **kwargs):
45 build = Build.objects.get(pk=kwargs['build_id'])
46 self.static_context_extra['build'] = build
47 self.queryset = build.package_set.all().exclude(recipe=None)
48 self.queryset = self.queryset.order_by(self.default_orderby)
49
50 def setup_columns(self, *args, **kwargs):
51 super(BuiltPackagesTableBase, self).setup_columns(*args, **kwargs)
52
53 def pkg_link_template(val):
54 """ return the template used for the link with the val as the
55 element value i.e. inside the <a></a>"""
56
57 return ('''
58 <a href="
59 {%% url "package_built_detail" extra.build.pk data.pk %%}
60 ">%s</a>
61 ''' % val)
62
63 def recipe_link_template(val):
64 return ('''
65 {%% if data.recipe %%}
66 <a href="
67 {%% url "recipe" extra.build.pk data.recipe.pk %%}
68 ">%(value)s</a>
69 {%% else %%}
70 %(value)s
71 {%% endif %%}
72 ''' % {'value': val})
73
74 add_pkg_link_to = ['name', 'version', 'size', 'license']
75 add_recipe_link_to = ['recipe__name', 'recipe__version']
76
77 # Add the recipe and pkg build links to the required columns
78 for column in self.columns:
79 # Convert to template field style accessors
80 tmplv = column['field_name'].replace('__', '.')
81 tmplv = "{{data.%s}}" % tmplv
82
83 if column['field_name'] in add_pkg_link_to:
84 # Don't overwrite an existing template
85 if column['static_data_template']:
86 column['static_data_template'] =\
87 pkg_link_template(column['static_data_template'])
88 else:
89 column['static_data_template'] = pkg_link_template(tmplv)
90
91 column['static_data_name'] = column['field_name']
92
93 elif column['field_name'] in add_recipe_link_to:
94 # Don't overwrite an existing template
95 if column['static_data_template']:
96 column['static_data_template'] =\
97 recipe_link_template(column['static_data_template'])
98 else:
99 column['static_data_template'] =\
100 recipe_link_template(tmplv)
101 column['static_data_name'] = column['field_name']
102
103 self.add_column(title="Layer",
104 field_name="recipe__layer_version__layer__name",
105 hidden=True,
106 orderable=True)
107
108 self.add_column(title="Layer branch",
109 field_name="recipe__layer_version__branch",
110 hidden=True,
111 orderable=True)
112
113 git_rev_template = '''
114 {% with vcs_ref=data.recipe.layer_version.commit %}
115 {% include 'snippets/gitrev_popover.html' %}
116 {% endwith %}
117 '''
118
119 self.add_column(title="Layer commit",
120 static_data_name='vcs_ref',
121 static_data_template=git_rev_template,
122 hidden=True)
123
124
125class BuiltPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
126 """ Show all the packages built for the selected build """
127 def __init__(self, *args, **kwargs):
128 super(BuiltPackagesTable, self).__init__(*args, **kwargs)
129 self.title = "Packages built"
130 self.default_orderby = "name"
131
132 self.empty_state =\
133 ('<strong>No packages were built.</strong> How did this happen?'
134 'Well, BitBake reuses as much stuff as possible.'
135 'If all of the packages needed were already built and available'
136 'in your build infrastructure, BitBake'
137 'will not rebuild any of them. This might be slightly confusing,'
138 'but it does make everything faster.')
139
140 def setup_columns(self, *args, **kwargs):
141 super(BuiltPackagesTable, self).setup_columns(*args, **kwargs)
142
143 def remove_dep_cols(columns):
144 for column in columns:
145 # We don't need these fields
146 if column['static_data_name'] in ['reverse_dependencies',
147 'dependencies']:
148 continue
149
150 yield column
151
152 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):
146 static_data_template=git_dir_template) 146 static_data_template=git_dir_template)
147 147
148 revision_template = ''' 148 revision_template = '''
149 {% load projecttags %}
150 {% with vcs_ref=data.get_vcs_reference %} 149 {% with vcs_ref=data.get_vcs_reference %}
151 {% if vcs_ref|is_shaid %} 150 {% include 'snippets/gitrev_popover.html' %}
152 <a class="btn" data-content="<ul class='unstyled'> <li>{{vcs_ref}}</li> </ul>">
153 {{vcs_ref|truncatechars:10}}
154 </a>
155 {% else %}
156 {{vcs_ref}}
157 {% endif %}
158 {% endwith %} 151 {% endwith %}
159 ''' 152 '''
160 153
@@ -718,6 +711,7 @@ class PackagesTable(ToasterTable):
718 711
719 self.add_column(title="Approx Size", 712 self.add_column(title="Approx Size",
720 orderable=True, 713 orderable=True,
714 field_name="size",
721 static_data_name="size", 715 static_data_name="size",
722 static_data_template="{% load projecttags %} \ 716 static_data_template="{% load projecttags %} \
723 {{data.size|filtered_filesizeformat}}") 717 {{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 @@
23 {% block localbreadcrumb %}{% endblock %} 23 {% block localbreadcrumb %}{% endblock %}
24 </ul> 24 </ul>
25 <script> 25 <script>
26 $( function () { 26 $(document).ready(function(){
27 $('#breadcrumb > li').append('<span class="divider">&rarr;</span>'); 27 $('#breadcrumb > li').append('<span class="divider">&rarr;</span>');
28 $('#breadcrumb > li:last').addClass("active"); 28 $('#breadcrumb > li:last').addClass("active");
29 $('#breadcrumb > li:last > span').remove(); 29 $('#breadcrumb > li:last > span').remove();
30
31 $("#build-menu li a").each(function(){
32 /* Set the page active state in the Build menu */
33 if (window.location.href.split('?')[0] === $(this).prop("href")){
34 $(this).parent().addClass("active");
35 } else {
36 $(this).parent().removeClass("active");
37 }
38 });
30 }); 39 });
31 </script> 40 </script>
32 </div> 41 </div>
@@ -35,7 +44,7 @@
35 <div class="row"> 44 <div class="row">
36 <!-- begin left sidebar container --> 45 <!-- begin left sidebar container -->
37 <div id="nav" class="col-md-2"> 46 <div id="nav" class="col-md-2">
38 <ul class="nav nav-list well"> 47 <ul class="nav nav-list well" id="build-menu">
39 <li 48 <li
40 {% if request.resolver_match.url_name == 'builddashboard' %} 49 {% if request.resolver_match.url_name == 'builddashboard' %}
41 class="active" 50 class="active"
@@ -54,25 +63,14 @@
54 {% block nav-configuration %} 63 {% block nav-configuration %}
55 <li><a href="{% url 'configuration' build.pk %}">Configuration</a></li> 64 <li><a href="{% url 'configuration' build.pk %}">Configuration</a></li>
56 {% endblock %} 65 {% endblock %}
57 {% block nav-tasks %} 66
58 <li><a href="{% url 'tasks' build.pk %}">Tasks</a></li> 67 <li><a href="{% url 'tasks' build.pk %}">Tasks</a></li>
59 {% endblock %}
60 {% block nav-recipes %}
61 <li><a href="{% url 'recipes' build.pk %}">Recipes</a></li> 68 <li><a href="{% url 'recipes' build.pk %}">Recipes</a></li>
62 {% endblock %}
63 {% block nav-packages %}
64 <li><a href="{% url 'packages' build.pk %}">Packages</a></li> 69 <li><a href="{% url 'packages' build.pk %}">Packages</a></li>
65 {% endblock %}
66 <li class="nav-header">Performance</li> 70 <li class="nav-header">Performance</li>
67 {% block nav-buildtime %}
68 <li><a href="{% url 'buildtime' build.pk %}">Time</a></li> 71 <li><a href="{% url 'buildtime' build.pk %}">Time</a></li>
69 {% endblock %}
70 {% block nav-cputime %}
71 <li><a href="{% url 'cputime' build.pk %}">CPU usage</a></li> 72 <li><a href="{% url 'cputime' build.pk %}">CPU usage</a></li>
72 {% endblock %}
73 {% block nav-diskio %}
74 <li><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li> 73 <li><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li>
75 {% endblock %}
76 74
77 <li class="divider"></li> 75 <li class="divider"></li>
78 76
diff --git a/bitbake/lib/toaster/toastergui/templates/bpackage.html b/bitbake/lib/toaster/toastergui/templates/bpackage.html
deleted file mode 100644
index 575c27b3b5..0000000000
--- a/bitbake/lib/toaster/toastergui/templates/bpackage.html
+++ /dev/null
@@ -1,106 +0,0 @@
1{% extends "basebuildpage.html" %}
2
3{% load projecttags %}
4
5{% block title %} Packages built - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
6{% block localbreadcrumb %}
7<li>Packages</li>
8{% endblock %}
9
10{% block nav-packages %}
11 <li class="active"><a href="{% url 'packages' build.pk %}">Packages</a></li>
12{% endblock %}
13
14{% block buildinfomain %}
15<div class="col-md-10">
16
17{% if not request.GET.filter and not request.GET.search and not objects.paginator.count %}
18
19<!-- Empty - no data in database -->
20<div class="page-header">
21 <h1>
22 Packages
23 </h1>
24</div>
25<div class="alert alert-info lead">
26 <strong>No packages were built.</strong> How did this happen? Well, BitBake reuses as much stuff as possible.
27 If all of the packages needed were already built and available in your build infrastructure, BitBake
28 will not rebuild any of them. This might be slightly confusing, but it does make everything faster.
29</div>
30
31{% else %}
32
33<div class="page-header">
34 <h1>
35 {% if request.GET.search and objects.paginator.count > 0 %}
36 {{objects.paginator.count}} package{{objects.paginator.count|pluralize}} found
37 {%elif request.GET.search and objects.paginator.count == 0%}
38 No packages found
39 {%else%}
40 Packages
41 {%endif%}
42 </h1>
43</div>
44
45 {% if objects.paginator.count == 0 %}
46 <div class="alert">
47 <form class="no-results input-append" id="searchform">
48 <input id="search" name="search" class="input-xxlarge" type="text" value="{{request.GET.search}}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="input-append-addon btn" tabindex="-1"><i class="glyphicon glyphicon-remove"></i></a>{% endif %}
49 <button class="btn" type="submit" value="Search">Search</button>
50 <button class="btn btn-link" onclick="javascript:$('#search').val('');searchform.submit()">Show all packages</button>
51 </form>
52 </div>
53
54 {% else %}
55 {% include "basetable_top.html" %}
56
57 {% for package in objects %}
58
59 <tr class="data">
60
61 <!-- Package -->
62 <td class="package_name"><a href="{% url "package_built_detail" build.pk package.pk %}">{{package.name}}</a></td>
63 <!-- Package Version -->
64 <td class="package_version">{%if package.version%}<a href="{% url "package_built_detail" build.pk package.pk %}">{{package.version}}-{{package.revision}}</a>{%endif%}</td>
65 <!-- Package Size -->
66 <td class="size sizecol">{{package.size|filtered_filesizeformat}}</td>
67 <!-- License -->
68 <td class="license">{{package.license}}</td>
69
70 {%if package.recipe%}
71 <!-- Recipe -->
72 <td class="recipe__name"><a href="{% url "recipe" build.pk package.recipe.pk %}">{{package.recipe.name}}</a></td>
73 <!-- Recipe Version -->
74 <td class="recipe__version"><a href="{% url "recipe" build.pk package.recipe.pk %}">{{package.recipe.version}}</a></td>
75
76 <!-- Layer -->
77 <td class="recipe__layer_version__layer__name">{{package.recipe.layer_version.layer.name}}</td>
78 <!-- Layer branch -->
79 <td class="recipe__layer_version__branch">{{package.recipe.layer_version.branch}}</td>
80 <!-- Layer commit -->
81 <td class="recipe__layer_version__layer__commit">
82 <a class="btn"
83 data-content="<ul class='list-unstyled'>
84 <li>{{package.recipe.layer_version.commit}}</li>
85 </ul>">
86 {{package.recipe.layer_version.commit|truncatechars:13}}
87 </a>
88 </td>
89 <!-- Layer directory -->
90 {%else%}
91 <td class="recipe__name"></td>
92 <td class="recipe__version"></td>
93 <td class="recipe__layer_version__layer__name"></td>
94 <td class="recipe__layer_version__branch"></td>
95 <td class="recipe__layer_version__layer__commit"></td>
96 <td class="recipe__layer_version__local_path"></td>
97 {%endif%}
98
99 </tr>
100 {% endfor %}
101
102 {% include "basetable_bottom.html" %}
103 {% endif %} {# objects.paginator.count #}
104{% endif %} {# Empty #}
105</div>
106{% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html b/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html
new file mode 100644
index 0000000000..4ce5c4a8a5
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html
@@ -0,0 +1,23 @@
1{% extends "basebuildpage.html" %}
2
3{% load projecttags %}
4
5{% block title %} {{title}} - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
6{% block localbreadcrumb %}
7<li>{{title}}</li>
8{% endblock %}
9
10{% block nav-packages %}
11{% endblock %}
12
13{% block buildinfomain %}
14<div class="span10">
15{% url 'builtpackagestable' build.id as xhr_table_url %}
16 <div class="page-header">
17 <h1>
18 {{title}} (<span class="table-count-{{table_name}}">0</span>) </h2>
19 </h1>
20 </div>
21 {% include "toastertable.html" %}
22</div>
23{% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html
new file mode 100644
index 0000000000..281a3bd765
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html
@@ -0,0 +1,8 @@
1{% load projecttags %}
2{% if vcs_ref|is_shaid %}
3<a class="btn" data-content="<ul class='unstyled'> <li>{{vcs_ref}}</li> </ul>">
4 {{vcs_ref|truncatechars:10}}
5</a>
6{% else %}
7{{vcs_ref}}
8{% endif %}
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py
index 27b0baabfb..3ce0d51011 100644
--- a/bitbake/lib/toaster/toastergui/urls.py
+++ b/bitbake/lib/toaster/toastergui/urls.py
@@ -21,6 +21,7 @@ from django.views.generic import RedirectView, TemplateView
21 21
22from django.http import HttpResponseBadRequest 22from django.http import HttpResponseBadRequest
23from toastergui import tables 23from toastergui import tables
24from toastergui import buildtables
24from toastergui import typeaheads 25from toastergui import typeaheads
25from toastergui import api 26from toastergui import api
26 27
@@ -44,7 +45,11 @@ urlpatterns = patterns('toastergui.views',
44 url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)$', 'recipe', name='recipe'), 45 url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)$', 'recipe', name='recipe'),
45 url(r'^build/(?P<build_id>\d+)/recipe_packages/(?P<recipe_id>\d+)$', 'recipe_packages', name='recipe_packages'), 46 url(r'^build/(?P<build_id>\d+)/recipe_packages/(?P<recipe_id>\d+)$', 'recipe_packages', name='recipe_packages'),
46 47
47 url(r'^build/(?P<build_id>\d+)/packages/$', 'bpackage', name='packages'), 48 url(r'^build/(?P<build_id>\d+)/packages/$',
49 buildtables.BuiltPackagesTable.as_view(
50 template_name="buildinfo-toastertable.html"),
51 name='packages'),
52
48 url(r'^build/(?P<build_id>\d+)/package/(?P<package_id>\d+)$', 'package_built_detail', 53 url(r'^build/(?P<build_id>\d+)/package/(?P<package_id>\d+)$', 'package_built_detail',
49 name='package_built_detail'), 54 name='package_built_detail'),
50 url(r'^build/(?P<build_id>\d+)/package_built_dependencies/(?P<package_id>\d+)$', 55 url(r'^build/(?P<build_id>\d+)/package_built_dependencies/(?P<package_id>\d+)$',
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index 05108975ae..de1e4139a1 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -1493,96 +1493,6 @@ def configvars(request, build_id):
1493 _set_parameters_values(pagesize, orderby, request) 1493 _set_parameters_values(pagesize, orderby, request)
1494 return response 1494 return response
1495 1495
1496def bpackage(request, build_id):
1497 template = 'bpackage.html'
1498 (pagesize, orderby) = _get_parameters_values(request, 100, 'name:+')
1499 mandatory_parameters = { 'count' : pagesize, 'page' : 1, 'orderby' : orderby }
1500 retval = _verify_parameters( request.GET, mandatory_parameters )
1501 if retval:
1502 return _redirect_parameters( 'packages', request.GET, mandatory_parameters, build_id = build_id)
1503 (filter_string, search_term, ordering_string) = _search_tuple(request, Package)
1504 queryset = Package.objects.filter(build = build_id).filter(size__gte=0)
1505 queryset = _get_queryset(Package, queryset, filter_string, search_term, ordering_string, 'name')
1506
1507 packages = _build_page_range(Paginator(queryset, pagesize),request.GET.get('page', 1))
1508
1509 build = Build.objects.get( pk = build_id )
1510
1511 context = {
1512 'objectname': 'packages built',
1513 'build': build,
1514 'project': build.project,
1515 'objects' : packages,
1516 'default_orderby' : 'name:+',
1517 'tablecols':[
1518 {
1519 'name':'Package',
1520 'qhelp':'Packaged output resulting from building a recipe',
1521 'orderfield': _get_toggle_order(request, "name"),
1522 'ordericon':_get_toggle_order_icon(request, "name"),
1523 },
1524 {
1525 'name':'Package version',
1526 'qhelp':'The package version and revision',
1527 },
1528 {
1529 'name':'Size',
1530 'qhelp':'The size of the package',
1531 'orderfield': _get_toggle_order(request, "size", True),
1532 'ordericon':_get_toggle_order_icon(request, "size"),
1533 'orderkey' : 'size',
1534 'clclass': 'size', 'hidden': 0,
1535 'dclass' : 'span2',
1536 },
1537 {
1538 'name':'License',
1539 'qhelp':'The license under which the package is distributed. 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',
1540 'orderfield': _get_toggle_order(request, "license"),
1541 'ordericon':_get_toggle_order_icon(request, "license"),
1542 'orderkey' : 'license',
1543 'clclass': 'license', 'hidden': 1,
1544 },
1545 {
1546 'name':'Recipe',
1547 'qhelp':'The name of the recipe building the package',
1548 'orderfield': _get_toggle_order(request, "recipe__name"),
1549 'ordericon':_get_toggle_order_icon(request, "recipe__name"),
1550 'orderkey' : 'recipe__name',
1551 'clclass': 'recipe__name', 'hidden': 0,
1552 },
1553 {
1554 'name':'Recipe version',
1555 'qhelp':'Version and revision of the recipe building the package',
1556 'clclass': 'recipe__version', 'hidden': 1,
1557 },
1558 {
1559 'name':'Layer',
1560 'qhelp':'The name of the layer providing the recipe that builds the package',
1561 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__name"),
1562 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__name"),
1563 'orderkey' : 'recipe__layer_version__layer__name',
1564 'clclass': 'recipe__layer_version__layer__name', 'hidden': 1,
1565 },
1566 {
1567 'name':'Layer branch',
1568 'qhelp':'The Git branch of the layer providing the recipe that builds the package',
1569 'orderfield': _get_toggle_order(request, "recipe__layer_version__branch"),
1570 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__branch"),
1571 'orderkey' : 'recipe__layer_version__branch',
1572 'clclass': 'recipe__layer_version__branch', 'hidden': 1,
1573 },
1574 {
1575 'name':'Layer commit',
1576 'qhelp':'The Git commit of the layer providing the recipe that builds the package',
1577 'clclass': 'recipe__layer_version__layer__commit', 'hidden': 1,
1578 },
1579 ]
1580 }
1581
1582 response = render(request, template, context)
1583 _set_parameters_values(pagesize, orderby, request)
1584 return response
1585
1586def bfile(request, build_id, package_id): 1496def bfile(request, build_id, package_id):
1587 template = 'bfile.html' 1497 template = 'bfile.html'
1588 files = Package_File.objects.filter(package = package_id) 1498 files = Package_File.objects.filter(package = package_id)