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)

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…