summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2016-06-12 19:00:39 +0300
committerLars Wirzenius <liw@liw.fi>2016-06-12 19:00:39 +0300
commit121c01d2000ac3238ef2ba1ad7f18fc5fe2419aa (patch)
tree0ce945682bd36327150e2a7070e03d13c640651e
parent677aeebeaedb7214863673c09b83937bcd7739e8 (diff)
downloadobnam-121c01d2000ac3238ef2ba1ad7f18fc5fe2419aa.tar.gz
Try simpler approach
-rw-r--r--meliaereader/reader.py24
1 files changed, 13 insertions, 11 deletions
diff --git a/meliaereader/reader.py b/meliaereader/reader.py
index f8a4b925..37a044b7 100644
--- a/meliaereader/reader.py
+++ b/meliaereader/reader.py
@@ -64,7 +64,7 @@ class MeliaeReader(object):
def get_objs_of_type(self, typename):
return [o for o in self if o['type'] == typename]
- def compute_closures(self):
+ def compute_closures_foo(self):
all_refs = self._objs.keys()
# Set all closures to be just the object itself.
@@ -99,21 +99,23 @@ class MeliaeReader(object):
grown = True
return grown
+ def compute_closures(self):
+ for ref in self._objs.keys():
+ sys.stderr.write('{} closures left\n'.format(
+ len(self) - len(self._closures)))
+ self._closures[ref] = self._simple_get_closure(ref)
+
def _simple_get_closure(self, ref): # pragma: no cover
closure = set()
todo = set([ref])
- done = set()
while todo:
ref = todo.pop()
- done.add(ref)
- if ref in self._closures:
- closure = closure.union(self._closures[ref])
- else:
- closure.add(ref)
- obj = self.get_object(ref)
- for child_ref in obj['refs']:
- if child_ref not in done and child_ref in self:
- todo.add(child_ref)
+ assert ref not in closure
+ closure.add(ref)
+ obj = self.get_object(ref)
+ for child_ref in obj['refs']:
+ if child_ref not in closure and child_ref in self:
+ todo.add(child_ref)
return closure