def getMetaPackages(names):
return [ MetaPackage.GetOrCreate(x, cache) for x in names ]
- provides = getMetaPackages(tree.fold("name"))
+ provides = getMetaPackages(tree.getModNames())
package = release.package
package.provides.clear()
result = {}
result["name"] = tree.name
- result["provides"] = tree.fold("name")
+ result["provides"] = tree.getModNames()
result["type"] = tree.type.name
for key in ["depends", "optional_depends"]:
self.children.append(child)
+ def getModNames(self):
+ return self.fold("name", type=ContentType.MOD)
+
+ # attr: Attribute name
+ # key: Key in attribute
+ # retval: Accumulator
+ # type: Filter to type
+ def fold(self, attr, key=None, retval=None, type=None):
+ if retval is None:
+ retval = set()
+
+ # Iterate through children
+ for child in self.children:
+ child.fold(attr, key, retval, type)
- def fold(self, attr, key=None, acc=None):
- if acc is None:
- acc = set()
-
- if self.meta is None:
- return acc
+ # Filter on type
+ if type and type != self.type:
+ return retval
+ # Get attribute
at = getattr(self, attr)
- value = at if key is None else at.get(key)
+ if not at:
+ return retval
+ # Get value
+ value = at if key is None else at.get(key)
if isinstance(value, list):
- acc |= set(value)
- elif value is not None:
- acc.add(value)
-
- for child in self.children:
- child.fold(attr, key, acc)
+ retval |= set(value)
+ elif value:
+ retval.add(value)
- return acc
+ return retval
def get(self, key):
return self.meta.get(key)