Last active
October 16, 2015 19:39
-
-
Save svalleru/f5898e8eab6bb96cb26f to your computer and use it in GitHub Desktop.
PackageInstaller | DependencyWalker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Node(object): | |
| def __init__(self, name): | |
| self.name = name | |
| self.deps = [] | |
| def make_dep(self, node): | |
| if node not in self.deps: | |
| self.deps.append(node) | |
| def install(self): | |
| # install all depedencies & pkg | |
| resolved = [] | |
| Node.resolver(self, resolved, []) | |
| for node in resolved: | |
| print "Installing..", node.name | |
| def remove(self): | |
| # remove all depedencies & pkg | |
| # TBD: olny remove unshared deps | |
| resolved = [] | |
| Node.resolver(self, resolved, []) | |
| for node in resolved: | |
| print "Removing..", node.name | |
| def resolver(node, resolved, unresolved): | |
| unresolved.append(node) | |
| for dep in node.deps: | |
| if dep not in resolved: # check if a dep is already resolved | |
| if dep in unresolved: # check for circular depedency | |
| raise Exception('Circular depedencies detected: %s -> %s' % (node.name, dep.name)) | |
| Node.resolver(dep, resolved, unresolved) | |
| resolved.append(node) | |
| unresolved.remove(node) | |
| a = Node('a') | |
| b = Node('b') | |
| c = Node('c') | |
| d = Node('d') | |
| e = Node('e') | |
| a.make_dep(b) # a depends on b | |
| a.make_dep(d) # a depends on d | |
| b.make_dep(c) # b depends on c | |
| b.make_dep(e) # b depends on e | |
| c.make_dep(d) # c depends on d | |
| c.make_dep(e) # c depends on e | |
| b.install() | |
| b.remove() | |
| #OUTPUT### | |
| Installing.. d | |
| Installing.. e | |
| Installing.. c | |
| Installing.. b | |
| Removing.. d | |
| Removing.. e | |
| Removing.. c | |
| Removing.. b | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment