Rev 3555: (Jelmer) Add VirtualVersionedFiles class. in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Thu Jul 17 10:41:03 BST 2008
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 3555
revision-id:pqm at pqm.ubuntu.com-20080717094051-cgyo1zagozwcd4mm
parent: pqm at pqm.ubuntu.com-20080717082940-zdwz5cqhdoot1swx
parent: jelmer at samba.org-20080717091316-p4ql8esopyyozfg8
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2008-07-17 10:40:51 +0100
message:
(Jelmer) Add VirtualVersionedFiles class.
modified:
bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
------------------------------------------------------------
revno: 3518.1.2
revision-id:jelmer at samba.org-20080717091316-p4ql8esopyyozfg8
parent: jelmer at samba.org-20080703182324-cckc8zk4vb9zif05
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: virtualvf
timestamp: Thu 2008-07-17 11:13:16 +0200
message:
Fix some stylistic issues pointed out by Ian.
modified:
bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
------------------------------------------------------------
revno: 3518.1.1
revision-id:jelmer at samba.org-20080703182324-cckc8zk4vb9zif05
parent: pqm at pqm.ubuntu.com-20080703113657-6twl1rf07wq3o42d
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: virtualvf
timestamp: Thu 2008-07-03 20:23:24 +0200
message:
Add VirtualVersionedFiles class.
modified:
bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
=== modified file 'bzrlib/tests/test_versionedfile.py'
--- a/bzrlib/tests/test_versionedfile.py 2008-06-19 13:14:24 +0000
+++ b/bzrlib/tests/test_versionedfile.py 2008-07-17 09:13:16 +0000
@@ -45,6 +45,7 @@
)
from bzrlib.symbol_versioning import one_four, one_five
from bzrlib.tests import (
+ TestCase,
TestCaseWithMemoryTransport,
TestScenarioApplier,
TestSkipped,
@@ -63,6 +64,7 @@
ConstantMapper,
HashEscapedPrefixMapper,
PrefixMapper,
+ VirtualVersionedFiles,
make_versioned_files_factory,
)
from bzrlib.weave import WeaveFile
@@ -2157,3 +2159,62 @@
key = ('foo', 'bar',)
files.add_lines(key, (), [])
self.assertEqual(set([key]), set(files.keys()))
+
+
+class VirtualVersionedFilesTests(TestCase):
+ """Basic tests for the VirtualVersionedFiles implementations."""
+
+ def _get_parent_map(self, keys):
+ ret = {}
+ for k in keys:
+ if k in self._parent_map:
+ ret[k] = self._parent_map[k]
+ return ret
+
+ def setUp(self):
+ TestCase.setUp(self)
+ self._lines = {}
+ self._parent_map = {}
+ self.texts = VirtualVersionedFiles(self._get_parent_map,
+ self._lines.get)
+
+ def test_add_lines(self):
+ self.assertRaises(NotImplementedError,
+ self.texts.add_lines, "foo", [], [])
+
+ def test_add_mpdiffs(self):
+ self.assertRaises(NotImplementedError,
+ self.texts.add_mpdiffs, [])
+
+ def test_check(self):
+ self.assertTrue(self.texts.check())
+
+ def test_insert_record_stream(self):
+ self.assertRaises(NotImplementedError, self.texts.insert_record_stream,
+ [])
+
+ def test_get_sha1s_nonexistent(self):
+ self.assertEquals({}, self.texts.get_sha1s([("NONEXISTENT",)]))
+
+ def test_get_sha1s(self):
+ self._lines["key"] = ["dataline1", "dataline2"]
+ self.assertEquals({("key",): osutils.sha_strings(self._lines["key"])},
+ self.texts.get_sha1s([("key",)]))
+
+ def test_get_parent_map(self):
+ self._parent_map = {"G": ("A", "B")}
+ self.assertEquals({("G",): (("A",),("B",))},
+ self.texts.get_parent_map([("G",), ("L",)]))
+
+ def test_get_record_stream(self):
+ self._lines["A"] = ["FOO", "BAR"]
+ it = self.texts.get_record_stream([("A",)], "unordered", True)
+ record = it.next()
+ self.assertEquals("fulltext", record.storage_kind)
+ self.assertEquals("FOOBAR", record.get_bytes_as("fulltext"))
+
+ def test_get_record_stream_absent(self):
+ it = self.texts.get_record_stream([("A",)], "unordered", True)
+ record = it.next()
+ self.assertEquals("absent", record.storage_kind)
+
=== modified file 'bzrlib/versionedfile.py'
--- a/bzrlib/versionedfile.py 2008-07-17 07:33:12 +0000
+++ b/bzrlib/versionedfile.py 2008-07-17 09:40:51 +0000
@@ -1323,3 +1323,67 @@
PlanWeaveMerge.__init__(self, plan, a_marker, b_marker)
+class VirtualVersionedFiles(VersionedFiles):
+ """Dummy implementation for VersionedFiles that uses other functions for
+ obtaining fulltexts and parent maps.
+
+ This is always on the bottom of the stack and uses string keys
+ (rather than tuples) internally.
+ """
+
+ def __init__(self, get_parent_map, get_lines):
+ """Create a VirtualVersionedFiles.
+
+ :param get_parent_map: Same signature as Repository.get_parent_map.
+ :param get_lines: Should return lines for specified key or None if
+ not available.
+ """
+ super(VirtualVersionedFiles, self).__init__()
+ self._get_parent_map = get_parent_map
+ self._get_lines = get_lines
+
+ def check(self, progressbar=None):
+ """See VersionedFiles.check.
+
+ :note: Always returns True for VirtualVersionedFiles.
+ """
+ return True
+
+ def add_mpdiffs(self, records):
+ """See VersionedFiles.mpdiffs.
+
+ :note: Not implemented for VirtualVersionedFiles.
+ """
+ raise NotImplementedError(self.add_mpdiffs)
+
+ def get_parent_map(self, keys):
+ """See VersionedFiles.get_parent_map."""
+ return dict([((k,), tuple([(p,) for p in v]))
+ for k,v in self._get_parent_map([k for (k,) in keys]).iteritems()])
+
+ def get_sha1s(self, keys):
+ """See VersionedFiles.get_sha1s."""
+ ret = {}
+ for (k,) in keys:
+ lines = self._get_lines(k)
+ if lines is not None:
+ if not isinstance(lines, list):
+ raise AssertionError
+ ret[(k,)] = osutils.sha_strings(lines)
+ return ret
+
+ def get_record_stream(self, keys, ordering, include_delta_closure):
+ """See VersionedFiles.get_record_stream."""
+ for (k,) in list(keys):
+ lines = self._get_lines(k)
+ if lines is not None:
+ if not isinstance(lines, list):
+ raise AssertionError
+ yield FulltextContentFactory((k,), None,
+ sha1=osutils.sha_strings(lines),
+ text=''.join(lines))
+ else:
+ yield AbsentContentFactory((k,))
+
+
+
More information about the bazaar-commits
mailing list