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