Source code for coalib.collecting.Dependencies
from coalib.core.CircularDependencyError import CircularDependencyError
def _resolve(bears, resolved_bears, seen):
for bear in bears:
if bear in resolved_bears:
continue
missing = bear.missing_dependencies(resolved_bears)
if not missing:
resolved_bears.append(bear)
continue
if bear in seen:
seen.append(bear)
raise CircularDependencyError(s.name for s in seen)
seen.append(bear)
resolved_bears = _resolve(missing, resolved_bears, seen)
resolved_bears.append(bear)
seen.remove(bear) # Already resolved, no candidate for circular dep
return resolved_bears
[docs]def resolve(bears):
"""
Collects all dependencies of the given bears. This will also remove
duplicates.
:param bears: The given bears. Will not be modified.
:return: The new list of bears, sorted so that it can be executed
sequentially without dependency issues.
"""
return _resolve(bears, [], [])