diff options
Diffstat (limited to 'bitbake/lib/toaster/orm')
| -rw-r--r-- | bitbake/lib/toaster/orm/models.py | 61 |
1 files changed, 50 insertions, 11 deletions
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 25bc1dbe15..caad2afe81 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
| @@ -862,31 +862,70 @@ class CustomImagePackage(Package): | |||
| 862 | related_name='appends_set') | 862 | related_name='appends_set') |
| 863 | 863 | ||
| 864 | 864 | ||
| 865 | |||
| 866 | class Package_DependencyManager(models.Manager): | 865 | class Package_DependencyManager(models.Manager): |
| 867 | use_for_related_fields = True | 866 | use_for_related_fields = True |
| 867 | TARGET_LATEST = "use-latest-target-for-target" | ||
| 868 | 868 | ||
| 869 | def get_queryset(self): | 869 | def get_queryset(self): |
| 870 | return super(Package_DependencyManager, self).get_queryset().exclude(package_id = F('depends_on__id')) | 870 | return super(Package_DependencyManager, self).get_queryset().exclude(package_id = F('depends_on__id')) |
| 871 | 871 | ||
| 872 | def get_total_source_deps_size(self): | 872 | def for_target_or_none(self, target): |
| 873 | """ Returns the total file size of all the packages that depend on | 873 | """ filter the dependencies to be displayed by the supplied target |
| 874 | thispackage. | 874 | if no dependences are found for the target then try None as the target |
| 875 | """ | 875 | which will return the dependences calculated without the context of a |
| 876 | return self.all().aggregate(Sum('depends_on__size')) | 876 | target e.g. non image recipes. |
| 877 | 877 | ||
| 878 | def get_total_revdeps_size(self): | 878 | returns: { size, packages } |
| 879 | """ Returns the total file size of all the packages that depend on | ||
| 880 | this package. | ||
| 881 | """ | 879 | """ |
| 882 | return self.all().aggregate(Sum('package_id__size')) | 880 | package_dependencies = self.all_depends().order_by('depends_on__name') |
| 883 | 881 | ||
| 882 | if target is self.TARGET_LATEST: | ||
| 883 | installed_deps =\ | ||
| 884 | package_dependencies.filter(~Q(target__target=None)) | ||
| 885 | else: | ||
| 886 | installed_deps =\ | ||
| 887 | package_dependencies.filter(Q(target__target=target)) | ||
| 888 | |||
| 889 | packages_list = None | ||
| 890 | total_size = 0 | ||
| 891 | |||
| 892 | # If we have installed depdencies for this package and target then use | ||
| 893 | # these to display | ||
| 894 | if installed_deps.count() > 0: | ||
| 895 | packages_list = installed_deps | ||
| 896 | total_size = installed_deps.aggregate( | ||
| 897 | Sum('depends_on__size'))['depends_on__size__sum'] | ||
| 898 | else: | ||
| 899 | new_list = [] | ||
| 900 | package_names = [] | ||
| 901 | |||
| 902 | # Find dependencies for the package that we know about even if | ||
| 903 | # it's not installed on a target e.g. from a non-image recipe | ||
| 904 | for p in package_dependencies.filter(Q(target=None)): | ||
| 905 | if p.depends_on.name in package_names: | ||
| 906 | continue | ||
| 907 | else: | ||
| 908 | package_names.append(p.depends_on.name) | ||
| 909 | new_list.append(p.pk) | ||
| 910 | # while we're here we may as well total up the size to | ||
| 911 | # avoid iterating again | ||
| 912 | total_size += p.depends_on.size | ||
| 913 | |||
| 914 | # We want to return a queryset here for consistency so pick the | ||
| 915 | # deps from the new_list | ||
| 916 | packages_list = package_dependencies.filter(Q(pk__in=new_list)) | ||
| 917 | |||
| 918 | return {'packages': packages_list, | ||
| 919 | 'size': total_size} | ||
| 884 | 920 | ||
| 885 | def all_depends(self): | 921 | def all_depends(self): |
| 886 | """ Returns just the depends packages and not any other dep_type """ | 922 | """ Returns just the depends packages and not any other dep_type |
| 923 | Note that this is for any target | ||
| 924 | """ | ||
| 887 | return self.filter(Q(dep_type=Package_Dependency.TYPE_RDEPENDS) | | 925 | return self.filter(Q(dep_type=Package_Dependency.TYPE_RDEPENDS) | |
| 888 | Q(dep_type=Package_Dependency.TYPE_TRDEPENDS)) | 926 | Q(dep_type=Package_Dependency.TYPE_TRDEPENDS)) |
| 889 | 927 | ||
| 928 | |||
| 890 | class Package_Dependency(models.Model): | 929 | class Package_Dependency(models.Model): |
| 891 | TYPE_RDEPENDS = 0 | 930 | TYPE_RDEPENDS = 0 |
| 892 | TYPE_TRDEPENDS = 1 | 931 | TYPE_TRDEPENDS = 1 |
