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 @@ {%if package.version%}{{package.version}}-{{package.revision}}{%endif%} - {{package.size|filtered_filesizeformat}} + {{package.size|filtered_filesizeformat}} {{package.license}} diff --git a/bitbake/lib/toaster/toastergui/templates/dirinfo.html b/bitbake/lib/toaster/toastergui/templates/dirinfo.html index 9b76a1cb8c..749ae242ea 100644 --- a/bitbake/lib/toaster/toastergui/templates/dirinfo.html +++ b/bitbake/lib/toaster/toastergui/templates/dirinfo.html @@ -76,7 +76,7 @@ /* setup td specific formatting */ var link_to = td(o.link_to); - var size = td(o.size); + var size = '' + o.size + '' var permission = td(o.permission); var owner = td(o.owner); var group = td(o.group); diff --git a/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html b/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html index 4e86da519d..a0c5a1e4f0 100644 --- a/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html +++ b/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html @@ -31,7 +31,7 @@ Package Version - Size + Size @@ -49,7 +49,7 @@ {% endif %} {{runtime_dep.version}} - {{runtime_dep.size|filtered_filesizeformat}} + {{runtime_dep.size|filtered_filesizeformat}} {% endfor %} @@ -62,7 +62,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.
- - - - - - - + {% include "tablesort.html" %} - {% for file in package.buildfilelist_package.all|dictsort:"path" %} + {% for file in objects %} - - + + {% 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 @@ - + @@ -39,7 +39,7 @@ {% endif %} - + {% endfor %} @@ -57,7 +57,7 @@ - + - +
FileSize
{{file.path}}{{file.size|filtered_filesizeformat}}{{file.path}}{{file.size|filtered_filesizeformat}}
Package VersionSizeSize
{{runtime_dep.version}} {{runtime_dep.size|filtered_filesizeformat}} {{runtime_dep.size|filtered_filesizeformat}} 
Package VersionSizeSize 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 %} - - - - - - - + {% include "tablesort.html" %} - {% for file in package.buildfilelist_package.all|dictsort:"path" %} + {% for file in objects %} - - + {% 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 %} -
FileSize
+ {{file.path}} {{file.size|filtered_filesizeformat}}{{file.size|filtered_filesizeformat}}
- - - - - - - + {% include "tablesort.html" %} - {% for reverse_dep in reverse_deps|dictsort:"name" %} + {% for reverse_dep in objects %} {% if reverse_dep.size != -1 %} @@ -44,8 +37,8 @@ {% endif %} - - + + {% 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 @@ - @@ -161,7 +161,7 @@ - + {% 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 %} +
PackageVersionSize
- - {{reverse_dep.name}} + + {{reverse_dep.package.name}} {{reverse_dep.version}} {{reverse_dep.size|filtered_filesizeformat}} {{reverse_dep.package.version}} {{reverse_dep.package.size|filtered_filesizeformat}} 
Version + Size
{{package.name}} {{package.version}}_{{package.revision}}{{package.size|filtered_filesizeformat}}{{package.size|filtered_filesizeformat}}
+ + + {% for tc in tablecols %} + + {% endfor %} + + + {% else %} +
+ {%if tc.qhelp%}{%endif%} + {{tc.name}} +
+ + + + {% for tc in tablecols %} + + {% 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}} - -
+ {%if tc.qhelp%}{%endif%} + {%if tc.orderfield%} + + {{tc.name}} + + {%else%} + + {{tc.name}} + + {%endif%} + {%if tc.ordericon%} {%endif%} +
+ {{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):