~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/__init__.py

  • Committer: Aaron Bentley
  • Date: 2006-09-19 16:26:17 UTC
  • mfrom: (2022 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2162.
  • Revision ID: abentley@panoramicfeedback.com-20060919162617-e6099afb05b6a9ef
Merge from bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
341
341
        # transports?
342
342
        if not isinstance(relpath, str):
343
343
            raise errors.InvalidURL("not a valid url: %r" % relpath)
344
 
        base_parts = base_path.split('/')
 
344
        if relpath.startswith('/'):
 
345
            base_parts = []
 
346
        else:
 
347
            base_parts = base_path.split('/')
345
348
        if len(base_parts) > 0 and base_parts[-1] == '':
346
349
            base_parts = base_parts[:-1]
347
350
        for p in relpath.split('/'):
427
430
        """Get the file at the given relative path.
428
431
 
429
432
        :param relpath: The relative path to the file
 
433
        :rtype: File-like object.
430
434
        """
431
435
        raise NotImplementedError(self.get)
432
436
 
437
441
        """
438
442
        return self.get(relpath).read()
439
443
 
 
444
    def get_smart_client(self):
 
445
        """Return a smart client for this transport if possible.
 
446
 
 
447
        :raises NoSmartServer: if no smart server client is available.
 
448
        """
 
449
        raise errors.NoSmartServer(self.base)
 
450
 
440
451
    def readv(self, relpath, offsets):
441
452
        """Get parts of the file at the given relative path.
442
453
 
447
458
            return
448
459
 
449
460
        fp = self.get(relpath)
450
 
        return self._seek_and_read(fp, offsets)
 
461
        return self._seek_and_read(fp, offsets, relpath)
451
462
 
452
 
    def _seek_and_read(self, fp, offsets):
 
463
    def _seek_and_read(self, fp, offsets, relpath='<unknown>'):
453
464
        """An implementation of readv that uses fp.seek and fp.read.
454
465
 
455
466
        This uses _coalesce_offsets to issue larger reads and fewer seeks.
477
488
            #       benchmarked.
478
489
            fp.seek(c_offset.start)
479
490
            data = fp.read(c_offset.length)
 
491
            if len(data) < c_offset.length:
 
492
                raise errors.ShortReadvError(relpath, c_offset.start,
 
493
                            c_offset.length, actual=len(data))
480
494
            for suboffset, subsize in c_offset.ranges:
481
495
                key = (c_offset.start+suboffset, subsize)
482
496
                data_map[key] = data[suboffset:suboffset+subsize]
1152
1166
register_lazy_transport('memory://', 'bzrlib.transport.memory', 'MemoryTransport')
1153
1167
register_lazy_transport('readonly+', 'bzrlib.transport.readonly', 'ReadonlyTransportDecorator')
1154
1168
register_lazy_transport('fakenfs+', 'bzrlib.transport.fakenfs', 'FakeNFSTransportDecorator')
1155
 
register_lazy_transport('vfat+', 
 
1169
register_lazy_transport('vfat+',
1156
1170
                        'bzrlib.transport.fakevfat',
1157
1171
                        'FakeVFATTransportDecorator')
 
1172
register_lazy_transport('bzr://',
 
1173
                        'bzrlib.transport.smart',
 
1174
                        'SmartTCPTransport')
 
1175
register_lazy_transport('bzr+ssh://',
 
1176
                        'bzrlib.transport.smart',
 
1177
                        'SmartSSHTransport')