Rev 182: Use a set() to ensure we don't repeat parents. in http://bazaar.launchpad.net/~meliae-dev/meliae/trunk
John Arbash Meinel
john at arbash-meinel.com
Mon Aug 9 16:47:58 BST 2010
At http://bazaar.launchpad.net/~meliae-dev/meliae/trunk
------------------------------------------------------------
revno: 182
revision-id: john at arbash-meinel.com-20100809154752-ah3vho249qprf4ky
parent: john at arbash-meinel.com-20100809153521-gm462m88g98er01u
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: trunk
timestamp: Mon 2010-08-09 10:47:52 -0500
message:
Use a set() to ensure we don't repeat parents.
Repeated children is useful, because stuff like dicts can do it, and it
lets you know the key:value. Repeated parents doesn't seem to do
anything but waste a lot of memory.
-------------- next part --------------
=== modified file 'meliae/loader.py'
--- a/meliae/loader.py 2010-08-05 19:29:18 +0000
+++ b/meliae/loader.py 2010-08-09 15:47:52 +0000
@@ -286,7 +286,8 @@
elif type(refs) in (int, long):
obj.parents = (refs,)
else:
- obj.parents = refs
+ # We use a set() to remove duplicate parents
+ obj.parents = set(refs)
finally:
if enabled:
gc.enable()
=== modified file 'meliae/tests/test_loader.py'
--- a/meliae/tests/test_loader.py 2010-08-05 19:54:17 +0000
+++ b/meliae/tests/test_loader.py 2010-08-09 15:47:52 +0000
@@ -246,8 +246,8 @@
objs = manager.objs
self.assertEqual((), objs[1].parents)
self.assertEqual([1, 3], objs[3].parents)
- self.assertEqual([3, 7, 8], objs[4].parents)
- self.assertEqual([3, 7, 8], objs[5].parents)
+ self.assertEqual([3, 7, 8], sorted(objs[4].parents))
+ self.assertEqual([3, 7, 8], sorted(objs[5].parents))
self.assertEqual([8], objs[6].parents)
self.assertEqual([8], objs[7].parents)
self.assertEqual((), objs[8].parents)
@@ -270,12 +270,20 @@
warn.trap_warnings(old_func)
self.assertEqual((), objs[1].parents)
self.assertEqual([1, 3], objs[3].parents)
- self.assertEqual([3, 7, 8], objs[4].parents)
- self.assertEqual([3, 7, 8], objs[5].parents)
+ self.assertEqual([3, 7, 8], sorted(objs[4].parents))
+ self.assertEqual([3, 7, 8], sorted(objs[5].parents))
self.assertEqual([8], objs[6].parents)
self.assertEqual([8], objs[7].parents)
self.assertEqual((), objs[8].parents)
+ def test_compute_parents_ignore_repeated(self):
+ manager = loader.load(_intern_dict_dump, show_prog=False)
+ str_5 = manager[5]
+ manager.compute_parents()
+ # Each of these refers to str_5 multiple times, but they should only
+ # show up 1 time in the parent list.
+ self.assertEqual([6, 7, 8], sorted(str_5.parents))
+
def test_compute_total_size(self):
manager = loader.load(_example_dump, show_prog=False)
objs = manager.objs
More information about the bazaar-commits
mailing list