diff options
-rw-r--r-- | layerindex/models.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/layerindex/models.py b/layerindex/models.py index ac2967bb2c..af6db374c6 100644 --- a/layerindex/models.py +++ b/layerindex/models.py @@ -280,6 +280,24 @@ class LayerBranch(models.Model): def get_recommends(self): return self.dependencies_set.filter(required=False) + def get_recursive_dependencies(self, required=True, include_self=False): + deplist = [] + def recurse_deps(layerbranch): + deplist.append(layerbranch) + if required: + dep_set = layerbranch.dependencies_set.filter(required=True) + else: + dep_set = layerbranch.dependencies_set.all() + for dep in dep_set: + deplayerbranch = dep.dependency.get_layerbranch(layerbranch.branch.name) + if deplayerbranch and deplayerbranch not in deplist: + recurse_deps(deplayerbranch) + recurse_deps(self) + if include_self: + return deplist + else: + return deplist[1:] + class LayerMaintainer(models.Model): MAINTAINER_STATUS_CHOICES = ( ('A', 'Active'), |