/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

Functional get_record_stream interface tests covering full interface.

Show diffs side-by-side

added added

removed removed

Lines of Context:
82
82
from bzrlib.errors import (WeaveError, WeaveFormatError, WeaveParentMismatch,
83
83
        RevisionAlreadyPresent,
84
84
        RevisionNotPresent,
 
85
        UnavailableRepresentation,
85
86
        WeaveRevisionAlreadyPresent,
86
87
        WeaveRevisionNotPresent,
87
88
        )
89
90
from bzrlib.osutils import sha_strings
90
91
import bzrlib.patiencediff
91
92
from bzrlib.tsort import topo_sort
92
 
from bzrlib.versionedfile import VersionedFile, InterVersionedFile
 
93
from bzrlib.versionedfile import (
 
94
    ContentFactory,
 
95
    InterVersionedFile,
 
96
    VersionedFile,
 
97
    )
93
98
from bzrlib.weavefile import _read_weave_v5, write_weave_v5
94
99
 
95
100
 
 
101
class WeaveContentFactory(ContentFactory):
 
102
    """Content factory for streaming from weaves.
 
103
 
 
104
    :seealso ContentFactory:
 
105
    """
 
106
 
 
107
    def __init__(self, version, weave):
 
108
        """Create a WeaveContentFactory for version from weave."""
 
109
        ContentFactory.__init__(self)
 
110
        self.sha1 = weave.get_sha1s([version])[0]
 
111
        self.key = (version,)
 
112
        parents = weave.get_parent_map([version])[version]
 
113
        self.parents = tuple((parent,) for parent in parents)
 
114
        self.storage_kind = 'fulltext'
 
115
        self._weave = weave
 
116
 
 
117
    def get_bytes_as(self, storage_kind):
 
118
        if storage_kind == 'fulltext':
 
119
            return self._weave.get_text(self.key[0])
 
120
        else:
 
121
            raise UnavailableRepresentation(self.key, storage_kind, 'fulltext')
 
122
 
 
123
 
96
124
class Weave(VersionedFile):
97
125
    """weave - versioned text file storage.
98
126
    
263
291
 
264
292
    __contains__ = has_version
265
293
 
 
294
    def get_record_stream(self, versions, ordering, include_delta_closure):
 
295
        """Get a stream of records for versions.
 
296
 
 
297
        :param versions: The versions to include. Each version is a tuple
 
298
            (version,).
 
299
        :param ordering: Either 'unordered' or 'topological'. A topologically
 
300
            sorted stream has compression parents strictly before their
 
301
            children.
 
302
        :param include_delta_closure: If True then the closure across any
 
303
            compression parents will be included (in the opaque data).
 
304
        :return: An iterator of ContentFactory objects, each of which is only
 
305
            valid until the iterator is advanced.
 
306
        """
 
307
        if ordering == 'topological':
 
308
            parents = self.get_parent_map(versions)
 
309
            versions = topo_sort(parents)
 
310
        for version in versions:
 
311
            yield WeaveContentFactory(version, self)
 
312
 
266
313
    def get_parent_map(self, version_ids):
267
314
        """See VersionedFile.get_parent_map."""
268
315
        result = {}