~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/remote.py

  • Committer: Andrew Bennetts
  • Date: 2007-04-13 05:15:36 UTC
  • mto: (2018.5.147 hpss)
  • mto: This revision was merged to the branch mainline in revision 2416.
  • Revision ID: andrew.bennetts@canonical.com-20070413051536-omtgid0zygdfbvra
Rename Smart.*Transport classes to RemoteTransport, RemoteTCPTransport, etc.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
        self.st_mode = mode
43
43
 
44
44
 
45
 
class SmartTransport(transport.Transport):
 
45
class RemoteTransport(transport.Transport):
46
46
    """Connection to a smart server.
47
47
 
48
48
    The connection holds references to pipes that can be used to send requests
56
56
 
57
57
    The connection can be made over a tcp socket, or (in future) an ssh pipe
58
58
    or a series of http requests.  There are concrete subclasses for each
59
 
    type: SmartTCPTransport, etc.
 
59
    type: RemoteTCPTransport, etc.
60
60
    """
61
61
 
62
 
    # IMPORTANT FOR IMPLEMENTORS: SmartTransport MUST NOT be given encoding
 
62
    # IMPORTANT FOR IMPLEMENTORS: RemoteTransport MUST NOT be given encoding
63
63
    # responsibilities: Put those on SmartClient or similar. This is vital for
64
64
    # the ability to support multiple versions of the smart protocol over time:
65
 
    # SmartTransport is an adapter from the Transport object model to the 
 
65
    # RemoteTransport is an adapter from the Transport object model to the 
66
66
    # SmartClient model, not an encoder.
67
67
 
68
68
    def __init__(self, url, clone_from=None, medium=None):
76
76
        ### initialisation order things would blow up. 
77
77
        if not url.endswith('/'):
78
78
            url += '/'
79
 
        super(SmartTransport, self).__init__(url)
 
79
        super(RemoteTransport, self).__init__(url)
80
80
        self._scheme, self._username, self._password, self._host, self._port, self._path = \
81
81
                transport.split_url(url)
82
82
        if clone_from is None:
98
98
        return self._unparse_url(self._remote_path(relpath))
99
99
    
100
100
    def clone(self, relative_url):
101
 
        """Make a new SmartTransport related to me, sharing the same connection.
 
101
        """Make a new RemoteTransport related to me, sharing the same connection.
102
102
 
103
103
        This essentially opens a handle on a different remote directory.
104
104
        """
105
105
        if relative_url is None:
106
 
            return SmartTransport(self.base, self)
 
106
            return RemoteTransport(self.base, self)
107
107
        else:
108
 
            return SmartTransport(self.abspath(relative_url), self)
 
108
            return RemoteTransport(self.abspath(relative_url), self)
109
109
 
110
110
    def is_readonly(self):
111
111
        """Smart server transport can do read/write file operations."""
399
399
 
400
400
 
401
401
 
402
 
class SmartTCPTransport(SmartTransport):
 
402
class RemoteTCPTransport(RemoteTransport):
403
403
    """Connection to smart server over plain tcp.
404
404
    
405
405
    This is essentially just a factory to get 'RemoteTransport(url,
418
418
                raise errors.InvalidURL(
419
419
                    path=url, extra="invalid port %s" % _port)
420
420
        medium = SmartTCPClientMedium(_host, _port)
421
 
        super(SmartTCPTransport, self).__init__(url, medium=medium)
422
 
 
423
 
 
424
 
class SmartSSHTransport(SmartTransport):
 
421
        super(RemoteTCPTransport, self).__init__(url, medium=medium)
 
422
 
 
423
 
 
424
class RemoteSSHTransport(RemoteTransport):
425
425
    """Connection to smart server over SSH.
426
426
 
427
427
    This is essentially just a factory to get 'RemoteTransport(url,
438
438
            raise errors.InvalidURL(path=url, extra="invalid port %s" % 
439
439
                _port)
440
440
        medium = SmartSSHClientMedium(_host, _port, _username, _password)
441
 
        super(SmartSSHTransport, self).__init__(url, medium=medium)
442
 
 
443
 
 
444
 
class SmartHTTPTransport(SmartTransport):
 
441
        super(RemoteSSHTransport, self).__init__(url, medium=medium)
 
442
 
 
443
 
 
444
class RemoteHTTPTransport(RemoteTransport):
445
445
    """Just a way to connect between a bzr+http:// url and http://.
446
446
    
447
 
    This connection operates slightly differently than the SmartSSHTransport.
 
447
    This connection operates slightly differently than the RemoteSSHTransport.
448
448
    It uses a plain http:// transport underneath, which defines what remote
449
449
    .bzr/smart URL we are connected to. From there, all paths that are sent are
450
450
    sent as relative paths, this way, the remote side can properly
461
461
        else:
462
462
            self._http_transport = http_transport
463
463
        http_medium = self._http_transport.get_smart_medium()
464
 
        super(SmartHTTPTransport, self).__init__(url, medium=http_medium)
 
464
        super(RemoteHTTPTransport, self).__init__(url, medium=http_medium)
465
465
 
466
466
    def _remote_path(self, relpath):
467
467
        """After connecting HTTP Transport only deals in relative URLs."""
479
479
        return self._unparse_url(self._combine_paths(self._path, relpath))
480
480
 
481
481
    def clone(self, relative_url):
482
 
        """Make a new SmartHTTPTransport related to me.
 
482
        """Make a new RemoteHTTPTransport related to me.
483
483
 
484
484
        This is re-implemented rather than using the default
485
 
        SmartTransport.clone() because we must be careful about the underlying
 
485
        RemoteTransport.clone() because we must be careful about the underlying
486
486
        http transport.
487
487
        """
488
488
        if relative_url:
492
492
        # By cloning the underlying http_transport, we are able to share the
493
493
        # connection.
494
494
        new_transport = self._http_transport.clone(relative_url)
495
 
        return SmartHTTPTransport(abs_url, http_transport=new_transport)
 
495
        return RemoteHTTPTransport(abs_url, http_transport=new_transport)
496
496
 
497
497
 
498
498
def get_test_permutations():
500
500
    from bzrlib.smart import server
501
501
    ### We may need a little more test framework support to construct an
502
502
    ### appropriate RemoteTransport in the future.
503
 
    return [(SmartTCPTransport, server.SmartTCPServer_for_testing)]
 
503
    return [(RemoteTCPTransport, server.SmartTCPServer_for_testing)]