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