#!/usr/bin/env python
class P(object):
def __init__(self, pkg, requires):
self.requires = requires
self.pkg = pkg
self.Required = 0
def __str__(self):
return self.pkg
def __repr__(self):
return self.__str__()
def Require(self, pkg):
if str(pkg) in self.requires:
return True
return False
objs = []
# The proper dependancy order is:
# e f b g d c a
objs.append(P('a', ['b', 'c', 'd']))
objs.append(P('b', ['f']))
objs.append(P('c', ['d', 'e']))
objs.append(P('d', ['g']))
objs.append(P('e', []))
objs.append(P('f', ['e']))
objs.append(P('g', []))
print(objs)
changes = True
iters = 0
while changes:
changes = False
if iters >= 5000:
print('Poor man\'s circular dependancy detection triggered!')
break
else:
iters += 1
for a in range(0, len(objs)):
for b in range(0, len(objs)):
if objs[b].Require(objs[a]):
if b < a:
objs.insert(a, objs.pop(b))
changes = True
break
if changes:
break
if not changes:
break
print(objs)