diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index e33f177e95..2c283feccf 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -62,6 +62,9 @@ td a:hover { color: #000000; text-decoration: underline; }
.table tbody tr.error > td { background-color: #FFFFFF; } /* override default Bootstrap behaviour */
.table-hover tbody tr.error:hover > td { background-color: #F5F5F5;} /* override default Bootstrap behaviour */
+/* Right justify Bootstrap table columns for size fields */
+.table .sizecol { text-align: right; }
+
/* Set error, warning, success and muted styles */
.error, .red, td.error a, tr.error a { color: #b94a48; }
a.error:hover, a.error:focus, tr.error a:hover { color: #943A38; text-decoration: underline; }
@@ -127,4 +130,3 @@ select { width: auto; }
-
diff --git a/bitbake/lib/toaster/toastergui/templates/bpackage.html b/bitbake/lib/toaster/toastergui/templates/bpackage.html
index c6ec634f83..2d4948be4b 100644
--- a/bitbake/lib/toaster/toastergui/templates/bpackage.html
+++ b/bitbake/lib/toaster/toastergui/templates/bpackage.html
@@ -64,7 +64,7 @@
| Package |
Version |
- Size |
+ Size |
Relationship type
@@ -84,7 +84,7 @@
{% endif %}
| {{other_dep.version}} |
- {{other_dep.size|filtered_filesizeformat}} |
+ {{other_dep.size|filtered_filesizeformat}} |
{{other_dep.dep_type_display}}
diff --git a/bitbake/lib/toaster/toastergui/templates/package_built_detail.html b/bitbake/lib/toaster/toastergui/templates/package_built_detail.html
index 3aa1b2a8a7..0fe01165da 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_built_detail.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_built_detail.html
@@ -23,18 +23,12 @@
{{package.fullpackagespec}} is not included in any image. This page shows you the files added to an image root file system if you include {{package.fullpackagespec}} in future builds.
-
-
-
- | File |
- Size |
-
-
+ {% include "tablesort.html" %}
- {% for file in package.buildfilelist_package.all|dictsort:"path" %}
+ {% for file in objects %}
- | {{file.path}} |
- {{file.size|filtered_filesizeformat}} |
+ {{file.path}} |
+ {{file.size|filtered_filesizeformat}} |
{% endfor %}
diff --git a/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html b/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
index 9169ee95d4..642ca69568 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
@@ -20,7 +20,7 @@
| Package |
Version |
- Size |
+ Size |
@@ -39,7 +39,7 @@
{% endif %}
{{runtime_dep.version}} |
- {{runtime_dep.size|filtered_filesizeformat}} |
+ {{runtime_dep.size|filtered_filesizeformat}} |
{% endfor %}
@@ -57,7 +57,7 @@
| Package |
Version |
- Size |
+ Size |
Relationship type
@@ -83,7 +83,7 @@
{% endif %}
| {{other_dep.version}} |
- {{other_dep.size|filtered_filesizeformat}} |
+ {{other_dep.size|filtered_filesizeformat}} |
{{other_dep.dep_type_display}}
diff --git a/bitbake/lib/toaster/toastergui/templates/package_included_detail.html b/bitbake/lib/toaster/toastergui/templates/package_included_detail.html
index e89ebdf58c..d2aa26eefa 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_included_detail.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_included_detail.html
@@ -17,22 +17,16 @@
{% if packageFileCount > 0 %}
-
-
-
- | File |
- Size |
-
-
+ {% include "tablesort.html" %}
- {% for file in package.buildfilelist_package.all|dictsort:"path" %}
+ {% for file in objects %}
- |
+ |
{{file.path}}
|
- {{file.size|filtered_filesizeformat}} |
+ {{file.size|filtered_filesizeformat}} |
{% endfor %}
diff --git a/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html b/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
index 1efcb1a610..a36464cad5 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
@@ -20,21 +20,14 @@
{{package.fullpackagespec}} has no reverse runtime dependencies.
{% else %}
-
-
-
- | Package |
- Version |
- Size |
-
-
+ {% include "tablesort.html" %}
- {% for reverse_dep in reverse_deps|dictsort:"name" %}
+ {% for reverse_dep in objects %}
{% if reverse_dep.size != -1 %}
|
-
- {{reverse_dep.name}}
+
+ {{reverse_dep.package.name}}
|
@@ -44,8 +37,8 @@
{% endif %}
- {{reverse_dep.version}} |
- {{reverse_dep.size|filtered_filesizeformat}} |
+ {{reverse_dep.package.version}} |
+ {{reverse_dep.package.size|filtered_filesizeformat}} |
{% endfor %}
diff --git a/bitbake/lib/toaster/toastergui/templates/recipe.html b/bitbake/lib/toaster/toastergui/templates/recipe.html
index c846aa9340..6e9cd23424 100644
--- a/bitbake/lib/toaster/toastergui/templates/recipe.html
+++ b/bitbake/lib/toaster/toastergui/templates/recipe.html
@@ -149,7 +149,7 @@
Version
|
-
+ |
Size
|
@@ -161,7 +161,7 @@
| {{package.name}} |
{{package.version}}_{{package.revision}} |
- {{package.size|filtered_filesizeformat}} |
+ {{package.size|filtered_filesizeformat}} |
{% endfor %}
diff --git a/bitbake/lib/toaster/toastergui/templates/tablesort.html b/bitbake/lib/toaster/toastergui/templates/tablesort.html
new file mode 100644
index 0000000000..bf311b6edd
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/tablesort.html
@@ -0,0 +1,38 @@
+{% load projecttags %}
+
+ {% if disable_sort %}
+
+
+
+ {% for tc in tablecols %}
+ |
+ {%if tc.qhelp%}{%endif%}
+ {{tc.name}}
+ |
+ {% endfor %}
+
+
+ {% else %}
+
+
+
+
+ {% for tc in tablecols %}
+ |
+ {%if tc.qhelp%}{%endif%}
+ {%if tc.orderfield%}
+
+ {{tc.name}}
+
+ {%else%}
+
+ {{tc.name}}
+
+ {%endif%}
+ {%if tc.ordericon%} {%endif%}
+ |
+ {% endfor %}
+
+
+ {% endif %}
diff --git a/bitbake/lib/toaster/toastergui/templates/target.html b/bitbake/lib/toaster/toastergui/templates/target.html
index 5db0c0ccb5..3a0c4d7998 100644
--- a/bitbake/lib/toaster/toastergui/templates/target.html
+++ b/bitbake/lib/toaster/toastergui/templates/target.html
@@ -79,10 +79,10 @@
{{package.version|filtered_packageversion:package.revision}}
-
+ |
{{package.size|filtered_installedsize:package.installed_size|filtered_filesizeformat}}
|
-
+ |
{{package|filter_sizeovertotal:packages_sum}}
|
diff --git a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
index e8634574c0..be75b214ac 100644
--- a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
+++ b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
@@ -118,7 +118,7 @@ def filtered_filesizeformat(value):
if value == -1:
return ''
- return filesizeformat(value).replace("bytes", "B").replace(".0", "")
+ return filesizeformat(value).replace("bytes", "B")
@register.filter
def filtered_packagespec(value):
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index f5fa72e610..36eb0bf97e 100644
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -563,13 +563,13 @@ def target(request, build_id, target_id):
'qhelp':'The size of the package',
'orderfield': _get_toggle_order(request, "size", True),
'ordericon':_get_toggle_order_icon(request, "size"),
- 'clclass': 'package_size',
+ 'clclass': 'package_size span2',
'hidden' : 0,
},
{
'name':'Size over total (%)',
'qhelp':'Proportion of the overall included package size represented by this package',
- 'clclass': 'size_over_total',
+ 'clclass': 'size_over_total span2',
'hidden' : 1,
},
{
@@ -1254,7 +1254,7 @@ def bpackage(request, build_id):
'qhelp':'The size of the package',
'orderfield': _get_toggle_order(request, "size", True),
'ordericon':_get_toggle_order_icon(request, "size"),
- 'clclass': 'size', 'hidden': 0,
+ 'clclass': 'size span2', 'hidden': 0,
},
{
'name':'License',
@@ -1456,13 +1456,40 @@ def package_built_detail(request, build_id, package_id):
template = "package_built_detail.html"
if Build.objects.filter(pk=build_id).count() == 0 :
return redirect(builds)
+
+ # follow convention for pagination w/ search although not used for this view
+ queryset = Package_File.objects.filter(package_id__exact=package_id)
+ mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'path:+'};
+ retval = _verify_parameters( request.GET, mandatory_parameters )
+ if retval:
+ return _redirect_parameters( 'package_built_detail', request.GET, mandatory_parameters, build_id = build_id, package_id = package_id)
+
+ (filter_string, search_term, ordering_string) = _search_tuple(request, Package_File)
+ paths = _get_queryset(Package_File, queryset, filter_string, search_term, ordering_string, 'path')
+
package = Package.objects.filter(pk=package_id)[0]
package.fullpackagespec = _get_fullpackagespec(package)
context = {
'build' : Build.objects.filter(pk=build_id)[0],
'package' : package,
'dependency_count' : _get_package_dependency_count(package, -1, False),
+ 'objects' : paths,
+ 'tablecols':[
+ {
+ 'name':'File',
+ 'orderfield': _get_toggle_order(request, "path"),
+ 'ordericon':_get_toggle_order_icon(request, "path"),
+ },
+ {
+ 'name':'Size',
+ 'orderfield': _get_toggle_order(request, "size", True),
+ 'ordericon':_get_toggle_order_icon(request, "size"),
+ 'dclass': 'sizecol span2',
+ },
+ ]
}
+ if paths.all().count() < 2:
+ context['disable_sort'] = True;
return render(request, template, context)
def package_built_dependencies(request, build_id, package_id):
@@ -1488,6 +1515,17 @@ def package_included_detail(request, build_id, target_id, package_id):
if Build.objects.filter(pk=build_id).count() == 0 :
return redirect(builds)
+
+ # follow convention for pagination w/ search although not used for this view
+ mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'path:+'};
+ retval = _verify_parameters( request.GET, mandatory_parameters )
+ if retval:
+ return _redirect_parameters( 'package_included_detail', request.GET, mandatory_parameters, build_id = build_id, target_id = target_id, package_id = package_id)
+ (filter_string, search_term, ordering_string) = _search_tuple(request, Package_File)
+
+ queryset = Package_File.objects.filter(package_id__exact=package_id)
+ paths = _get_queryset(Package_File, queryset, filter_string, search_term, ordering_string, 'path')
+
package = Package.objects.filter(pk=package_id)[0]
package.fullpackagespec = _get_fullpackagespec(package)
package.alias = _get_package_alias(package)
@@ -1497,8 +1535,24 @@ def package_included_detail(request, build_id, target_id, package_id):
'target' : target,
'package' : package,
'reverse_count' : _get_package_reverse_dep_count(package, target_id),
- 'dependency_count' : _get_package_dependency_count(package, target_id, True)
+ 'dependency_count' : _get_package_dependency_count(package, target_id, True),
+ 'objects': paths,
+ 'tablecols':[
+ {
+ 'name':'File',
+ 'orderfield': _get_toggle_order(request, "path"),
+ 'ordericon':_get_toggle_order_icon(request, "path"),
+ },
+ {
+ 'name':'Size',
+ 'orderfield': _get_toggle_order(request, "size", True),
+ 'ordericon':_get_toggle_order_icon(request, "size"),
+ 'dclass': 'sizecol span2',
+ },
+ ]
}
+ if paths.all().count() < 2:
+ context['disable_sort'] = True;
return render(request, template, context)
def package_included_dependencies(request, build_id, target_id, package_id):
@@ -1528,36 +1582,49 @@ def package_included_reverse_dependencies(request, build_id, target_id, package_
if Build.objects.filter(pk=build_id).count() == 0 :
return redirect(builds)
+ mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'package__name:+'};
+ retval = _verify_parameters( request.GET, mandatory_parameters )
+ if retval:
+ return _redirect_parameters( 'package_included_reverse_dependencies', request.GET, mandatory_parameters, build_id = build_id, target_id = target_id, package_id = package_id)
+ (filter_string, search_term, ordering_string) = _search_tuple(request, Package_File)
+
+ queryset = Package_Dependency.objects.select_related('depends_on__name', 'depends_on__size').filter(depends_on=package_id, target_id=target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS)
+ objects = _get_queryset(Package_Dependency, queryset, filter_string, search_term, ordering_string, 'package__name')
+
package = Package.objects.filter(pk=package_id)[0]
package.fullpackagespec = _get_fullpackagespec(package)
package.alias = _get_package_alias(package)
target = Target.objects.filter(pk=target_id)[0]
-
- reverse_deps = []
- alldeps = package.package_dependencies_target.filter(target_id__exact=target_id)
- for idep in alldeps:
- dep_package = Package.objects.get(pk=idep.package_id)
- version = dep_package.version
- if version != '' :
- version += '-' + dep_package.revision
- dep = {
- 'name' : dep_package.name,
- 'alias' : _get_package_alias(dep_package),
- 'dependent_id' : dep_package.id,
- 'version' : version,
- 'size' : dep_package.size
- }
- if idep.dep_type == Package_Dependency.TYPE_TRDEPENDS :
- reverse_deps.append(dep)
-
+ for o in objects:
+ if o.package.version != '':
+ o.package.version += '-' + o.package.revision
+ o.alias = _get_package_alias(o.package)
context = {
'build' : Build.objects.filter(pk=build_id)[0],
'package' : package,
'target' : target,
- 'reverse_deps' : reverse_deps,
+ 'objects' : objects,
'reverse_count' : _get_package_reverse_dep_count(package, target_id),
- 'dependency_count' : _get_package_dependency_count(package, target_id, True)
+ 'dependency_count' : _get_package_dependency_count(package, target_id, True),
+ 'tablecols':[
+ {
+ 'name':'Package',
+ 'orderfield': _get_toggle_order(request, "package__name"),
+ 'ordericon': _get_toggle_order_icon(request, "package__name"),
+ },
+ {
+ 'name':'Version',
+ },
+ {
+ 'name':'Size',
+ 'orderfield': _get_toggle_order(request, "package__size", True),
+ 'ordericon': _get_toggle_order_icon(request, "package__size"),
+ 'dclass': 'sizecol span2',
+ },
+ ]
}
+ if objects.all().count() < 2:
+ context['disable_sort'] = True;
return render(request, template, context)
def image_information_dir(request, build_id, target_id, packagefile_id):
| | |