Rev 3780: Add Builder.set_optimize(for_size=True) for GraphIndexBuilder and BTreeBuilder. in http://bzr.arbash-meinel.com/branches/bzr/1.9-dev/btree_optimize
John Arbash Meinel
john at arbash-meinel.com
Wed Oct 15 22:40:27 BST 2008
At http://bzr.arbash-meinel.com/branches/bzr/1.9-dev/btree_optimize
------------------------------------------------------------
revno: 3780
revision-id: john at arbash-meinel.com-20081015214003-n96hr05ylrwlgdvi
parent: john at arbash-meinel.com-20081015213410-g19sy2rpgxcl2sew
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: btree_optimize
timestamp: Wed 2008-10-15 16:40:03 -0500
message:
Add Builder.set_optimize(for_size=True) for GraphIndexBuilder and BTreeBuilder.
-------------- next part --------------
=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py 2008-09-21 14:48:37 +0000
+++ b/bzrlib/index.py 2008-10-15 21:40:03 +0000
@@ -84,6 +84,7 @@
self._nodes = {}
self._nodes_by_key = None
self._key_length = key_elements
+ self._optimize_for_size = False
def _check_key(self, key):
"""Raise BadIndexKey if key is not a valid key for this index."""
@@ -278,6 +279,17 @@
(len(result.getvalue()), expected_bytes))
return result
+ def set_optimize(self, for_size=True):
+ """Change how the builder tries to optimize the result.
+
+ :param for_size: Tell the builder to try and make the index as small as
+ possible.
+ :return: None
+ """
+ # GraphIndexBuilder itself doesn't pay attention to the flag yet, but
+ # other builders do.
+ self._optimize_for_size = for_size
+
class GraphIndex(object):
"""An index for data with embedded graphs.
=== modified file 'bzrlib/tests/test_btree_index.py'
--- a/bzrlib/tests/test_btree_index.py 2008-08-28 20:13:31 +0000
+++ b/bzrlib/tests/test_btree_index.py 2008-10-15 21:40:03 +0000
@@ -434,6 +434,13 @@
self.assertEqual(sorted(nodes), nodes)
self.assertEqual(16, len(nodes))
+ def test_set_optimize(self):
+ builder = btree_index.BTreeBuilder(key_elements=2, reference_lists=2)
+ builder.set_optimize(for_size=True)
+ self.assertTrue(builder._optimize_for_size)
+ builder.set_optimize(for_size=False)
+ self.assertFalse(builder._optimize_for_size)
+
def test_spill_index_stress_2_2(self):
# test that references and longer keys don't confuse things.
builder = btree_index.BTreeBuilder(key_elements=2, reference_lists=2,
=== modified file 'bzrlib/tests/test_index.py'
--- a/bzrlib/tests/test_index.py 2008-09-02 17:52:00 +0000
+++ b/bzrlib/tests/test_index.py 2008-10-15 21:40:03 +0000
@@ -350,6 +350,13 @@
builder.add_node(('k', 'ey'), 'data', ([('reference', 'tokey')], ))
builder.add_node(('reference', 'tokey'), 'data', ([],))
+ def test_set_optimize(self):
+ builder = GraphIndexBuilder(reference_lists=1, key_elements=2)
+ builder.set_optimize(for_size=True)
+ self.assertTrue(builder._optimize_for_size)
+ builder.set_optimize(for_size=False)
+ self.assertFalse(builder._optimize_for_size)
+
class TestGraphIndex(TestCaseWithMemoryTransport):
More information about the bazaar-commits
mailing list