Rev 5093: implement removing a node. 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:50:49 GMT 2010
At http://bzr.arbash-meinel.com/branches/bzr/lp/2.2.0b2-contained-pack
------------------------------------------------------------
revno: 5093
revision-id: john at arbash-meinel.com-20100305225015-d70rj7czf6zgagky
parent: john at arbash-meinel.com-20100305224600-cb6l8k3o7vx9e80c
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.2.0b2-contained-pack
timestamp: Fri 2010-03-05 16:50:15 -0600
message:
implement removing a node.
-------------- next part --------------
=== modified file 'bzrlib/pack_collection.py'
--- a/bzrlib/pack_collection.py 2010-03-05 22:46:00 +0000
+++ b/bzrlib/pack_collection.py 2010-03-05 22:50:15 +0000
@@ -277,6 +277,15 @@
self._ensure_loaded()
return self._memos[name]
+ def remove_memo(self, name, value):
+ """Remove the given memo.
+
+ We require 'value' so that we can ensure it matches.
+ """
+ old = self._memos.pop(name)
+ assert old == value
+ self._removed_info.add((name, value))
+
def save(self):
"""Save the current in-memory content to disk."""
# TODO: Ensure disk locking
@@ -285,8 +294,8 @@
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 = []
+ self._added_info = set()
+ self._removed_info = set()
=== modified file 'bzrlib/tests/test_pack_collection.py'
--- a/bzrlib/tests/test_pack_collection.py 2010-03-05 22:46:00 +0000
+++ b/bzrlib/tests/test_pack_collection.py 2010-03-05 22:50:15 +0000
@@ -177,3 +177,29 @@
def test_get_missing_memo(self):
tracker = TrivialMemoTracker(self.get_transport(), 'meta')
self.assertRaises(KeyError, tracker.get_memo, 'not-there')
+
+ def test_remove_memo(self):
+ t = self.get_transport()
+ tracker = TrivialMemoTracker(t, 'meta')
+ tracker.add_memo('test-name', 'content')
+ tracker.add_memo('test-name2', 'content2')
+ self.assertEqual({'test-name': 'content',
+ 'test-name2': 'content2'}, tracker._memos)
+ self.assertEqual([('test-name', 'content'),
+ ('test-name2', 'content2'),
+ ], sorted(tracker._added_info))
+ self.assertEqual([], sorted(tracker._removed_info))
+ tracker.save()
+ self.assertEqual([], sorted(tracker._added_info))
+ self.assertEqual([], sorted(tracker._removed_info))
+ tracker.remove_memo('test-name2', 'content2')
+ self.assertEqual([], sorted(tracker._added_info))
+ self.assertEqual([('test-name2', 'content2')],
+ sorted(tracker._removed_info))
+ self.assertEqual({'test-name': 'content'}, tracker._memos)
+ # Before saving, we should have both keys
+ btree = tracker._index_class(t, 'meta', size=None)
+ self.assertEqual(2, btree.key_count())
+ tracker.save()
+ btree = tracker._index_class(t, 'meta', size=None)
+ self.assertEqual(1, btree.key_count())
More information about the bazaar-commits
mailing list