INNER CODE UNIT · Python
order_by_dependencies
ExplosionEngine/Explosion · ThirdParty/ConanRecipes/build_recipes.py:99
def order_by_dependencies(recipes: list[Recipe]) -> list[Recipe]:
by_name = {r.name: r for r in recipes}
ordered: list[Recipe] = []
visited: set[str] = set()
visiting: set[str] = set()
def visit(recipe: Recipe):
if recipe.name in visited:
return
if recipe.name in visiting:
raise SystemExit(f"error: dependency cycle involving '{recipe.name}'")
visiting.add(recipe.name)
for dep in sorted(recipe.requires):
if dep in by_name:
visit(by_name[dep])
visiting.discard(recipe.name)
visited.add(recipe.name)
ordered.append(recipe)