# HG changeset patch # User Jeff Hammel # Date 1310520108 25200 # Node ID f89c3615b4146d6ab1863b9c9940f207c1781fce # Parent ef01512b22120572174c2691f8c2be088c547536 this is how its done diff -r ef01512b2212 -r f89c3615b414 python/unroll_deps.py --- a/python/unroll_deps.py Tue Jul 12 17:25:21 2011 -0700 +++ b/python/unroll_deps.py Tue Jul 12 18:21:48 2011 -0700 @@ -3,6 +3,8 @@ def unroll_dependencies(dependencies): """unroll dependencies""" order = [] + + # unroll the dependencies for package, deps in dependencies.items(): print package, order try: @@ -13,14 +15,32 @@ for dep in deps: try: dep_index = order.index(dep) - assert dep_index < index, "Cyclic dependencies detected: %s, %s" % (package, dep) + if dep_index > index: + order.insert(dep_index+1, package) + order.pop(index) + index = dep_index except ValueError: order.insert(index, dep) + except AssertionError: + print reverse_deps + raise + + # ensure no cyclic dependencies + # XXX should do this first + order_dict = dict([(j, i) for i, j in enumerate(order)]) + for package, deps in dependencies.items(): + index = order_dict[package] + for d in deps: + assert index > order_dict[d], "Cyclic dependencies detected" + return order if __name__ == '__main__': - deps = {'packageA': set(['packageB', 'packageC']), - 'packageB': set(['packageC', 'packageD', 'packageE']), - 'packageC': set(['packageE'])} + deps = {'packageA': set(['packageB', 'packageC', 'packageF']), + 'packageB': set(['packageC', 'packageD', 'packageE', 'packageG']), + 'packageC': set(['packageE']), + 'packageE': set(['packageF', 'packageG']), + 'packageF': set(['packageG']), + 'packageX': set()} unrolled = unroll_dependencies(deps) print unrolled