diff options
author | Lars Wirzenius <liw@liw.fi> | 2016-06-12 17:19:45 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2016-06-12 17:19:45 +0300 |
commit | 60acef363e2c841ad387887ad6b770fcf659f63d (patch) | |
tree | 377b5b9d72f625915585b6ad79547a33bbf49ad7 | |
parent | 5c2ce43eb53fb3f4d242aedb8ad4b6a4c30b4080 (diff) | |
download | obnam-60acef363e2c841ad387887ad6b770fcf659f63d.tar.gz |
add some progressing
-rw-r--r-- | meliaereader/reader.py | 16 |
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 |