Rev 5092: A few more bits, we can add and save content. in http://bzr.arbash-meinel.com/branches/bzr/lp/2.2.0b2-contained-pack
John Arbash Meinel
john at arbash-meinel.com
Fri Mar 5 22:46:34 GMT 2010
At http://bzr.arbash-meinel.com/branches/bzr/lp/2.2.0b2-contained-pack
------------------------------------------------------------
revno: 5092
revision-id: john at arbash-meinel.com-20100305224600-cb6l8k3o7vx9e80c
parent: john at arbash-meinel.com-20100305223556-e8r1sbrcrx97za52
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.2.0b2-contained-pack
timestamp: Fri 2010-03-05 16:46:00 -0600
message:
A few more bits, we can add and save content.
-------------- next part --------------
=== modified file 'bzrlib/pack_collection.py'
--- a/bzrlib/pack_collection.py 2010-03-05 22:35:56 +0000
+++ b/bzrlib/pack_collection.py 2010-03-05 22:46:00 +0000
@@ -181,7 +181,8 @@
self._memos = None
# Names that have been added to this list, that have not yet been
# written to disk.
- self._added_names = set()
+ self._added_info = set()
+ self._removed_info = set()
def _do_check_safe_to_cache(self):
"""Make sure that it is valid to cache state in memory.
@@ -254,17 +255,38 @@
return []
return index.iter_all_entries()
+ def _diff_memos_from_disk(self):
+ """Compare the current memos in memory versus the ones on disk.
+
+ Prepare for updating the file on disk.
+ """
+ disk_nodes = set()
+ for _, key, value in self._iter_disk_index():
+ name = key[0]
+ disk_nodes.add((name, value))
+
+ def add_memo(self, name, value):
+ """Add a memo to this cache."""
+ self._ensure_loaded()
+ assert name not in self._memos
+ self._memos[name] = value
+ self._added_info.add((name, value))
+
def get_memo(self, name):
"""Get the section (index) memo for the given name."""
+ self._ensure_loaded()
+ return self._memos[name]
def save(self):
"""Save the current in-memory content to disk."""
# TODO: Ensure disk locking
builder = self._index_builder_class(reference_lists=0, key_elements=1)
- for name, value in self._memos:
+ for name, value in self._memos.iteritems():
builder.add_node((name,), value)
self.transport.put_file(self.filename, builder.finish(),
mode=self._do_get_file_mode())
+ self._added_info = []
+ self._removed_info = []
=== modified file 'bzrlib/tests/test_pack_collection.py'
--- a/bzrlib/tests/test_pack_collection.py 2010-03-05 22:35:56 +0000
+++ b/bzrlib/tests/test_pack_collection.py 2010-03-05 22:46:00 +0000
@@ -152,3 +152,28 @@
tracker.save()
btree = tracker._index_class(t, 'meta', size=None)
self.assertEqual(0, btree.key_count())
+
+ def test_add_memo(self):
+ t = self.get_transport()
+ tracker = TrivialMemoTracker(t, 'meta')
+ tracker.add_memo('test-name', 'content')
+ self.assertEqual('content', tracker.get_memo('test-name'))
+ self.assertEqual({'test-name': 'content'}, tracker._memos)
+ self.assertEqual([('test-name', 'content')],
+ sorted(tracker._added_info))
+ self.assertEqual([], sorted(tracker._removed_info))
+ tracker.save()
+ self.assertEqual({'test-name': 'content'}, tracker._memos)
+ self.assertEqual([], sorted(tracker._added_info))
+ self.assertEqual([], sorted(tracker._removed_info))
+ btree = tracker._index_class(t, 'meta', size=None)
+ self.assertEqual(1, btree.key_count())
+ self.assertEqual([(('test-name',), 'content')],
+ sorted([(n[1], n[2]) for n in btree.iter_all_entries()]))
+
+ def test__diff_memos_from_disk(self):
+ tracker = TrivialMemoTracker(self.get_transport(), 'meta')
+
+ def test_get_missing_memo(self):
+ tracker = TrivialMemoTracker(self.get_transport(), 'meta')
+ self.assertRaises(KeyError, tracker.get_memo, 'not-there')
More information about the bazaar-commits
mailing list