[MERGE] Deprecate get_shared_medium, and pass medium + base directly into _SmartClient.
Andrew Bennetts
andrew at canonical.com
Mon Mar 31 23:56:33 BST 2008
This is a small change that I did while working towards fixing
<https://bugs.launchpad.net/bzr/+bug/207558>. It removes more lines than it
adds (even though it just deprecates rather than deletes
Transport.get_shared_medium) so I'm pretty sure it's a good idea :)
It makes it simpler to construct a _SmartClient directly, and removes the need
to use _SharedConnection objects to construct one.
-Andrew.
-------------- next part --------------
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: andrew.bennetts at canonical.com-20080328085843-\
# pdstuawpwy1hst6r
# target_branch: http://bazaar-vcs.org/bzr/bzr.dev
# testament_sha1: 984348717aa71828026ab4b84fd3a27d5e72d3fe
# timestamp: 2008-04-01 09:47:44 +1100
# source_branch: http://people.ubuntu.com/~andrew/bzr/bug-207558-\
# exported/_SmartClient takes medium
# base_revision_id: pqm at pqm.ubuntu.com-20080328064220-ongijg78bfqhvbay
#
# Begin patch
=== modified file 'bzrlib/bzrdir.py'
--- bzrlib/bzrdir.py 2008-03-26 09:50:48 +0000
+++ bzrlib/bzrdir.py 2008-03-28 08:05:51 +0000
@@ -2415,15 +2415,14 @@
def initialize_on_transport(self, transport):
try:
# hand off the request to the smart server
- shared_medium = transport.get_shared_medium()
+ client_medium = transport.get_smart_medium()
except errors.NoSmartMedium:
# TODO: lookup the local format from a server hint.
local_dir_format = BzrDirMetaFormat1()
return local_dir_format.initialize_on_transport(transport)
- client = _SmartClient(shared_medium)
+ client = _SmartClient(client_medium, transport.base)
path = client.remote_path_from_transport(transport)
- response = _SmartClient(shared_medium).call('BzrDirFormat.initialize',
- path)
+ response = client.call('BzrDirFormat.initialize', path)
assert response[0] in ('ok', ), 'unexpected response code %s' % (response,)
return remote.RemoteBzrDir(transport)
=== modified file 'bzrlib/remote.py'
--- bzrlib/remote.py 2008-03-27 00:27:41 +0000
+++ bzrlib/remote.py 2008-03-28 08:58:43 +0000
@@ -62,11 +62,10 @@
self._real_bzrdir = None
if _client is None:
- self._shared_medium = transport.get_shared_medium()
- self._client = client._SmartClient(self._shared_medium)
+ medium = transport.get_smart_medium()
+ self._client = client._SmartClient(medium, transport.base)
else:
self._client = _client
- self._shared_medium = None
return
path = self._path_for_remote_call(self._client)
@@ -277,7 +276,7 @@
self._real_repository = None
self.bzrdir = remote_bzrdir
if _client is None:
- self._client = client._SmartClient(self.bzrdir._shared_medium)
+ self._client = remote_bzrdir._client
else:
self._client = _client
self._format = format
@@ -836,7 +835,7 @@
def _get_parent_map(self, keys):
"""Helper for get_parent_map that performs the RPC."""
- medium = self._client.get_smart_medium()
+ medium = self._client._medium
if not medium._remote_is_at_least_1_2:
# We already found out that the server can't understand
# Repository.get_parent_map requests, so just fetch the whole
@@ -1055,7 +1054,7 @@
return self._real_repository.has_signature_for_revision_id(revision_id)
def get_data_stream_for_search(self, search):
- medium = self._client.get_smart_medium()
+ medium = self._client._medium
if not medium._remote_is_at_least_1_2:
self._ensure_real()
return self._real_repository.get_data_stream_for_search(search)
@@ -1229,7 +1228,7 @@
if _client is not None:
self._client = _client
else:
- self._client = client._SmartClient(self.bzrdir._shared_medium)
+ self._client = remote_bzrdir._client
self.repository = remote_repository
if real_branch is not None:
self._real_branch = real_branch
=== modified file 'bzrlib/smart/client.py'
--- bzrlib/smart/client.py 2008-03-05 15:48:27 +0000
+++ bzrlib/smart/client.py 2008-03-28 08:05:51 +0000
@@ -23,15 +23,14 @@
class _SmartClient(object):
- def __init__(self, shared_connection):
+ def __init__(self, medium, base):
"""Constructor.
- :param shared_connection: a bzrlib.transport._SharedConnection
+ :param medium: a SmartClientMedium
+ :param base: a URL
"""
- self._shared_connection = shared_connection
-
- def get_smart_medium(self):
- return self._shared_connection.connection
+ self._medium = medium
+ self._base = base
def call(self, method, *args):
"""Call a method on the remote server."""
@@ -47,7 +46,7 @@
result, smart_protocol = smart_client.call_expecting_body(...)
body = smart_protocol.read_body_bytes()
"""
- request = self.get_smart_medium().get_request()
+ request = self._medium.get_request()
smart_protocol = protocol.SmartClientRequestProtocolTwo(request)
smart_protocol.call(method, *args)
return smart_protocol.read_response_tuple(expect_body=True), smart_protocol
@@ -61,7 +60,7 @@
raise TypeError('args must be byte strings, not %r' % (args,))
if type(body) is not str:
raise TypeError('body must be byte string, not %r' % (body,))
- request = self.get_smart_medium().get_request()
+ request = self._medium.get_request()
smart_protocol = protocol.SmartClientRequestProtocolOne(request)
smart_protocol.call_with_body_bytes((method, ) + args, body)
return smart_protocol.read_response_tuple()
@@ -75,7 +74,7 @@
raise TypeError('args must be byte strings, not %r' % (args,))
if type(body) is not str:
raise TypeError('body must be byte string, not %r' % (body,))
- request = self.get_smart_medium().get_request()
+ request = self._medium.get_request()
smart_protocol = protocol.SmartClientRequestProtocolTwo(request)
smart_protocol.call_with_body_bytes((method, ) + args, body)
return smart_protocol.read_response_tuple(expect_body=True), smart_protocol
@@ -87,11 +86,11 @@
anything but path, so it is only safe to use it in requests sent over
the medium from the matching transport.
"""
- base = self._shared_connection.base
+ base = self._base
if base.startswith('bzr+http://') or base.startswith('bzr+https://'):
- medium_base = self._shared_connection.base
+ medium_base = self._base
else:
- medium_base = urlutils.join(self._shared_connection.base, '/')
+ medium_base = urlutils.join(self._base, '/')
rel_url = urlutils.relative_url(medium_base, transport.base)
return urllib.unquote(rel_url)
=== modified file 'bzrlib/tests/test_remote.py'
--- bzrlib/tests/test_remote.py 2008-03-28 06:42:20 +0000
+++ bzrlib/tests/test_remote.py 2008-03-28 08:05:51 +0000
@@ -140,7 +140,7 @@
self.responses = responses
self._calls = []
self.expecting_body = False
- _SmartClient.__init__(self, FakeMedium(fake_medium_base, self._calls))
+ _SmartClient.__init__(self, FakeMedium(self._calls), fake_medium_base)
def call(self, method, *args):
self._calls.append(('call', method, args))
@@ -162,14 +162,6 @@
class FakeMedium(object):
- def __init__(self, base, client_calls):
- self.base = base
- self.connection = FakeConnection(client_calls)
- self._client_calls = client_calls
-
-
-class FakeConnection(object):
-
def __init__(self, client_calls):
self._remote_is_at_least_1_2 = True
self._client_calls = client_calls
=== modified file 'bzrlib/tests/test_smart_transport.py'
--- bzrlib/tests/test_smart_transport.py 2008-01-22 06:56:59 +0000
+++ bzrlib/tests/test_smart_transport.py 2008-03-28 08:05:51 +0000
@@ -2047,7 +2047,7 @@
input = StringIO("\n")
output = StringIO()
client_medium = medium.SmartSimplePipesClientMedium(input, output)
- smart_client = client._SmartClient(client_medium)
+ smart_client = client._SmartClient(client_medium, 'ignored base')
self.assertRaises(TypeError,
smart_client.call_with_body_bytes, method, args, body)
self.assertEqual("", output.getvalue())
=== modified file 'bzrlib/transport/__init__.py'
--- bzrlib/transport/__init__.py 2008-03-26 22:03:05 +0000
+++ bzrlib/transport/__init__.py 2008-03-28 08:58:43 +0000
@@ -626,6 +626,7 @@
"""
raise errors.NoSmartMedium(self)
+ @deprecated_method(one_four)
def get_shared_medium(self):
"""Return a smart client shared medium for this transport if possible.
=== modified file 'bzrlib/transport/remote.py'
--- bzrlib/transport/remote.py 2008-01-15 11:29:22 +0000
+++ bzrlib/transport/remote.py 2008-03-28 08:58:43 +0000
@@ -35,6 +35,7 @@
urlutils,
)
from bzrlib.smart import client, medium, protocol
+from bzrlib.symbol_versioning import (deprecated_method, one_four)
class _SmartStat(object):
@@ -104,9 +105,14 @@
self._shared_connection = transport._SharedConnection(medium,
credentials,
self.base)
+ else:
+ if medium is None:
+ # No medium was specified, so share the medium from the
+ # _from_transport.
+ medium = self._shared_connection.connection
if _client is None:
- self._client = client._SmartClient(self.get_shared_medium())
+ self._client = client._SmartClient(medium, self.base)
else:
self._client = _client
@@ -144,6 +150,7 @@
def get_smart_medium(self):
return self._get_connection()
+ @deprecated_method(one_four)
def get_shared_medium(self):
return self._get_shared_connection()
# Begin bundle
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
l4Jg3afPeA5DLkEun/i7kinChIP2z6XA
More information about the bazaar
mailing list