[Toaster] [PATCH 1/5] toaster: implement API to get full list of deps
Michael Wood
michael.g.wood at intel.com
Wed Oct 7 09:17:09 PDT 2015
On 01/10/15 14:56, Ed Bartosh wrote:
> 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.
>
> Signed-off-by: Ed Bartosh <ed.bartosh at linux.intel.com>
> ---
> bitbake/lib/toaster/orm/models.py | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py
> index 5aed158..c5e256f 100644
> --- a/bitbake/lib/toaster/orm/models.py
> +++ b/bitbake/lib/toaster/orm/models.py
> @@ -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")
>
Sorry for too late review, spotted a regression.
This will cause a regression in the layerdetails page, the API should
not be filtering out any layer dependencies that are already added to
the project.
- This is already done in the client side logic which is why the context
has projectlayers in it
- The layerdetails page is supposed to list the dependencies for the
layer regardless as to whether they have been added or not.
(btw you can do something like this
self.dependencies.exclude(depends_on__in=prj.get_project_layer_versions())
if you want a list of the layers it depends on but are not added, rather
than iterate through these and create a new list)
As it's been submitted would you be able to write a patch on top to fix
this.
Michael
More information about the toaster
mailing list