1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-08 17:19:20 +00:00

bitbake: toaster: implement API to get full list of deps

Implemented Layer_Version.get_alldeps API to recursively get
full list of dependencies for the layer. Dependencies that are
already in the project are filtered out from the result.
Result list of Layer_Version objects is sorted by layer name
for UI to look consistent.

This API is going to be used to show amount and list of
dependencies for the layer in the list of compatible layers
for the project.

(Bitbake rev: 7d853a3054a9ae3d18eb6f5bc13ba27d2795c31a)

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: brian avery <avery.brian@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ed Bartosh
2015-10-02 11:05:12 -07:00
committed by Richard Purdie
parent 05594f8636
commit bd2ec77510
+19
View File
@@ -1177,6 +1177,25 @@ class Layer_Version(models.Model):
def get_detailspage_url(self, project_id):
return reverse('layerdetails', args=(project_id, self.pk))
def get_alldeps(self, project_id):
"""Get full list of unique layer dependencies."""
def gen_layerdeps(lver, project):
for ldep in lver.dependencies.all():
yield ldep.depends_on
# get next level of deps recursively calling gen_layerdeps
for subdep in gen_layerdeps(ldep.depends_on, project):
yield subdep
project = Project.objects.get(pk=project_id)
result = []
projectlvers = [player.layercommit for player in project.projectlayer_set.all()]
for dep in gen_layerdeps(self, project):
# filter out duplicates and layers already belonging to the project
if dep not in result + projectlvers:
result.append(dep)
return sorted(result, key=lambda x: x.layer.name)
def __unicode__(self):
return "%d %s (VCS %s, Project %s)" % (self.pk, str(self.layer), self.get_vcs_reference(), self.build.project if self.build is not None else "No project")