~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: John Arbash Meinel
  • Date: 2011-05-11 11:35:28 UTC
  • mto: This revision was merged to the branch mainline in revision 5851.
  • Revision ID: john@arbash-meinel.com-20110511113528-qepibuwxicjrbb2h
Break compatibility with python <2.6.

This includes auditing the code for places where we were doing
explicit 'sys.version' checks and removing them as appropriate.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007-2010 Canonical Ltd
 
1
# Copyright (C) 2007-2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
24
24
    builtins,
25
25
    bzrdir,
26
26
    check,
27
 
    debug,
28
27
    errors,
29
28
    memorytree,
30
29
    push,
31
 
    repository,
32
30
    revision,
 
31
    symbol_versioning,
33
32
    tests,
34
33
    transport,
35
34
    )
36
35
from bzrlib.smart import (
37
36
    client,
38
 
    server,
39
 
    repository as _mod_smart_repo,
40
37
    )
41
38
from bzrlib.tests import (
42
39
    per_branch,
61
58
        self.assertEqual(result.old_revid, 'M1')
62
59
        self.assertEqual(result.new_revid, 'P2')
63
60
        # and it can be treated as an integer for compatibility
64
 
        self.assertEqual(int(result), 0)
 
61
        self.assertEqual(self.applyDeprecated(
 
62
            symbol_versioning.deprecated_in((2, 3, 0)),
 
63
            result.__int__),
 
64
            0)
65
65
 
66
66
    def test_push_merged_indirect(self):
67
67
        # it should be possible to do a push from one branch into another
114
114
        self.assertRaises(errors.BoundBranchConnectionFailure,
115
115
                other.branch.push, checkout.branch)
116
116
 
 
117
    def test_push_new_tag_to_bound_branch(self):
 
118
        master = self.make_branch('master')
 
119
        bound = self.make_branch('bound')
 
120
        try:
 
121
            bound.bind(master)
 
122
        except errors.UpgradeRequired:
 
123
            raise tests.TestNotApplicable(
 
124
                'Format does not support bound branches')
 
125
        other = bound.bzrdir.sprout('other').open_branch()
 
126
        try:
 
127
            other.tags.set_tag('new-tag', 'some-rev')
 
128
        except errors.TagsNotSupported:
 
129
            raise tests.TestNotApplicable('Format does not support tags')
 
130
        other.push(bound)
 
131
        self.assertEqual({'new-tag': 'some-rev'}, bound.tags.get_tag_dict())
 
132
        self.assertEqual({'new-tag': 'some-rev'}, master.tags.get_tag_dict())
 
133
 
117
134
    def test_push_uses_read_lock(self):
118
135
        """Push should only need a read lock on the source side."""
119
136
        source = self.make_branch_and_tree('source')
170
187
        self.assertEqual(tree.branch.last_revision(),
171
188
                         to_branch.last_revision())
172
189
 
 
190
    def test_push_overwrite_with_older_mainline_rev(self):
 
191
        """Pushing an older mainline revision with overwrite.
 
192
 
 
193
        This was <https://bugs.launchpad.net/bzr/+bug/386576>.
 
194
        """
 
195
        source = self.make_branch_and_tree('source')
 
196
        target = self.make_branch('target')
 
197
 
 
198
        source.commit('1st commit')
 
199
        source.commit('2nd commit', rev_id='rev-2')
 
200
        source.commit('3rd commit')
 
201
        source.branch.push(target)
 
202
        source.branch.push(target, stop_revision='rev-2', overwrite=True)
 
203
        self.assertEqual('rev-2', target.last_revision())
 
204
 
173
205
    def test_push_overwrite_of_non_tip_with_stop_revision(self):
174
206
        """Combining the stop_revision and overwrite options works.
175
207
 
186
218
        source.branch.push(target, stop_revision='rev-2', overwrite=True)
187
219
        self.assertEqual('rev-2', target.last_revision())
188
220
 
 
221
    def test_push_repository_no_branch_doesnt_fetch_all_revs(self):
 
222
        # See https://bugs.launchpad.net/bzr/+bug/465517
 
223
        t = self.get_transport('target')
 
224
        t.ensure_base()
 
225
        bzrdir = self.bzrdir_format.initialize_on_transport(t)
 
226
        try:
 
227
            bzrdir.open_branch()
 
228
        except errors.NotBranchError:
 
229
            pass
 
230
        else:
 
231
            raise tests.TestNotApplicable('older formats can\'t have a repo'
 
232
                                          ' without a branch')
 
233
        try:
 
234
            source = self.make_branch_builder('source',
 
235
                                              format=self.bzrdir_format)
 
236
        except errors.UninitializableFormat:
 
237
            raise tests.TestNotApplicable('cannot initialize this format')
 
238
        source.start_series()
 
239
        source.build_snapshot('A', None, [
 
240
            ('add', ('', 'root-id', 'directory', None))])
 
241
        source.build_snapshot('B', ['A'], [])
 
242
        source.build_snapshot('C', ['A'], [])
 
243
        source.finish_series()
 
244
        b = source.get_branch()
 
245
        # Note: We can't read lock the source branch. Some formats take a write
 
246
        # lock to 'set_push_location', which breaks
 
247
        self.addCleanup(b.lock_write().unlock)
 
248
        repo = bzrdir.create_repository()
 
249
        # This means 'push the source branch into this dir'
 
250
        bzrdir.push_branch(b)
 
251
        self.addCleanup(repo.lock_read().unlock)
 
252
        # We should have pushed 'C', but not 'B', since it isn't in the
 
253
        # ancestry
 
254
        self.assertEqual([('A',), ('C',)], sorted(repo.revisions.keys()))
 
255
 
189
256
    def test_push_with_default_stacking_does_not_create_broken_branch(self):
190
257
        """Pushing a new standalone branch works even when there's a default
191
258
        stacking policy at the destination.
194
261
        default for the branch), and will be stacked when the repo format
195
262
        allows (which means that the branch format isn't necessarly preserved).
196
263
        """
197
 
        if isinstance(self.branch_format, branch.BzrBranchFormat4):
 
264
        if self.bzrdir_format.fixed_components:
198
265
            raise tests.TestNotApplicable('Not a metadir format.')
199
266
        if isinstance(self.branch_format, branch.BranchReferenceFormat):
200
267
            # This test could in principle apply to BranchReferenceFormat, but
335
402
            raise tests.TestNotApplicable(
336
403
                'Does not apply when remote backing branch is also '
337
404
                'a smart branch')
338
 
        if isinstance(self.branch_format, branch.BzrBranchFormat4):
 
405
        if not self.branch_format.supports_leaving_lock():
339
406
            raise tests.TestNotApplicable(
340
 
                'Branch format 4 is not usable via HPSS.')
 
407
                'Branch format is not usable via HPSS.')
341
408
        super(EmptyPushSmartEffortTests, self).setUp()
342
409
        # Create a smart server that publishes whatever the backing VFS server
343
410
        # does.