~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

  • Committer: Robert Collins
  • Date: 2006-03-02 07:43:46 UTC
  • mto: (1594.2.4 integration)
  • mto: This revision was merged to the branch mainline in revision 1596.
  • Revision ID: robertc@robertcollins.net-20060302074346-f6ea05e3f19f6b8b
Change WeaveStore into VersionedFileStore and make its versoined file class parameterisable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
97
97
INDEX_SUFFIX = '.kndx'
98
98
 
99
99
 
100
 
# convenience factories for testing or use:
101
 
def AnnotatedKnitFactory(name, transport, mode=None):
102
 
    """Create a knit with path name in transport transport."""
103
 
    return KnitVersionedFile(transport,
104
 
                             name,
105
 
                             'w',
106
 
                             KnitAnnotateFactory(),
107
 
                             delta=True)
108
 
 
109
 
 
110
100
class KnitContent(object):
111
101
    """Content of a knit version to which deltas can be applied."""
112
102
 
241
231
    stored and retrieved.
242
232
    """
243
233
 
244
 
    def __init__(self, transport, relpath, mode, factory,
 
234
    def __init__(self, relpath, transport, file_mode=None, access_mode=None, factory=None,
245
235
                 basis_knit=None, delta=True):
246
236
        """Construct a knit at location specified by relpath."""
247
 
        assert mode in ('r', 'w'), "invalid mode specified"
 
237
        if access_mode is None:
 
238
            access_mode = 'w'
 
239
        assert access_mode in ('r', 'w'), "invalid mode specified %r" % access_mode
248
240
        assert not basis_knit or isinstance(basis_knit, KnitVersionedFile), \
249
241
            type(basis_knit)
250
242
 
251
243
        self.transport = transport
252
244
        self.filename = relpath
253
245
        self.basis_knit = basis_knit
254
 
        self.factory = factory
255
 
        self.writable = (mode == 'w')
 
246
        self.factory = factory or KnitAnnotateFactory()
 
247
        self.writable = (access_mode == 'w')
256
248
        self.delta = delta
257
249
 
258
250
        self._index = _KnitIndex(transport, relpath + INDEX_SUFFIX,
259
 
            mode)
 
251
            access_mode)
260
252
        self._data = _KnitData(transport, relpath + DATA_SUFFIX,
261
 
            mode)
 
253
            access_mode)
262
254
 
263
255
    def copy_to(self, name, transport):
264
256
        """See VersionedFile.copy_to()."""
271
263
        transport.rename(name + INDEX_SUFFIX + '.tmp', name + INDEX_SUFFIX)
272
264
 
273
265
    def create_empty(self, name, transport, mode=None):
274
 
        return KnitVersionedFile(transport, name, 'w', self.factory, delta=self.delta)
 
266
        return KnitVersionedFile(name, transport, factory=self.factory, delta=self.delta)
275
267
    
276
268
    @staticmethod
277
269
    def get_suffixes():
814
806
class InterKnit(InterVersionedFile):
815
807
    """Optimised code paths for knit to knit operations."""
816
808
    
817
 
    _matching_file_factory = staticmethod(AnnotatedKnitFactory)
 
809
    _matching_file_factory = KnitVersionedFile
818
810
    
819
811
    @staticmethod
820
812
    def is_compatible(source, target):