diff options
Diffstat (limited to 'bitbake/lib/toaster')
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/builddashboard.html | 2 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/urls.py | 1 | ||||
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 270 |
3 files changed, 158 insertions, 115 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/builddashboard.html b/bitbake/lib/toaster/toastergui/templates/builddashboard.html index a01ef3d93b..9bd094ecc4 100644 --- a/bitbake/lib/toaster/toastergui/templates/builddashboard.html +++ b/bitbake/lib/toaster/toastergui/templates/builddashboard.html @@ -85,7 +85,7 @@ <dd>{{target.pkgsz|filtered_filesizeformat}}</dd> <dt> <i class="icon-question-sign get-help" title="The location in disk of the license manifest, a document listing all packages installed in your image and their licenses"></i> - <a href="{% url 'target' build.pk target.target.pk %}">License manifest</a> + <a href="{% url 'targetpkg' build.pk target.target.pk %}">License manifest</a> </dt> <dd><code>{{target.target.license_manifest_path}}</code></dd> <dt> diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py index d7e9457c66..9b583f217b 100644 --- a/bitbake/lib/toaster/toastergui/urls.py +++ b/bitbake/lib/toaster/toastergui/urls.py @@ -46,6 +46,7 @@ urlpatterns = patterns('toastergui.views', # images are known as targets in the internal model url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'target', name='target'), + url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/targetpkg$', 'targetpkg', name='targetpkg'), url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'dirinfo_ajax', name='dirinfo_ajax'), url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'), 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 b38d260d6f..6de448596a 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py @@ -540,132 +540,174 @@ def recipe(request, build_id, recipe_id): } return render(request, template, context) -def target(request, build_id, target_id): +def target_common( request, build_id, target_id, variant ): template = "target.html" + default_orderby = 'name:+'; mandatory_parameters = { 'count': 25, 'page' : 1, 'orderby':'name:+'}; retval = _verify_parameters( request.GET, mandatory_parameters ) if retval: - return _redirect_parameters( 'target', request.GET, mandatory_parameters, build_id = build_id, target_id = target_id) - (filter_string, search_term, ordering_string) = _search_tuple(request, Package) + return _redirect_parameters( + variant, request.GET, mandatory_parameters, + build_id = build_id, target_id = target_id ) + ( filter_string, search_term, ordering_string ) = _search_tuple( request, Package ) # FUTURE: get rid of nested sub-queries replacing with ManyToMany field - queryset = Package.objects.filter(size__gte=0, id__in=Target_Installed_Package.objects.filter(target_id=target_id).values('package_id')) - packages_sum = queryset.aggregate(Sum('installed_size')) - queryset = _get_queryset(Package, queryset, filter_string, search_term, ordering_string, 'name') - packages = _build_page_range(Paginator(queryset, request.GET.get('count', 25)),request.GET.get('page', 1)) + queryset = Package.objects.filter( + size__gte = 0, + id__in = Target_Installed_Package.objects.filter( + target_id=target_id ).values( 'package_id' )) + packages_sum = queryset.aggregate( Sum( 'installed_size' )) + queryset = _get_queryset( + Package, queryset, filter_string, search_term, ordering_string, 'name' ) + packages = _build_page_range( Paginator( + queryset, request.GET.get( 'count', 25 )),request.GET.get( 'page', 1 )) # bring in package dependencies for p in packages.object_list: - p.runtime_dependencies = p.package_dependencies_source.filter(target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS) - p.reverse_runtime_dependencies = p.package_dependencies_target.filter(target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS) - - context = { 'build': Build.objects.filter(pk=build_id)[0], - 'target': Target.objects.filter(pk=target_id)[0], - 'objects': packages, - 'packages_sum' : packages_sum['installed_size__sum'], - 'object_search_display': "packages included", - 'default_orderby' : 'name:+', - 'tablecols':[ - { - 'name':'Package', - 'qhelp':'Packaged output resulting from building a recipe and included in this image', - 'orderfield': _get_toggle_order(request, "name"), - 'ordericon':_get_toggle_order_icon(request, "name"), - }, - { - 'name':'Package version', - 'qhelp':'The package version and revision', - }, - { - 'name':'Size', - 'qhelp':'The size of the package', - 'orderfield': _get_toggle_order(request, "size", True), - 'ordericon':_get_toggle_order_icon(request, "size"), - 'orderkey' : 'size', - 'clclass': 'size', - 'dclass' : 'span2', - 'hidden' : 0, - }, - { - 'name':'Size over total (%)', - 'qhelp':'Proportion of the overall included package size represented by this package', - 'orderkey' : 'size', - 'clclass': 'size_over_total', - 'dclass' : 'span2', - 'hidden' : 1, - }, - { - 'name':'License', - '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', - 'orderfield': _get_toggle_order(request, "license"), - 'ordericon':_get_toggle_order_icon(request, "license"), - 'orderkey' : 'license', - 'clclass': 'license', - 'hidden' : 1, - }, - { - 'name':'Dependencies', - 'qhelp':"Package runtime dependencies (i.e. other packages)", - 'clclass': 'depends', - 'hidden' : 0, - }, - { - 'name':'Reverse dependencies', - 'qhelp':'Package run-time reverse dependencies (i.e. other packages that depend on this package)', - 'clclass': 'brought_in_by', - 'hidden' : 0, - }, - { - 'name':'Recipe', - 'qhelp':'The name of the recipe building the package', - 'orderfield': _get_toggle_order(request, "recipe__name"), - 'ordericon':_get_toggle_order_icon(request, "recipe__name"), - 'orderkey' : 'recipe__name', - 'clclass': 'recipe_name', - 'hidden' : 0, - }, - { - 'name':'Recipe version', - 'qhelp':'Version and revision of the recipe building the package', - 'clclass': 'recipe_version', - 'hidden' : 1, - }, - { - 'name':'Layer', - 'qhelp':'The name of the layer providing the recipe that builds the package', - 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__name"), - 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__name"), - 'orderkey' : 'recipe__layer_version__layer__name', - 'clclass': 'layer_name', - 'hidden' : 1, - }, - { - 'name':'Layer branch', - 'qhelp':'The Git branch of the layer providing the recipe that builds the package', - 'orderfield': _get_toggle_order(request, "recipe__layer_version__branch"), - 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__branch"), - 'orderkey' : 'recipe__layer_version__branch', - 'clclass': 'layer_branch', - 'hidden' : 1, - }, - { - 'name':'Layer commit', - 'qhelp':'The Git commit of the layer providing the recipe that builds the package', - 'clclass': 'layer_commit', - 'hidden' : 1, - }, - { - 'name':'Layer directory', - 'qhelp':'Path to the layer providing the recipe that builds the package', - 'orderfield': _get_toggle_order(request, "recipe__layer_version__layer__local_path"), - 'ordericon':_get_toggle_order_icon(request, "recipe__layer_version__layer__local_path"), - 'clclass': 'layer_directory', - 'hidden' : 1, - }, + p.runtime_dependencies = p.package_dependencies_source.filter( + target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS ) + p.reverse_runtime_dependencies = p.package_dependencies_target.filter( + target_id = target_id, dep_type=Package_Dependency.TYPE_TRDEPENDS ) + tc_package = { + 'name' : 'Package', + 'qhelp' : 'Packaged output resulting from building a recipe included in this image', + 'orderfield' : _get_toggle_order( request, "name" ), + 'ordericon' : _get_toggle_order_icon( request, "name" ), + } + tc_packageVersion = { + 'name' : 'Package version', + 'qhelp' : 'The package version and revision', + } + tc_size = { + 'name' : 'Size', + 'qhelp' : 'The size of the package', + 'orderfield' : _get_toggle_order( request, "size", True ), + 'ordericon' : _get_toggle_order_icon( request, "size" ), + 'orderkey' : 'size', + 'clclass' : 'size', + 'dclass' : 'span2', + } + if ( variant == 'target' ): + tc_size[ "hidden" ] = 0 + else: + tc_size[ "hidden" ] = 1 + tc_sizePercentage = { + 'name' : 'Size over total (%)', + 'qhelp' : 'Proportion of the overall size represented by this package', + 'orderfield' : _get_toggle_order( request, "size" ), + 'ordericon' : _get_toggle_order_icon( request, "size" ), + 'clclass' : 'size_over_total', + 'hidden' : 1, + } + tc_license = { + 'name' : 'License', + 'qhelp' : 'The license under which the package is distributed. Separate license names u\ +sing | (pipe) means there is a choice between licenses. Separate license names using & (ampersand) m\ +eans multiple licenses exist that cover different parts of the source', + 'orderfield' : _get_toggle_order( request, "license" ), + 'ordericon' : _get_toggle_order_icon( request, "license" ), + 'orderkey' : 'license', + 'clclass' : 'license', + } + if ( variant == 'target' ): + tc_license[ "hidden" ] = 1 + else: + tc_license[ "hidden" ] = 0 + tc_dependencies = { + 'name' : 'Dependencies', + 'qhelp' : "Package runtime dependencies (other packages)", + 'clclass' : 'depends', + } + if ( variant == 'target' ): + tc_dependencies[ "hidden" ] = 0 + else: + tc_dependencies[ "hidden" ] = 1 + tc_rdependencies = { + 'name' : 'Reverse dependencies', + 'qhelp' : 'Package run-time reverse dependencies (i.e. which other packages depend on t\ +his package', + 'clclass' : 'brought_in_by', + } + if ( variant == 'target' ): + tc_rdependencies[ "hidden" ] = 0 + else: + tc_rdependencies[ "hidden" ] = 1 + tc_recipe = { + 'name' : 'Recipe', + 'qhelp' : 'The name of the recipe building the package', + 'orderfield' : _get_toggle_order( request, "recipe__name" ), + 'ordericon' : _get_toggle_order_icon( request, "recipe__name" ), + 'clclass' : 'recipe_name', + 'hidden' : 0, + } + tc_recipeVersion = { + 'name' : 'Recipe version', + 'qhelp' : 'Version and revision of the recipe building the package', + 'clclass' : 'recipe_version', + 'hidden' : 1, + } + tc_layer = { + 'name' : 'Layer', + 'qhelp' : 'The name of the layer providing the recipe that builds the package', + 'orderfield' : _get_toggle_order( request, "recipe__layer_version__layer__name" ), + 'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__layer__name" ), + 'clclass' : 'layer_name', + 'hidden' : 1, + } + tc_layerBranch = { + 'name' : 'Layer branch', + 'qhelp' : 'The Git branch of the layer providing the recipe that builds the package', + 'orderfield' : _get_toggle_order( request, "recipe__layer_version__branch" ), + 'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__branch" ), + 'clclass' : 'layer_branch', + 'hidden' : 1, + } + tc_layerCommit = { + 'name' : 'Layer commit', + 'qhelp' : 'The Git commit of the layer providing the recipe that builds the package', + 'clclass' : 'layer_commit', + 'hidden' : 1, + } + tc_layerDir = { + 'name':'Layer directory', + 'qhelp':'Location in disk of the layer providing the recipe that builds the package', + 'orderfield' : _get_toggle_order( request, "recipe__layer_version__layer__local_path" ), + 'ordericon' : _get_toggle_order_icon( request, "recipe__layer_version__layer__local_path" )\ +, + 'clclass' : 'layer_directory', + 'hidden' : 1, + } + context = { + 'objectname': variant, + 'build' : Build.objects.filter( pk = build_id )[ 0 ], + 'target' : Target.objects.filter( pk = target_id )[ 0 ], + 'objects' : packages, + 'packages_sum' : packages_sum[ 'installed_size__sum' ], + 'object_search_display': "packages included", + 'default_orderby' : default_orderby, + 'tablecols' : [ + tc_package, + tc_packageVersion, + tc_license, + tc_size, + tc_sizePercentage, + tc_dependencies, + tc_rdependencies, + tc_recipe, + tc_recipeVersion, + tc_layer, + tc_layerBranch, + tc_layerCommit, + tc_layerDir, ] } + return( render( request, template, context )) - return render(request, template, context) +def target( request, build_id, target_id ): + return( target_common( request, build_id, target_id, "target" )) + +def targetpkg( request, build_id, target_id ): + return( target_common( request, build_id, target_id, "targetpkg" )) from django.core.serializers.json import DjangoJSONEncoder from django.http import HttpResponse |