diff options
author | Michael Wood <michael.g.wood@intel.com> | 2016-05-26 16:12:23 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-06-15 08:35:04 +0100 |
commit | caae3b6206dc31690f0c6638daaa7bb072c69042 (patch) | |
tree | 780fc9c4e430f93e1b1ae8d522ee921e82515876 | |
parent | b2a68f55110b39aaf0b0d47bf533251a59a40a41 (diff) | |
download | poky-caae3b6206dc31690f0c6638daaa7bb072c69042.tar.gz |
bitbake: toaster: port Installed packages table to ToasterTable
(Bitbake rev: 2418c092abd9a503becf5e786125f8cdddd8652c)
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/toaster/toastergui/buildtables.py | 63 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/builddashboard.html | 4 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/target.html | 118 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/urls.py | 9 | ||||
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 169 |
5 files changed, 75 insertions, 288 deletions
diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py index 51c136f988..17de369305 100644 --- a/bitbake/lib/toaster/toastergui/buildtables.py +++ b/bitbake/lib/toaster/toastergui/buildtables.py | |||
@@ -19,8 +19,8 @@ | |||
19 | # with this program; if not, write to the Free Software Foundation, Inc., | 19 | # with this program; if not, write to the Free Software Foundation, Inc., |
20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 20 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
21 | 21 | ||
22 | from orm.models import Build, Task | 22 | from orm.models import Build, Task, Target, Package |
23 | from django.db.models import Q | 23 | from django.db.models import Q, Sum |
24 | 24 | ||
25 | import toastergui.tables as tables | 25 | import toastergui.tables as tables |
26 | from toastergui.widgets import ToasterTable | 26 | from toastergui.widgets import ToasterTable |
@@ -155,6 +155,65 @@ class BuiltPackagesTable(BuildTablesMixin, BuiltPackagesTableBase): | |||
155 | self.columns = list(remove_dep_cols(self.columns)) | 155 | self.columns = list(remove_dep_cols(self.columns)) |
156 | 156 | ||
157 | 157 | ||
158 | class InstalledPackagesTable(BuildTablesMixin, BuiltPackagesTableBase): | ||
159 | """ Show all packages installed in an image """ | ||
160 | def __init__(self, *args, **kwargs): | ||
161 | super(InstalledPackagesTable, self).__init__(*args, **kwargs) | ||
162 | self.title = "Installed Packages" | ||
163 | self.default_orderby = "name" | ||
164 | |||
165 | def make_package_list(self, target): | ||
166 | # The database design means that you get the intermediate objects and | ||
167 | # not package objects like you'd really want so we get them here | ||
168 | pkgs = target.target_installed_package_set.values_list('package', | ||
169 | flat=True) | ||
170 | return Package.objects.filter(pk__in=pkgs) | ||
171 | |||
172 | def get_context_data(self, **kwargs): | ||
173 | context = super(InstalledPackagesTable, | ||
174 | self).get_context_data(**kwargs) | ||
175 | |||
176 | target = Target.objects.get(pk=kwargs['target_id']) | ||
177 | packages = self.make_package_list(target) | ||
178 | |||
179 | context['packages_sum'] = packages.aggregate( | ||
180 | Sum('installed_size'))['installed_size__sum'] | ||
181 | |||
182 | context['target'] = target | ||
183 | return context | ||
184 | |||
185 | def setup_queryset(self, *args, **kwargs): | ||
186 | build = Build.objects.get(pk=kwargs['build_id']) | ||
187 | self.static_context_extra['build'] = build | ||
188 | |||
189 | target = Target.objects.get(pk=kwargs['target_id']) | ||
190 | self.queryset = self.make_package_list(target) | ||
191 | |||
192 | def setup_columns(self, *args, **kwargs): | ||
193 | super(InstalledPackagesTable, self).setup_columns(**kwargs) | ||
194 | self.add_column(title="Installed size", | ||
195 | static_data_name="installed_size", | ||
196 | static_data_template="{% load projecttags %}" | ||
197 | "{{data.size|filtered_filesizeformat}}", | ||
198 | orderable=True) | ||
199 | |||
200 | # Add the template to show installed name for installed packages | ||
201 | install_name_tmpl =\ | ||
202 | ('{{data.name}} ' | ||
203 | '{% if data.installed_name and data.installed_name !=' | ||
204 | ' data.name %}' | ||
205 | '<span class="muted"> as {{data.installed_name}}</span>' | ||
206 | ' <i class="icon-question-sign get-help hover-help"' | ||
207 | ' title="{{data.name}} was renamed at packaging time and' | ||
208 | ' was installed in your image as {{data.installed_name}}' | ||
209 | '"></i>{% endif %} ') | ||
210 | |||
211 | for column in self.columns: | ||
212 | if column['static_data_name'] == 'name': | ||
213 | column['static_data_template'] = install_name_tmpl | ||
214 | break | ||
215 | |||
216 | |||
158 | class BuiltRecipesTable(BuildTablesMixin): | 217 | class BuiltRecipesTable(BuildTablesMixin): |
159 | """ Table to show the recipes that have been built in this build """ | 218 | """ Table to show the recipes that have been built in this build """ |
160 | 219 | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/builddashboard.html b/bitbake/lib/toaster/toastergui/templates/builddashboard.html index 5425dfe610..f33757eaca 100644 --- a/bitbake/lib/toaster/toastergui/templates/builddashboard.html +++ b/bitbake/lib/toaster/toastergui/templates/builddashboard.html | |||
@@ -102,7 +102,7 @@ | |||
102 | files from a previous build already exist in your | 102 | files from a previous build already exist in your |
103 | <code>.../poky/build/tmp/deploy</code> | 103 | <code>.../poky/build/tmp/deploy</code> |
104 | directory. You can | 104 | directory. You can |
105 | also <a href="{% url 'targetpkg' build.pk target.target.pk %}">view the | 105 | also <a href="{% url 'target' build.pk target.target.pk %}">view the |
106 | license manifest information</a> in Toaster. | 106 | license manifest information</a> in Toaster. |
107 | </p> | 107 | </p> |
108 | </div> | 108 | </div> |
@@ -115,7 +115,7 @@ | |||
115 | License manifest | 115 | License manifest |
116 | </dt> | 116 | </dt> |
117 | <dd> | 117 | <dd> |
118 | <a href="{% url 'targetpkg' build.pk target.target.pk %}">View in Toaster</a> | | 118 | <a href="{% url 'target' build.pk target.target.pk %}">View in Toaster</a> | |
119 | <a href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">Download</a></dd> | 119 | <a href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">Download</a></dd> |
120 | <dt> | 120 | <dt> |
121 | <i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i> | 121 | <i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i> |
diff --git a/bitbake/lib/toaster/toastergui/templates/target.html b/bitbake/lib/toaster/toastergui/templates/target.html index 9f31239d8e..0b2fe99577 100644 --- a/bitbake/lib/toaster/toastergui/templates/target.html +++ b/bitbake/lib/toaster/toastergui/templates/target.html | |||
@@ -17,9 +17,7 @@ | |||
17 | {% endblock %} | 17 | {% endblock %} |
18 | 18 | ||
19 | {% block buildinfomain %} | 19 | {% block buildinfomain %} |
20 | |||
21 | <div class="col-md-10"> | 20 | <div class="col-md-10"> |
22 | |||
23 | <div class="page-header"> | 21 | <div class="page-header"> |
24 | <h1> | 22 | <h1> |
25 | {% if request.GET.search and objects.paginator.count > 0 %} | 23 | {% if request.GET.search and objects.paginator.count > 0 %} |
@@ -31,8 +29,6 @@ | |||
31 | {% endif %} | 29 | {% endif %} |
32 | </h1> | 30 | </h1> |
33 | </div> | 31 | </div> |
34 | |||
35 | |||
36 | <div id="navTab"> | 32 | <div id="navTab"> |
37 | <ul class="nav nav-pills"> | 33 | <ul class="nav nav-pills"> |
38 | <li class="active"> | 34 | <li class="active"> |
@@ -50,113 +46,11 @@ | |||
50 | </ul> | 46 | </ul> |
51 | 47 | ||
52 | <div id="image-packages" class="tab-pane"> | 48 | <div id="image-packages" class="tab-pane"> |
53 | 49 | {# xhr_table_url is just the current url so leave it blank #} | |
54 | {% if objects.paginator.count == 0 %} | 50 | {% with xhr_table_url='' %} |
55 | <div class="alert"> | 51 | {% include "toastertable.html" %} |
56 | <form class="no-results input-append" id="searchform"> | 52 | {% endwith %} |
57 | <input id="search" name="search" class="input-xxlarge" type="text" value="{% if request.GET.search %}{{request.GET.search}}{% endif %}"/>{% 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 %} | ||
58 | <button class="btn" type="submit" value="Search">Search</button> | ||
59 | <button class="btn btn-link" onclick="javascript:$('#search').val('');searchform.submit()">Show all packages</button> | ||
60 | </form> | ||
61 | </div> | ||
62 | |||
63 | |||
64 | {% else %} | ||
65 | {% include "basetable_top.html" %} | ||
66 | {% for package in objects %} | ||
67 | <tr> | ||
68 | {# order of the table data must match the columns defined in template's context tablecols #} | ||
69 | <td class="package_name"> | ||
70 | <a href="{% url 'package_included_detail' build.id target.id package.id %}"> | ||
71 | {{package.name}} | ||
72 | </a> | ||
73 | {% if package.installed_name and package.name != package.installed_name %} | ||
74 | <span class="muted"> as {{package.installed_name}}</span> | ||
75 | <i class="icon-question-sign get-help hover-help" title='{{package.name|add:" was renamed at packaging time and was installed in your image as "|add:package.installed_name}}'></i> | ||
76 | {% endif %} | ||
77 | </td> | ||
78 | <td class="package_version"> | ||
79 | <a href="{% url 'package_included_detail' build.id target.id package.id %}"> | ||
80 | {{package.version|filtered_packageversion:package.revision}} | ||
81 | </a> | ||
82 | </td> | ||
83 | <td class="license"> | ||
84 | {{package.license}} | ||
85 | </td> | ||
86 | <td class="size sizecol"> | ||
87 | {{package.size|filtered_installedsize:package.installed_size|filtered_filesizeformat}} | ||
88 | </td> | ||
89 | |||
90 | <td class="size_over_total sizecol"> | ||
91 | {{package|filter_sizeovertotal:packages_sum}} | ||
92 | </td> | ||
93 | <td class="depends"> | ||
94 | {% with deps=package.runtime_dependencies %} | ||
95 | {% with deps_count=deps|length %} | ||
96 | {% if deps_count > 0 %} | ||
97 | <a class="btn" | ||
98 | title="<a href='{% url "package_included_dependencies" build.id target.id package.id %}'>{{package.name}}</a> dependencies" | ||
99 | data-content="<ul class='list-unstyled'> | ||
100 | {% for i in deps|dictsort:'depends_on.name' %} | ||
101 | <li><a href='{% url "package_included_detail" build.pk target.id i.depends_on.pk %}'>{{i.depends_on.name}}</a></li> | ||
102 | {% endfor %} | ||
103 | </ul>"> | ||
104 | {{deps_count}} | ||
105 | </a> | ||
106 | {% endif %} | ||
107 | {% endwith %} | ||
108 | {% endwith %} | ||
109 | </td> | ||
110 | <td class="brought_in_by"> | ||
111 | {% with rdeps=package.reverse_runtime_dependencies %} | ||
112 | {% with rdeps_count=rdeps|length %} | ||
113 | {% if rdeps_count > 0 %} | ||
114 | <a class="btn" | ||
115 | title="<a href='{% url "package_included_reverse_dependencies" build.id target.id package.id %}'>{{package.name}}</a> reverse dependencies" | ||
116 | data-content="<ul class='list-unstyled'> | ||
117 | {% for i in rdeps|dictsort:'package.name' %} | ||
118 | <li><a href='{% url "package_included_detail" build.id target.id i.package.id %}'>{{i.package.name}}</a></li> | ||
119 | {% endfor %} | ||
120 | </ul>"> | ||
121 | {{rdeps_count}} | ||
122 | </a> | ||
123 | {% endif %} | ||
124 | {% endwith %} | ||
125 | {% endwith %} | ||
126 | </td> | ||
127 | <td class="recipe_name"> | ||
128 | {% if package.recipe.version %} | ||
129 | <a href="{% url 'recipe' build.id package.recipe_id %}"> | ||
130 | {{ package.recipe.name }} | ||
131 | </a> | ||
132 | {% endif %} | ||
133 | </td> | ||
134 | <td class="recipe_version"> | ||
135 | {% if package.recipe.version %} | ||
136 | <a href="{% url 'recipe' build.id package.recipe_id %}"> | ||
137 | {{ package.recipe.version }} | ||
138 | </a> | ||
139 | {% endif %} | ||
140 | </td> | ||
141 | <td class="layer_name"> | ||
142 | {{ package.recipe.layer_version.layer.name }} | ||
143 | </td> | ||
144 | <td class="layer_branch"> | ||
145 | {{ package.recipe.layer_version.branch}} | ||
146 | </td> | ||
147 | <td class="layer_commit"> | ||
148 | <a class="btn" | ||
149 | data-content="<ul class='list-unstyled'> | ||
150 | <li>{{package.recipe.layer_version.commit}}</li> | ||
151 | </ul>"> | ||
152 | {{package.recipe.layer_version.commit|truncatechars:13}} | ||
153 | </a> | ||
154 | </td> | ||
155 | </tr> | ||
156 | {% endfor %} | ||
157 | |||
158 | {% include "basetable_bottom.html" %} | ||
159 | {% endif %} | ||
160 | </div> <!-- tabpane --> | 53 | </div> <!-- tabpane --> |
161 | </div> <!--span 10--> | 54 | </div> <!--navTab -->> |
55 | <!-- col-md-10 --> | ||
162 | {% endblock buildinfomain %} | 56 | {% endblock buildinfomain %} |
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py index c4913f124a..9510a386ea 100644 --- a/bitbake/lib/toaster/toastergui/urls.py +++ b/bitbake/lib/toaster/toastergui/urls.py | |||
@@ -68,9 +68,12 @@ urlpatterns = patterns('toastergui.views', | |||
68 | url(r'^build/(?P<build_id>\d+)/package_included_reverse_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$', | 68 | url(r'^build/(?P<build_id>\d+)/package_included_reverse_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$', |
69 | 'package_included_reverse_dependencies', name='package_included_reverse_dependencies'), | 69 | 'package_included_reverse_dependencies', name='package_included_reverse_dependencies'), |
70 | 70 | ||
71 | # images are known as targets in the internal model | 71 | url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', |
72 | url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'target', name='target'), | 72 | buildtables.InstalledPackagesTable.as_view( |
73 | url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/targetpkg$', 'targetpkg', name='targetpkg'), | 73 | template_name="target.html"), |
74 | name='target'), | ||
75 | |||
76 | |||
74 | url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'xhr_dirinfo', name='dirinfo_ajax'), | 77 | url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'xhr_dirinfo', name='dirinfo_ajax'), |
75 | url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'), | 78 | url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'), |
76 | url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', 'dirinfo', name='dirinfo_filepath'), | 79 | url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', 'dirinfo', name='dirinfo_filepath'), |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 35ab63a22e..88bc39a166 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
@@ -681,175 +681,6 @@ def recipe_packages(request, build_id, recipe_id): | |||
681 | _set_parameters_values(pagesize, orderby, request) | 681 | _set_parameters_values(pagesize, orderby, request) |
682 | return response | 682 | return response |
683 | 683 | ||
684 | def target_common( request, build_id, target_id, variant ): | ||
685 | template = "target.html" | ||
686 | default_orderby = 'name:+' | ||
687 | |||
688 | (pagesize, orderby) = _get_parameters_values(request, 25, default_orderby) | ||
689 | mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby': orderby } | ||
690 | retval = _verify_parameters( request.GET, mandatory_parameters ) | ||
691 | if retval: | ||
692 | return _redirect_parameters( | ||
693 | variant, request.GET, mandatory_parameters, | ||
694 | build_id = build_id, target_id = target_id ) | ||
695 | ( filter_string, search_term, ordering_string ) = _search_tuple( request, Package ) | ||
696 | |||
697 | # FUTURE: get rid of nested sub-queries replacing with ManyToMany field | ||
698 | queryset = Package.objects.filter( | ||
699 | size__gte = 0, | ||
700 | id__in = Target_Installed_Package.objects.filter( | ||
701 | target_id=target_id ).values( 'package_id' )) | ||
702 | packages_sum = queryset.aggregate( Sum( 'installed_size' )) | ||
703 | queryset = _get_queryset( | ||
704 | Package, queryset, filter_string, search_term, ordering_string, 'name' ) | ||
705 | queryset = queryset.select_related("recipe", "recipe__layer_version", "recipe__layer_version__layer") | ||
706 | packages = _build_page_range( Paginator(queryset, pagesize), request.GET.get( 'page', 1 )) | ||
707 | |||
708 | build = Build.objects.get( pk = build_id ) | ||
709 | |||
710 | # bring in package dependencies | ||
711 | for p in packages.object_list: | ||
712 | p.runtime_dependencies = p.package_dependencies_source.filter( | ||
713 | target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS ).select_related("depends_on") | ||
714 | p.reverse_runtime_dependencies = p.package_dependencies_target.filter( | ||
715 | target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS ).select_related("package") | ||
716 | tc_package = { | ||
717 | 'name' : 'Package', | ||
718 | 'qhelp' : 'Packaged output resulting from building a recipe included in this image', | ||
719 | 'orderfield' : _get_toggle_order( request, "name" ), | ||
720 | 'ordericon' : _get_toggle_order_icon( request, "name" ), | ||
721 | } | ||
722 | tc_packageVersion = { | ||
723 | 'name' : 'Package version', | ||
724 | 'qhelp' : 'The package version and revision', | ||
725 | } | ||
726 | tc_size = { | ||
727 | 'name' : 'Size', | ||
728 | 'qhelp' : 'The size of the package', | ||
729 | 'orderfield' : _get_toggle_order( request, "size", True ), | ||
730 | 'ordericon' : _get_toggle_order_icon( request, "size" ), | ||
731 | 'orderkey' : 'size', | ||
732 | 'clclass' : 'size', | ||
733 | 'dclass' : 'span2', | ||
734 | } | ||
735 | if ( variant == 'target' ): | ||
736 | tc_size[ "hidden" ] = 0 | ||
737 | else: | ||
738 | tc_size[ "hidden" ] = 1 | ||
739 | tc_sizePercentage = { | ||
740 | 'name' : 'Size over total (%)', | ||
741 | 'qhelp' : 'Proportion of the overall size represented by this package', | ||
742 | 'clclass' : 'size_over_total', | ||
743 | 'hidden' : 1, | ||
744 | } | ||
745 | tc_license = { | ||
746 | 'name' : 'License', | ||
747 | 'qhelp' : 'The license under which the package is distributed. Separate license names u\ | ||
748 | sing | (pipe) means there is a choice between licenses. Separate license names using & (ampersand) m\ | ||
749 | eans multiple licenses exist that cover different parts of the source', | ||
750 | 'orderfield' : _get_toggle_order( request, "license" ), | ||
751 | 'ordericon' : _get_toggle_order_icon( request, "license" ), | ||
752 | 'orderkey' : 'license', | ||
753 | 'clclass' : 'license', | ||
754 | } | ||
755 | if ( variant == 'target' ): | ||
756 | tc_license[ "hidden" ] = 1 | ||
757 | else: | ||
758 | tc_license[ "hidden" ] = 0 | ||
759 | tc_dependencies = { | ||
760 | 'name' : 'Dependencies', | ||
761 | 'qhelp' : "Package runtime dependencies (other packages)", | ||
762 | 'clclass' : 'depends', | ||
763 | } | ||
764 | if ( variant == 'target' ): | ||
765 | tc_dependencies[ "hidden" ] = 0 | ||
766 | else: | ||
767 | tc_dependencies[ "hidden" ] = 1 | ||
768 | tc_rdependencies = { | ||
769 | 'name' : 'Reverse dependencies', | ||
770 | 'qhelp' : 'Package run-time reverse dependencies (i.e. which other packages depend on this package', | ||
771 | 'clclass' : 'brought_in_by', | ||
772 | } | ||
773 | if ( variant == 'target' ): | ||
774 | tc_rdependencies[ "hidden" ] = 0 | ||
775 | else: | ||
776 | tc_rdependencies[ "hidden" ] = 1 | ||
777 | tc_recipe = { | ||
778 | 'name' : 'Recipe', | ||
779 | 'qhelp' : 'The name of the recipe building the package', | ||
780 | 'orderfield' : _get_toggle_order( request, "recipe__name" ), | ||
781 | 'ordericon' : _get_toggle_order_icon( request, "recipe__name" ), | ||
782 | 'orderkey' : "recipe__name", | ||
783 | 'clclass' : 'recipe_name', | ||
784 | 'hidden' : 0, | ||
785 | } | ||
786 | tc_recipeVersion = { | ||
787 | 'name' : 'Recipe version', | ||
788 | 'qhelp' : 'Version and revision of the recipe building the package', | ||
789 | 'clclass' : 'recipe_version', | ||
790 | 'hidden' : 1, | ||
791 | } | ||
792 | tc_layer = { | ||
793 | 'name' : 'Layer', | ||
794 | 'qhelp' : 'The name of the layer providing the recipe that builds the package', | ||
795 | 'orderfield' : _get_toggle_order( request, "recipe__layer_version__layer__name" ), | ||
796 | 'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__layer__name" ), | ||
797 | 'orderkey' : "recipe__layer_version__layer__name", | ||
798 | 'clclass' : 'layer_name', | ||
799 | 'hidden' : 1, | ||
800 | } | ||
801 | tc_layerBranch = { | ||
802 | 'name' : 'Layer branch', | ||
803 | 'qhelp' : 'The Git branch of the layer providing the recipe that builds the package', | ||
804 | 'orderfield' : _get_toggle_order( request, "recipe__layer_version__branch" ), | ||
805 | 'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__branch" ), | ||
806 | 'orderkey' : "recipe__layer_version__branch", | ||
807 | 'clclass' : 'layer_branch', | ||
808 | 'hidden' : 1, | ||
809 | } | ||
810 | tc_layerCommit = { | ||
811 | 'name' : 'Layer commit', | ||
812 | 'qhelp' : 'The Git commit of the layer providing the recipe that builds the package', | ||
813 | 'clclass' : 'layer_commit', | ||
814 | 'hidden' : 1, | ||
815 | } | ||
816 | |||
817 | context = { | ||
818 | 'objectname': variant, | ||
819 | 'build' : build, | ||
820 | 'project' : build.project, | ||
821 | 'target' : Target.objects.filter( pk = target_id )[ 0 ], | ||
822 | 'objects' : packages, | ||
823 | 'packages_sum' : packages_sum[ 'installed_size__sum' ], | ||
824 | 'object_search_display': "packages included", | ||
825 | 'default_orderby' : default_orderby, | ||
826 | 'tablecols' : [ | ||
827 | tc_package, | ||
828 | tc_packageVersion, | ||
829 | tc_license, | ||
830 | tc_size, | ||
831 | tc_sizePercentage, | ||
832 | tc_dependencies, | ||
833 | tc_rdependencies, | ||
834 | tc_recipe, | ||
835 | tc_recipeVersion, | ||
836 | tc_layer, | ||
837 | tc_layerBranch, | ||
838 | tc_layerCommit, | ||
839 | ] | ||
840 | } | ||
841 | |||
842 | |||
843 | response = render(request, template, context) | ||
844 | _set_parameters_values(pagesize, orderby, request) | ||
845 | return response | ||
846 | |||
847 | def target( request, build_id, target_id ): | ||
848 | return( target_common( request, build_id, target_id, "target" )) | ||
849 | |||
850 | def targetpkg( request, build_id, target_id ): | ||
851 | return( target_common( request, build_id, target_id, "targetpkg" )) | ||
852 | |||
853 | from django.core.serializers.json import DjangoJSONEncoder | 684 | from django.core.serializers.json import DjangoJSONEncoder |
854 | from django.http import HttpResponse | 685 | from django.http import HttpResponse |
855 | def xhr_dirinfo(request, build_id, target_id): | 686 | def xhr_dirinfo(request, build_id, target_id): |