~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/remote.py

  • Committer: Robert Collins
  • Date: 2007-04-30 03:48:51 UTC
  • mfrom: (2468 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2470.
  • Revision ID: robertc@robertcollins.net-20070430034851-aik2bzpubf44oyjc
Merge Johns fix for bug 110256.

Show diffs side-by-side

added added

removed removed

Lines of Context:
74
74
    # RemoteTransport is an adapter from the Transport object model to the 
75
75
    # SmartClient model, not an encoder.
76
76
 
77
 
    def __init__(self, url, clone_from=None, medium=None):
 
77
    def __init__(self, url, clone_from=None, medium=None, _client=None):
78
78
        """Constructor.
79
79
 
 
80
        :param clone_from: Another RemoteTransport instance that this one is
 
81
            being cloned from.  Attributes such as credentials and the medium
 
82
            will be reused.
80
83
        :param medium: The medium to use for this RemoteTransport. This must be
81
84
            supplied if clone_from is None.
 
85
        :param _client: Override the _SmartClient used by this transport.  This
 
86
            should only be used for testing purposes; normally this is
 
87
            determined from the medium.
82
88
        """
83
89
        ### Technically super() here is faulty because Transport's __init__
84
90
        ### fails to take 2 parameters, and if super were to choose a silly
97
103
            # reuse same connection
98
104
            self._medium = clone_from._medium
99
105
        assert self._medium is not None
 
106
        if _client is None:
 
107
            self._client = client._SmartClient(self._medium)
 
108
        else:
 
109
            self._client = _client
100
110
 
101
111
    def abspath(self, relpath):
102
112
        """Return the full url to the given relative path.
123
133
            return True
124
134
        elif resp == ('no', ):
125
135
            return False
 
136
        elif resp == ('error', "Generic bzr smart protocol error: "
 
137
                               "bad request 'Transport.is_readonly'"):
 
138
            # XXX: nasty hack: servers before 0.16 don't have a
 
139
            # 'Transport.is_readonly' verb, so we do what clients before 0.16
 
140
            # did: assume False.
 
141
            return False
126
142
        else:
127
143
            self._translate_error(resp)
128
144
        assert False, 'weird response %r' % (resp,)
160
176
 
161
177
    def _call2(self, method, *args):
162
178
        """Call a method on the remote server."""
163
 
        return client._SmartClient(self._medium).call(method, *args)
 
179
        return self._client.call(method, *args)
164
180
 
165
181
    def _call_with_body_bytes(self, method, args, body):
166
182
        """Call a method on the remote server with body bytes."""
167
 
        smart_client = client._SmartClient(self._medium)
168
 
        return smart_client.call_with_body_bytes(method, args, body)
 
183
        return self._client.call_with_body_bytes(method, args, body)
169
184
 
170
185
    def has(self, relpath):
171
186
        """Indicate whether a remote file of the given name exists or not.