summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui')
-rw-r--r--bitbake/lib/toaster/toastergui/buildtables.py15
-rw-r--r--bitbake/lib/toaster/toastergui/tables.py15
-rw-r--r--bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html44
-rw-r--r--bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html46
-rw-r--r--bitbake/lib/toaster/toastergui/templatetags/projecttags.py8
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py4
6 files changed, 107 insertions, 25 deletions
diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
index 17de369305..e237e4ecb6 100644
--- a/bitbake/lib/toaster/toastergui/buildtables.py
+++ b/bitbake/lib/toaster/toastergui/buildtables.py
@@ -47,6 +47,7 @@ class BuiltPackagesTableBase(tables.PackagesTable):
47 def setup_queryset(self, *args, **kwargs): 47 def setup_queryset(self, *args, **kwargs):
48 build = Build.objects.get(pk=kwargs['build_id']) 48 build = Build.objects.get(pk=kwargs['build_id'])
49 self.static_context_extra['build'] = build 49 self.static_context_extra['build'] = build
50 self.static_context_extra['target_name'] = None
50 self.queryset = build.package_set.all().exclude(recipe=None) 51 self.queryset = build.package_set.all().exclude(recipe=None)
51 self.queryset = self.queryset.order_by(self.default_orderby) 52 self.queryset = self.queryset.order_by(self.default_orderby)
52 53
@@ -187,7 +188,15 @@ class InstalledPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
187 self.static_context_extra['build'] = build 188 self.static_context_extra['build'] = build
188 189
189 target = Target.objects.get(pk=kwargs['target_id']) 190 target = Target.objects.get(pk=kwargs['target_id'])
191 # We send these separately because in the case of image details table
192 # we don't have a target just the recipe name as the target
193 self.static_context_extra['target_name'] = target.target
194 self.static_context_extra['target_id'] = target.pk
195
196 self.static_context_extra['add_links'] = True
197
190 self.queryset = self.make_package_list(target) 198 self.queryset = self.make_package_list(target)
199 self.queryset = self.queryset.order_by(self.default_orderby)
191 200
192 def setup_columns(self, *args, **kwargs): 201 def setup_columns(self, *args, **kwargs):
193 super(InstalledPackagesTable, self).setup_columns(**kwargs) 202 super(InstalledPackagesTable, self).setup_columns(**kwargs)
@@ -195,11 +204,13 @@ class InstalledPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
195 static_data_name="installed_size", 204 static_data_name="installed_size",
196 static_data_template="{% load projecttags %}" 205 static_data_template="{% load projecttags %}"
197 "{{data.size|filtered_filesizeformat}}", 206 "{{data.size|filtered_filesizeformat}}",
198 orderable=True) 207 orderable=True,
208 hidden=True)
199 209
200 # Add the template to show installed name for installed packages 210 # Add the template to show installed name for installed packages
201 install_name_tmpl =\ 211 install_name_tmpl =\
202 ('{{data.name}} ' 212 ('<a href="{% url "package_included_detail" extra.build.pk'
213 ' extra.target_id data.pk %}">{{data.name}}</a>'
203 '{% if data.installed_name and data.installed_name !=' 214 '{% if data.installed_name and data.installed_name !='
204 ' data.name %}' 215 ' data.name %}'
205 '<span class="muted"> as {{data.installed_name}}</span>' 216 '<span class="muted"> as {{data.installed_name}}</span>'
diff --git a/bitbake/lib/toaster/toastergui/tables.py b/bitbake/lib/toaster/toastergui/tables.py
index 902f62f708..79673f5dab 100644
--- a/bitbake/lib/toaster/toastergui/tables.py
+++ b/bitbake/lib/toaster/toastergui/tables.py
@@ -22,7 +22,7 @@
22from toastergui.widgets import ToasterTable 22from toastergui.widgets import ToasterTable
23from orm.models import Recipe, ProjectLayer, Layer_Version, Machine, Project 23from orm.models import Recipe, ProjectLayer, Layer_Version, Machine, Project
24from orm.models import CustomImageRecipe, Package, Target, Build, LogMessage, Task 24from orm.models import CustomImageRecipe, Package, Target, Build, LogMessage, Task
25from orm.models import CustomImagePackage 25from orm.models import CustomImagePackage, Package_DependencyManager
26from django.db.models import Q, Max, Sum, Count, When, Case, Value, IntegerField 26from django.db.models import Q, Max, Sum, Count, When, Case, Value, IntegerField
27from django.conf.urls import url 27from django.conf.urls import url
28from django.core.urlresolvers import reverse, resolve 28from django.core.urlresolvers import reverse, resolve
@@ -695,6 +695,7 @@ class PackagesTable(ToasterTable):
695 695
696 def setup_queryset(self, *args, **kwargs): 696 def setup_queryset(self, *args, **kwargs):
697 recipe = Recipe.objects.get(pk=kwargs['recipe_id']) 697 recipe = Recipe.objects.get(pk=kwargs['recipe_id'])
698 self.static_context_extra['target_name'] = recipe.name
698 699
699 self.queryset = self.create_package_list(recipe, kwargs['pid']) 700 self.queryset = self.create_package_list(recipe, kwargs['pid'])
700 self.queryset = self.queryset.order_by('name') 701 self.queryset = self.queryset.order_by('name')
@@ -766,7 +767,19 @@ class SelectPackagesTable(PackagesTable):
766 767
767 self.queryset = self.queryset.order_by('name') 768 self.queryset = self.queryset.order_by('name')
768 769
770 # This target is the target used to work out which group of dependences
771 # to display, if we've built the custom image we use it otherwise we
772 # can use the based recipe instead
773 if prj.build_set.filter(target__target=self.cust_recipe.name).count()\
774 > 0:
775 self.static_context_extra['target_name'] = self.cust_recipe.name
776 else:
777 self.static_context_extra['target_name'] =\
778 Package_DependencyManager.TARGET_LATEST
779
769 self.static_context_extra['recipe_id'] = kwargs['custrecipeid'] 780 self.static_context_extra['recipe_id'] = kwargs['custrecipeid']
781
782
770 self.static_context_extra['current_packages'] = \ 783 self.static_context_extra['current_packages'] = \
771 current_packages.values_list('pk', flat=True) 784 current_packages.values_list('pk', flat=True)
772 785
diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
index 0a24e9217e..5be409ca44 100644
--- a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
+++ b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
@@ -1,14 +1,38 @@
1{# Popover that displays the dependences and sizes of a package 'data' used in the Packages table #} 1{# Popover that displays the dependences and sizes of a package 'data' used in the Packages table #}
2{% with data.package_dependencies_source.all_depends.count as dep_count %}
3{% load projecttags %} 2{% load projecttags %}
4{% if dep_count %} 3
5 <a data-content="<ul class='list-unstyled'> 4{% with package_deps=data.package_dependencies_source|for_target:extra.target_name %}
6 {% for dep in data.package_dependencies_source.all_depends %} 5{% with count_package=package_deps.packages|length %}
7 <li>{{dep.depends_on.name}} {% if dep.depends_on.size > 0 %}({{dep.depends_on.size|filtered_filesizeformat}}){% endif %}</li> 6
8 {% endfor %} 7{% if count_package > 0 %}
9 </ul>" class="btn btn-default" title=" 8 <a data-content='<ul class="unstyled">
10 <strong>{{data.name}}</strong> dependencies - <strong>{{data.package_dependencies_source.get_total_source_deps_size.depends_on__size__sum|filtered_filesizeformat}}</strong>"> 9 {% for dep in package_deps.packages %}
11 {{dep_count}} 10 <li>
12</a> 11 {% if extra.add_links %}
12 <a href="{% url 'package_included_detail' extra.build.pk extra.target_id dep.depends_on.pk %}">
13 {{dep.depends_on.name}}</a>
14 {% else %}
15 {{dep.depends_on.name}}
16 {% endif %}
17 {% if dep.depends_on.size > 0 %}
18 ({{dep.depends_on.size|filtered_filesizeformat}})
19 {% endif %}
20 </li>
21 {% endfor %}
22 </ul>' class="btn btn-default" title='
23 <strong>
24 {% if extra.add_links %}
25 <a href="{% url 'package_included_dependencies' extra.build.pk extra.target_id data.pk %}">
26 {{data.name}}</a>
27 {% else %}
28 {{data.name}}
29 {% endif %}
30 </strong>
31 dependencies -
32 <strong>{{package_deps.size|filtered_filesizeformat}}</strong>'>
33 {{count_package}}
34 </a>
13{% endif %} 35{% endif %}
36
37{% endwith %}
14{% endwith %} 38{% endwith %}
diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
index d470712121..65c2b29d0b 100644
--- a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
+++ b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
@@ -1,14 +1,38 @@
1{# Popover that displays the reverse dependencies and sizes of a package 'data' used in the Packages table #} 1{# Popover that displays the reverse dependences and sizes of a package 'data' used in the Packages table #}
2{% with data.package_dependencies_target.all_depends.count as dep_count %}
3{% load projecttags %} 2{% load projecttags %}
4{% if dep_count %} 3
5 <a data-content="<ul class='list-unstyled'> 4{% with package_deps=data.package_dependencies_target|for_target:extra.target_name %}
6 {% for dep in data.package_dependencies_target.all_depends|dictsort:'package.name' %} 5{% with count_package=package_deps.packages|length %}
7 <li>{{dep.package.name}} {% if dep.package.size > 0 %}({{dep.package.size|filtered_filesizeformat}}){% endif %}</li> 6
8 {% endfor %} 7{% if count_package > 0 %}
9 </ul>" class="btn btn-default" title=" 8 <a data-content='<ul class="unstyled">
10 <strong>{{data.name}}</strong> reverse dependencies - <strong>{{data.package_dependencies_target.get_total_revdeps_size.package_id__size__sum|filtered_filesizeformat}}</strong>"> 9 {% for dep in package_deps.packages|dictsort:"package.name" %}
11 {{dep_count}} 10 <li>
12</a> 11 {% if extra.add_links %}
12 <a href="{% url 'package_included_detail' extra.build.pk extra.target_id dep.package.pk %}">
13 {{dep.package.name}}</a>
14 {% else %}
15 {{dep.package.name}}
16 {% endif %}
17 {% if dep.package.size > 0 %}
18 ({{dep.package.size|filtered_filesizeformat}})
19 {% endif %}
20 </li>
21 {% endfor %}
22 </ul>' class="btn btn-default" title='
23 <strong>
24 {% if extra.add_links %}
25 <a href="{% url 'package_included_reverse_dependencies' extra.build.pk extra.target_id data.pk %}">
26 {{data.name}}</a>
27 {% else %}
28 {{data.name}}
29 {% endif %}
30 </strong>
31 dependencies -
32 <strong>{{package_deps.size|filtered_filesizeformat}}</strong>'>
33 {{count_package}}
34 </a>
13{% endif %} 35{% endif %}
36
37{% endwith %}
14{% endwith %} 38{% endwith %}
diff --git a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
index 1d680365ad..119311db93 100644
--- a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
+++ b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
@@ -297,3 +297,11 @@ def cut_path_prefix(fullpath, prefixes):
297 if fullpath.startswith(prefix): 297 if fullpath.startswith(prefix):
298 return relpath(fullpath, prefix) 298 return relpath(fullpath, prefix)
299 return fullpath 299 return fullpath
300
301
302@register.filter
303def for_target(package_dependencies, target):
304 """ filter the dependencies to be displayed by the supplied target
305 if no dependences are found for the target then return the predicted
306 dependences"""
307 return package_dependencies.for_target_or_none(target)
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index 88bc39a166..1f908ea209 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -2060,7 +2060,9 @@ if True:
2060 2060
2061 # Dependencies for package which aren't satisfied by the 2061 # Dependencies for package which aren't satisfied by the
2062 # current packages in the custom image recipe 2062 # current packages in the custom image recipe
2063 deps = package.package_dependencies_source.annotate( 2063 deps =\
2064 package.package_dependencies_source.for_target_or_none(
2065 recipe.name)['packages'].annotate(
2064 name=F('depends_on__name'), 2066 name=F('depends_on__name'),
2065 pk=F('depends_on__pk'), 2067 pk=F('depends_on__pk'),
2066 size=F('depends_on__size'), 2068 size=F('depends_on__size'),