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