58
58
from bzrlib.repofmt import groupcompress_repo, pack_repo
59
59
from bzrlib.revision import NULL_REVISION
60
from bzrlib.smart import medium
60
from bzrlib.smart import medium, request
61
61
from bzrlib.smart.client import _SmartClient
62
from bzrlib.smart.repository import SmartServerRepositoryGetParentMap
62
from bzrlib.smart.repository import (
63
SmartServerRepositoryGetParentMap,
64
SmartServerRepositoryGetStream_1_19,
63
66
from bzrlib.tests import (
68
69
from bzrlib.tests.scenarios import load_tests_apply_scenarios
3183
3184
def test_copy_content_into_avoids_revision_history(self):
3184
3185
local = self.make_branch('local')
3185
remote_backing_tree = self.make_branch_and_tree('remote')
3186
remote_backing_tree.commit("Commit.")
3186
builder = self.make_branch_builder('remote')
3187
builder.build_commit(message="Commit.")
3187
3188
remote_branch_url = self.smart_server.get_url() + 'remote'
3188
3189
remote_branch = bzrdir.BzrDir.open(remote_branch_url).open_branch()
3189
3190
local.repository.fetch(remote_branch.repository)
3190
3191
self.hpss_calls = []
3191
3192
remote_branch.copy_content_into(local)
3192
3193
self.assertFalse('Branch.revision_history' in self.hpss_calls)
3195
def test_fetch_everything_needs_just_one_call(self):
3196
local = self.make_branch('local')
3197
builder = self.make_branch_builder('remote')
3198
builder.build_commit(message="Commit.")
3199
remote_branch_url = self.smart_server.get_url() + 'remote'
3200
remote_branch = bzrdir.BzrDir.open(remote_branch_url).open_branch()
3201
self.hpss_calls = []
3202
local.repository.fetch(remote_branch.repository,
3203
fetch_spec=graph.EverythingResult(remote_branch.repository))
3204
self.assertEqual(['Repository.get_stream_1.19'], self.hpss_calls)
3206
def override_verb(self, verb_name, verb):
3207
request_handlers = request.request_handlers
3208
orig_verb = request_handlers.get(verb_name)
3209
request_handlers.register(verb_name, verb, override_existing=True)
3210
self.addCleanup(request_handlers.register, verb_name, orig_verb,
3211
override_existing=True)
3213
def test_fetch_everything_backwards_compat(self):
3214
"""Can fetch with EverythingResult even with pre 2.3 servers.
3216
Pre-2.3 do not support 'everything' searches with the
3217
Repository.get_stream_1.19 verb.
3220
class OldGetStreamVerb(SmartServerRepositoryGetStream_1_19):
3221
"""A version of the Repository.get_stream_1.19 verb patched to
3222
reject 'everything' searches the way 2.2 and earlier do.
3224
def recreate_search(self, repository, search_bytes, discard_excess=False):
3225
verb_log.append(search_bytes.split('\n', 1)[0])
3226
if search_bytes == 'everything':
3227
return (None, request.FailedSmartServerResponse(('BadSearch',)))
3228
return super(OldGetStreamVerb,
3229
self).recreate_search(repository, search_bytes,
3230
discard_excess=discard_excess)
3231
self.override_verb('Repository.get_stream_1.19', OldGetStreamVerb)
3232
local = self.make_branch('local')
3233
builder = self.make_branch_builder('remote')
3234
builder.build_commit(message="Commit.")
3235
remote_branch_url = self.smart_server.get_url() + 'remote'
3236
remote_branch = bzrdir.BzrDir.open(remote_branch_url).open_branch()
3237
self.hpss_calls = []
3238
local.repository.fetch(remote_branch.repository,
3239
fetch_spec=graph.EverythingResult(remote_branch.repository))
3240
# make sure the overridden verb was used
3241
self.assertLength(1, verb_log)
3242
# more than one HPSS call is needed, but because it's a VFS callback
3243
# its hard to predict exactly how many.
3244
self.assertTrue(len(self.hpss_calls) > 1)