summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2016-06-12 17:19:45 +0300
committerLars Wirzenius <liw@liw.fi>2016-06-12 17:19:45 +0300
commit60acef363e2c841ad387887ad6b770fcf659f63d (patch)
tree377b5b9d72f625915585b6ad79547a33bbf49ad7
parent5c2ce43eb53fb3f4d242aedb8ad4b6a4c30b4080 (diff)
downloadobnam-60acef363e2c841ad387887ad6b770fcf659f63d.tar.gz
add some progressing
-rw-r--r--meliaereader/reader.py16
1 files changed, 10 insertions, 6 deletions
diff --git a/meliaereader/reader.py b/meliaereader/reader.py
index 0398f2ba..be38ef8d 100644
--- a/meliaereader/reader.py
+++ b/meliaereader/reader.py
@@ -65,7 +65,9 @@ class MeliaeReader(object):
return [o for o in self if o['type'] == typename]
def compute_closures(self):
+ sys.stderr.write('computing closures for {} objects'.format(len(self)))
for ref in self._objs:
+ sys.stderr.write('{} closures to go\n'.format(len(self) - len(self._closures)))
self._closures[ref] = self._simple_get_closure(ref)
assert set(self._objs.keys()) == set(self._closures.keys())
@@ -76,12 +78,14 @@ class MeliaeReader(object):
while todo:
ref = todo.pop()
done.add(ref)
- 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)
+ 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)
return closure