diff options
-rw-r--r-- | lib/toaster/orm/models.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py index 9851c92b7..9a5942b75 100644 --- a/lib/toaster/orm/models.py +++ b/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") |