summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui/views.py')
-rw-r--r--bitbake/lib/toaster/toastergui/views.py196
1 files changed, 187 insertions, 9 deletions
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index 7b84df3340..37e2af2574 100644
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -378,15 +378,6 @@ def recipe(request, build_id, recipe_id):
378 } 378 }
379 return render(request, template, context) 379 return render(request, template, context)
380 380
381def package(request, build_id, package_id):
382 template = "singlepackage.html"
383 if Build.objects.filter(pk=build_id).count() == 0 :
384 return redirect(builds)
385 context = {
386 'build' : Build.objects.filter(pk=build_id)[0],
387 }
388 return render(request, template, context)
389
390def target(request, build_id, target_id): 381def target(request, build_id, target_id):
391 template = "target.html" 382 template = "target.html"
392 if Build.objects.filter(pk=build_id).count() == 0 : 383 if Build.objects.filter(pk=build_id).count() == 0 :
@@ -705,4 +696,191 @@ def layer_versions_recipes(request, layerversion_id):
705 696
706 return render(request, template, context) 697 return render(request, template, context)
707 698
699# A set of dependency types valid for both included and built package views
700OTHER_DEPENDS_BASE = [
701 Package_Dependency.TYPE_RSUGGESTS,
702 Package_Dependency.TYPE_RPROVIDES,
703 Package_Dependency.TYPE_RREPLACES,
704 Package_Dependency.TYPE_RCONFLICTS,
705 ]
706
707# value for invalid row id
708INVALID_KEY = -1
709
710"""
711Given a package id, target_id retrieves two sets of this image and package's
712dependencies. The return value is a dictionary consisting of two other
713lists: a list of 'runtime' dependencies, that is, having RDEPENDS
714values in source package's recipe, and a list of other dependencies, that is
715the list of possible recipe variables as found in OTHER_DEPENDS_BASE plus
716the RRECOMENDS or TRECOMENDS value.
717The lists are built in the sort order specified for the package runtime
718dependency views.
719"""
720def get_package_dependencies(package_id, target_id = INVALID_KEY):
721 runtime_deps = []
722 other_deps = []
723 other_depends_types = OTHER_DEPENDS_BASE
724
725 if target_id != INVALID_KEY :
726 rdepends_type = Package_Dependency.TYPE_TRDEPENDS
727 other_depends_types += [Package_Dependency.TYPE_TRECOMMENDS]
728 else :
729 rdepends_type = Package_Dependency.TYPE_RDEPENDS
730 other_depends_types += [Package_Dependency.TYPE_RRECOMMENDS]
731
732 package = Package.objects.get(pk=package_id)
733 if target_id != INVALID_KEY :
734 alldeps = package.package_dependencies_source.filter(target_id__exact = target_id)
735 else :
736 alldeps = package.package_dependencies_source.all()
737 for idep in alldeps:
738 dep_package = Package.objects.get(pk=idep.depends_on_id)
739 dep_entry = Package_Dependency.DEPENDS_DICT[idep.dep_type]
740 if dep_package.version == '' :
741 version = ''
742 else :
743 version = dep_package.version + "-" + dep_package.revision
744 installed = False
745 if target_id != INVALID_KEY :
746 if Target_Installed_Package.objects.filter(target_id__exact = target_id, package_id__exact = dep_package.id).count() > 0:
747 installed = True
748 dep = {
749 'name' : dep_package.name,
750 'version' : version,
751 'size' : dep_package.size,
752 'dep_type' : idep.dep_type,
753 'dep_type_display' : dep_entry[0].capitalize(),
754 'dep_type_help' : dep_entry[1] % (dep_package.name, package.name),
755 'depends_on_id' : dep_package.id,
756 'installed' : installed,
757 }
758 if idep.dep_type == rdepends_type :
759 runtime_deps.append(dep)
760 elif idep.dep_type in other_depends_types :
761 other_deps.append(dep)
762
763 rdep_sorted = sorted(runtime_deps, key=lambda k: k['name'])
764 odep_sorted = sorted(
765 sorted(other_deps, key=lambda k: k['name']),
766 key=lambda k: k['dep_type'])
767 retvalues = {'runtime_deps' : rdep_sorted, 'other_deps' : odep_sorted}
768 return retvalues
769
770# Return the count of packages dependent on package for this target_id image
771def get_package_reverse_dep_count(package, target_id):
772 return package.package_dependencies_target.filter(target_id__exact=target_id, dep_type__exact = Package_Dependency.TYPE_TRDEPENDS).count()
773
774# Return the count of the packages that this package_id is dependent on.
775# Use one of the two RDEPENDS types, either TRDEPENDS if the package was
776# installed, or else RDEPENDS if only built.
777def get_package_dependency_count(package, target_id, is_installed):
778 if is_installed :
779 return package.package_dependencies_source.filter(target_id__exact = target_id,
780 dep_type__exact = Package_Dependency.TYPE_TRDEPENDS).count()
781 else :
782 return package.package_dependencies_source.filter(dep_type__exact = Package_Dependency.TYPE_RDEPENDS).count()
783
784def package_built_detail(request, build_id, package_id):
785 template = "package_built_detail.html"
786 if Build.objects.filter(pk=build_id).count() == 0 :
787 return redirect(builds)
788 package = Package.objects.filter(pk=package_id)[0]
789 context = {
790 'build' : Build.objects.filter(pk=build_id)[0],
791 'package' : package,
792 'dependency_count' : get_package_dependency_count(package, -1, False),
793 }
794 return render(request, template, context)
795
796def package_built_dependencies(request, build_id, package_id):
797 template = "package_built_dependencies.html"
798 if Build.objects.filter(pk=build_id).count() == 0 :
799 return redirect(builds)
800
801 package = Package.objects.filter(pk=package_id)[0]
802 dependencies = get_package_dependencies(package_id)
803 context = {
804 'build' : Build.objects.filter(pk=build_id)[0],
805 'package' : package,
806 'runtime_deps' : dependencies['runtime_deps'],
807 'other_deps' : dependencies['other_deps'],
808 'dependency_count' : get_package_dependency_count(package, -1, False)
809 }
810 return render(request, template, context)
811
812
813def package_included_detail(request, build_id, target_id, package_id):
814 template = "package_included_detail.html"
815 if Build.objects.filter(pk=build_id).count() == 0 :
816 return redirect(builds)
817
818 package = Package.objects.filter(pk=package_id)[0]
819 target = Target.objects.filter(pk=target_id)[0]
820 context = {
821 'build' : Build.objects.filter(pk=build_id)[0],
822 'target' : target,
823 'package' : package,
824 'reverse_count' : get_package_reverse_dep_count(package, target_id),
825 'dependency_count' : get_package_dependency_count(package, target_id, True)
826 }
827 return render(request, template, context)
828
829def package_included_dependencies(request, build_id, target_id, package_id):
830 template = "package_included_dependencies.html"
831 if Build.objects.filter(pk=build_id).count() == 0 :
832 return redirect(builds)
833
834 package = Package.objects.filter(pk=package_id)[0]
835 target = Target.objects.filter(pk=target_id)[0]
836
837 dependencies = get_package_dependencies(package_id, target_id)
838 context = {
839 'build' : Build.objects.filter(pk=build_id)[0],
840 'package' : package,
841 'target' : target,
842 'runtime_deps' : dependencies['runtime_deps'],
843 'other_deps' : dependencies['other_deps'],
844 'reverse_count' : get_package_reverse_dep_count(package, target_id),
845 'dependency_count' : get_package_dependency_count(package, target_id, True)
846 }
847 return render(request, template, context)
848
849def package_included_reverse_dependencies(request, build_id, target_id, package_id):
850 template = "package_included_reverse_dependencies.html"
851 if Build.objects.filter(pk=build_id).count() == 0 :
852 return redirect(builds)
853
854 package = Package.objects.filter(pk=package_id)[0]
855 target = Target.objects.filter(pk=target_id)[0]
856
857 reverse_deps = []
858 alldeps = package.package_dependencies_target.filter(target_id__exact=target_id)
859 for idep in alldeps:
860 dep_package = Package.objects.get(pk=idep.package_id)
861 version = dep_package.version
862 if version != '' :
863 version += '-' + dep_package.revision
864 dep = {
865 'name' : dep_package.name,
866 'dependent_id' : dep_package.id,
867 'version' : version,
868 'size' : dep_package.size
869 }
870 if idep.dep_type == Package_Dependency.TYPE_TRDEPENDS :
871 reverse_deps.append(dep)
872
873 context = {
874 'build' : Build.objects.filter(pk=build_id)[0],
875 'package' : package,
876 'target' : target,
877 'reverse_deps' : reverse_deps,
878 'reverse_count' : get_package_reverse_dep_count(package, target_id),
879 'dependency_count' : get_package_dependency_count(package, target_id, True)
880 }
881 return render(request, template, context)
882
883def image_information_dir(request, build_id, target_id, packagefile_id):
884 # stubbed for now
885 return redirect(builds)
708 886