/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/branch_implementations/test_push.py

  • Committer: Robert Collins
  • Date: 2009-02-25 00:31:09 UTC
  • mfrom: (4043 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4044.
  • Revision ID: robertc@robertcollins.net-20090225003109-9ngqolksoevjw5ay
Merge bzr.dev, adjust effort tests reducing the effort in line with the write_group avoidance.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
    debug,
27
27
    errors,
28
28
    push,
 
29
    repository,
29
30
    tests,
30
31
    )
31
32
from bzrlib.branch import Branch
33
34
from bzrlib.memorytree import MemoryTree
34
35
from bzrlib.revision import NULL_REVISION
35
36
from bzrlib.smart import client, server
 
37
from bzrlib.smart.repository import SmartServerRepositoryGetParentMap
36
38
from bzrlib.tests.branch_implementations.test_branch import TestCaseWithBranch
37
39
from bzrlib.transport import get_transport
38
40
from bzrlib.transport.local import LocalURLServer
224
226
        trunk.push(remote_branch)
225
227
        remote_branch.check()
226
228
 
 
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.")
 
240
        try:
 
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())
 
261
        local.push(remote)
 
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.
 
268
        self.assertEqual(
 
269
            ['Repository.insert_stream', 'Repository.insert_stream', 'get',
 
270
             'Branch.set_last_revision_info', 'Branch.unlock'],
 
271
            calls_after_insert_stream)
 
272
 
 
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]
 
279
        old_batch_sizes = []
 
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
 
285
        def reset_values():
 
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)
 
290
 
227
291
 
228
292
class TestPushHook(TestCaseWithBranch):
229
293