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 <[email protected]>
---
  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
--
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

Reply via email to