224
226
trunk.push(remote_branch)
225
227
remote_branch.check()
229
def test_no_get_parent_map_after_insert_stream(self):
230
# Effort test for bug 331823
231
self.setup_smart_server_with_call_log()
232
# Make a local branch with four revisions. Four revisions because:
233
# one to push, one there for _walk_to_common_revisions to find, one we
234
# don't want to access, one for luck :)
235
if isinstance(self.branch_format, branch.BranchReferenceFormat):
236
# This test could in principle apply to BranchReferenceFormat, but
237
# make_branch_builder doesn't support it.
238
raise tests.TestSkipped(
239
"BranchBuilder can't make reference branches.")
241
builder = self.make_branch_builder('local')
242
except (errors.TransportNotPossible, errors.UninitializableFormat):
243
raise tests.TestNotApplicable('format not directly constructable')
244
builder.start_series()
245
builder.build_snapshot('first', None, [
246
('add', ('', 'root-id', 'directory', ''))])
247
builder.build_snapshot('second', ['first'], [])
248
builder.build_snapshot('third', ['second'], [])
249
builder.build_snapshot('fourth', ['third'], [])
250
builder.finish_series()
251
local = builder.get_branch()
252
local = branch.Branch.open(self.get_vfs_only_url('local'))
253
# Initial push of three revisions
254
remote_bzrdir = local.bzrdir.sprout(
255
self.get_url('remote'), revision_id='third')
256
remote = remote_bzrdir.open_branch()
257
# Push fourth revision
258
self.reset_smart_call_log()
259
self.disableOptimisticGetParentMap()
260
self.assertFalse(local.is_locked())
262
hpss_call_names = [item[0].method for item in self.hpss_calls]
263
self.assertTrue('Repository.insert_stream' in hpss_call_names)
264
insert_stream_idx = hpss_call_names.index('Repository.insert_stream')
265
calls_after_insert_stream = hpss_call_names[insert_stream_idx:]
266
# After inserting the stream the client has no reason to query the
267
# remote graph any further.
269
['Repository.insert_stream', 'Repository.insert_stream', 'get',
270
'Branch.set_last_revision_info', 'Branch.unlock'],
271
calls_after_insert_stream)
273
def disableOptimisticGetParentMap(self):
274
# Tweak some class variables to stop remote get_parent_map calls asking
275
# for or receiving more data than the caller asked for.
276
old_flag = SmartServerRepositoryGetParentMap.no_extra_results
277
inter_classes = [repository.InterOtherToRemote,
278
repository.InterPackToRemotePack]
280
for inter_class in inter_classes:
281
old_batch_sizes.append(
282
inter_class._walk_to_common_revisions_batch_size)
283
inter_class._walk_to_common_revisions_batch_size = 1
284
SmartServerRepositoryGetParentMap.no_extra_results = True
286
SmartServerRepositoryGetParentMap.no_extra_results = old_flag
287
for inter_class, size in zip(inter_classes, old_batch_sizes):
288
inter_class._walk_to_common_revisions_batch_size = size
289
self.addCleanup(reset_values)
228
292
class TestPushHook(TestCaseWithBranch):