~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_switch.py

(vila) Open 2.4.3 for bug fixes (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007 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
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""Tests for bzrlib.switch."""
18
18
 
19
19
 
20
20
import os
21
21
 
22
 
from bzrlib import branch, errors, switch, tests
 
22
from bzrlib import (
 
23
    branch,
 
24
    errors,
 
25
    merge as _mod_merge,
 
26
    switch,
 
27
    tests,
 
28
    )
23
29
 
24
30
 
25
31
class TestSwitch(tests.TestCaseWithTransport):
47
53
            lightweight=self.lightweight)
48
54
        self.build_tree(['checkout/file-3'])
49
55
        checkout.add('file-3')
50
 
        self.failIfExists('checkout/file-1')
51
 
        self.failUnlessExists('checkout/file-2')
 
56
        self.assertPathDoesNotExist('checkout/file-1')
 
57
        self.assertPathExists('checkout/file-2')
52
58
        switch.switch(checkout.bzrdir, to_branch)
53
 
        self.failUnlessExists('checkout/file-1')
54
 
        self.failIfExists('checkout/file-2')
55
 
        self.failUnlessExists('checkout/file-3')
 
59
        self.assertPathExists('checkout/file-1')
 
60
        self.assertPathDoesNotExist('checkout/file-2')
 
61
        self.assertPathExists('checkout/file-3')
56
62
 
57
63
    def test_switch_after_branch_moved(self):
58
64
        """Test switch after the branch is moved."""
70
76
        os.rename('branch-1', 'branch-2')
71
77
        to_branch = branch.Branch.open('branch-2')
72
78
        # Check fails without --force
73
 
        err = self.assertRaises((errors.NotBranchError,
74
 
            errors.BoundBranchConnectionFailure),
 
79
        err = self.assertRaises(
 
80
            (errors.BzrCommandError, errors.NotBranchError),
75
81
            switch.switch, checkout.bzrdir, to_branch)
 
82
        if isinstance(err, errors.BzrCommandError):
 
83
            self.assertContainsRe(str(err),
 
84
                'Unable to connect to current master branch .*'
 
85
                'To switch anyway, use --force.')
76
86
        switch.switch(checkout.bzrdir, to_branch, force=True)
77
 
        self.failIfExists('checkout/file-1')
78
 
        self.failUnlessExists('checkout/file-2')
79
 
        self.failUnlessExists('checkout/file-3')
 
87
        self.assertPathDoesNotExist('checkout/file-1')
 
88
        self.assertPathExists('checkout/file-2')
 
89
        self.assertPathExists('checkout/file-3')
80
90
 
81
91
    def test_switch_when_pending_merges(self):
82
92
        """Test graceful failure if pending merges are outstanding."""
96
106
        self.assertContainsRe(str(err),
97
107
            "Pending merges must be committed or reverted before using switch")
98
108
 
 
109
    def test_switch_with_revision(self):
 
110
        """Test switch when a revision is given."""
 
111
        # Create a tree with 2 revisions
 
112
        tree = self.make_branch_and_tree('branch-1')
 
113
        self.build_tree(['branch-1/file-1'])
 
114
        tree.add('file-1')
 
115
        tree.commit(rev_id='rev1', message='rev1')
 
116
        self.build_tree(['branch-1/file-2'])
 
117
        tree.add('file-2')
 
118
        tree.commit(rev_id='rev2', message='rev2')
 
119
        # Check it out and switch to revision 1
 
120
        checkout = tree.branch.create_checkout('checkout',
 
121
            lightweight=self.lightweight)
 
122
        switch.switch(checkout.bzrdir, tree.branch, revision_id="rev1")
 
123
        self.assertPathExists('checkout/file-1')
 
124
        self.assertPathDoesNotExist('checkout/file-2')
 
125
 
 
126
    def test_switch_changing_root_id(self):
 
127
        tree = self._setup_tree()
 
128
        tree2 = self.make_branch_and_tree('tree-2')
 
129
        tree2.set_root_id('custom-root-id')
 
130
        self.build_tree(['tree-2/file-2'])
 
131
        tree2.add(['file-2'])
 
132
        tree2.commit('rev1b')
 
133
        checkout = tree.branch.create_checkout('checkout',
 
134
            lightweight=self.lightweight)
 
135
        switch.switch(checkout.bzrdir, tree2.branch)
 
136
        self.assertEqual('custom-root-id', tree2.get_root_id())
 
137
 
 
138
    def test_switch_configurable_file_merger(self):
 
139
        class DummyMerger(_mod_merge.ConfigurableFileMerger):
 
140
            name_prefix = 'file'
 
141
 
 
142
        _mod_merge.Merger.hooks.install_named_hook(
 
143
            'merge_file_content', DummyMerger,
 
144
            'test factory')
 
145
        foo = self.make_branch('foo')
 
146
        checkout = foo.create_checkout('checkout', lightweight=True)
 
147
        self.build_tree_contents([('checkout/file', 'a')])
 
148
        checkout.add('file')
 
149
        checkout.commit('a')
 
150
        bar = foo.bzrdir.sprout('bar').open_workingtree()
 
151
        self.build_tree_contents([('bar/file', 'b')])
 
152
        bar.commit('b')
 
153
        self.build_tree_contents([('checkout/file', 'c')])
 
154
        switch.switch(checkout.bzrdir, bar.branch)
 
155
 
99
156
 
100
157
class TestSwitchHeavyweight(TestSwitch):
101
158
 
122
179
        self.assertContainsRe(str(err),
123
180
            'Cannot switch as local commits found in the checkout.')
124
181
        # Check all is ok when force is given
125
 
        self.failIfExists('checkout/file-1')
126
 
        self.failUnlessExists('checkout/file-2')
 
182
        self.assertPathDoesNotExist('checkout/file-1')
 
183
        self.assertPathExists('checkout/file-2')
127
184
        switch.switch(checkout.bzrdir, to_branch, force=True)
128
 
        self.failUnlessExists('checkout/file-1')
129
 
        self.failIfExists('checkout/file-2')
130
 
        self.failIfExists('checkout/file-3')
131
 
        self.failUnlessExists('checkout/file-4')
 
185
        self.assertPathExists('checkout/file-1')
 
186
        self.assertPathDoesNotExist('checkout/file-2')
 
187
        self.assertPathDoesNotExist('checkout/file-3')
 
188
        self.assertPathExists('checkout/file-4')
132
189
        # Check that the checkout is a true mirror of the bound branch
133
190
        self.assertEqual(to_branch.last_revision_info(),
134
191
                         checkout.branch.last_revision_info())