Rev 4487: Change the _expand_record code to pop out old content objects. in http://bazaar.launchpad.net/~jameinel/bzr/1.17-rework-annotate

John Arbash Meinel john at arbash-meinel.com
Tue Jun 23 19:51:15 BST 2009


At http://bazaar.launchpad.net/~jameinel/bzr/1.17-rework-annotate

------------------------------------------------------------
revno: 4487
revision-id: john at arbash-meinel.com-20090623185110-pjo35ee505ywpvd3
parent: john at arbash-meinel.com-20090623184311-6ct5dqziroxkc2rc
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 1.17-rework-annotate
timestamp: Tue 2009-06-23 13:51:10 -0500
message:
  Change the _expand_record code to pop out old content objects.
  Also, re-use the base parent content object when possible.
-------------- next part --------------
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py	2009-06-23 18:43:11 +0000
+++ b/bzrlib/knit.py	2009-06-23 18:51:10 +0000
@@ -3408,10 +3408,16 @@
                     (key, parent_keys, record, record_details))
                 return None
             # We have the basis parent, so expand the delta
-            base_content = self._content_objects[compression_parent]
-            # TODO: track _num_compression_children, and when it goes to 1, we
-            #       can set 'copy_base_content = False' and remove base_content
-            #       from the cache (to be inserted as the new content)
+            num = self._num_compression_children[compression_parent]
+            num -= 1
+            if num == 0:
+                base_content = self._content_objects.pop(compression_parent)
+                self._num_compression_children.pop(compression_parent)
+                copy_base_content = True
+            else:
+                self._num_compression_children[compression_parent] = num
+                base_content = self._content_objects[compression_parent]
+                copy_base_content = False
             content, _ = self._vf._factory.parse_record(
                 key, record, record_details, base_content,
                 copy_base_content=True)

=== modified file 'bzrlib/tests/test_knit.py'
--- a/bzrlib/tests/test_knit.py	2009-06-23 05:49:00 +0000
+++ b/bzrlib/tests/test_knit.py	2009-06-23 18:51:10 +0000
@@ -1348,6 +1348,26 @@
         self.assertEqual(1, len(pending))
         self.assertEqual((rev_key, (parent_key,), record, details), pending[0])
 
+    def test__expand_record_tracks_num_children(self):
+        ann = self.make_annotator()
+        rev_key = ('rev-id',)
+        rev2_key = ('rev2-id',)
+        parent_key = ('parent-id',)
+        record = ['0,1,1\n', 'new-line\n']
+        details = ('line-delta', False)
+        ann._num_compression_children[parent_key] = 2
+        ann._expand_record(parent_key, (), None, ['line1\n', 'line2\n'],
+                           ('fulltext', False))
+        res = ann._expand_record(rev_key, (parent_key,), parent_key,
+                                 record, details)
+        self.assertEqual({parent_key: 1}, ann._num_compression_children)
+        # Expanding the second child should remove the content object, and the
+        # num_compression_children entry
+        res = ann._expand_record(rev2_key, (parent_key,), parent_key,
+                                 record, details)
+        self.assertFalse(parent_key in ann._content_objects)
+        self.assertEqual({}, ann._num_compression_children)
+
     def test__process_pending(self):
         ann = self.make_annotator()
         rev_key = ('rev-id',)
@@ -1356,6 +1376,7 @@
         record = ['0,1,1\n', 'new-line\n']
         details = ('line-delta', False)
         p1_record = ['line1\n', 'line2\n']
+        ann._num_compression_children[p1_key] = 1
         res = ann._expand_record(rev_key, (p1_key,p2_key), p1_key,
                                  record, details)
         self.assertEqual(None, res)



More information about the bazaar-commits mailing list