/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2999.1.1 by Ian Clatworthy
migrate switch command into the core - was in BzrTools
1
# Copyright (C) 2007 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
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
16
17
"""Tests for bzrlib.switch."""
18
19
20
import os
21
22
from bzrlib import branch, errors, switch, tests
23
24
25
class TestSwitch(tests.TestCaseWithTransport):
26
3078.2.2 by Ian Clatworthy
get switch tests passing on heavyweight checkouts
27
    def setUp(self):
28
        super(TestSwitch, self).setUp()
29
        self.lightweight = True
30
2999.1.3 by Ian Clatworthy
fix pending merge detection and test
31
    def _setup_tree(self):
2999.1.1 by Ian Clatworthy
migrate switch command into the core - was in BzrTools
32
        tree = self.make_branch_and_tree('branch-1')
33
        self.build_tree(['branch-1/file-1'])
34
        tree.add('file-1')
35
        tree.commit('rev1')
2999.1.3 by Ian Clatworthy
fix pending merge detection and test
36
        return tree
2999.1.1 by Ian Clatworthy
migrate switch command into the core - was in BzrTools
37
2999.1.3 by Ian Clatworthy
fix pending merge detection and test
38
    def test_switch_updates(self):
39
        """Test switch updates tree and keeps uncommitted changes."""
40
        tree = self._setup_tree()
2999.1.1 by Ian Clatworthy
migrate switch command into the core - was in BzrTools
41
        to_branch = tree.bzrdir.sprout('branch-2').open_branch()
42
        self.build_tree(['branch-1/file-2'])
43
        tree.add('file-2')
44
        tree.remove('file-1')
45
        tree.commit('rev2')
3078.2.2 by Ian Clatworthy
get switch tests passing on heavyweight checkouts
46
        checkout = tree.branch.create_checkout('checkout',
47
            lightweight=self.lightweight)
2999.1.1 by Ian Clatworthy
migrate switch command into the core - was in BzrTools
48
        self.build_tree(['checkout/file-3'])
49
        checkout.add('file-3')
50
        self.failIfExists('checkout/file-1')
51
        self.failUnlessExists('checkout/file-2')
52
        switch.switch(checkout.bzrdir, to_branch)
53
        self.failUnlessExists('checkout/file-1')
54
        self.failIfExists('checkout/file-2')
55
        self.failUnlessExists('checkout/file-3')
56
2999.1.3 by Ian Clatworthy
fix pending merge detection and test
57
    def test_switch_after_branch_moved(self):
58
        """Test switch after the branch is moved."""
59
        tree = self._setup_tree()
3078.2.2 by Ian Clatworthy
get switch tests passing on heavyweight checkouts
60
        checkout = tree.branch.create_checkout('checkout',
61
            lightweight=self.lightweight)
2999.1.3 by Ian Clatworthy
fix pending merge detection and test
62
        self.build_tree(['branch-1/file-2'])
63
        tree.add('file-2')
64
        tree.remove('file-1')
65
        tree.commit('rev2')
3044.1.4 by Martin Pool
Set default format to pack-0.92
66
        self.build_tree(['checkout/file-3'])
67
        checkout.add('file-3')
68
        checkout_dir = checkout.bzrdir
69
        # rename the branch on disk, the checkout object is now invalid.
2999.1.3 by Ian Clatworthy
fix pending merge detection and test
70
        os.rename('branch-1', 'branch-2')
71
        to_branch = branch.Branch.open('branch-2')
3078.2.5 by Ian Clatworthy
make switch fail without --force if branch missing
72
        # Check fails without --force
73
        err = self.assertRaises((errors.NotBranchError,
3078.2.6 by Ian Clatworthy
fix efficiency of local commit detection as recommended by jameinel's review
74
            errors.BoundBranchConnectionFailure),
3078.2.5 by Ian Clatworthy
make switch fail without --force if branch missing
75
            switch.switch, checkout.bzrdir, to_branch)
76
        switch.switch(checkout.bzrdir, to_branch, force=True)
2999.1.3 by Ian Clatworthy
fix pending merge detection and test
77
        self.failIfExists('checkout/file-1')
78
        self.failUnlessExists('checkout/file-2')
79
        self.failUnlessExists('checkout/file-3')
80
81
    def test_switch_when_pending_merges(self):
82
        """Test graceful failure if pending merges are outstanding."""
83
        # Create 2 branches and a checkout
84
        tree = self._setup_tree()
85
        tree2 = tree.bzrdir.sprout('branch-2').open_workingtree()
3078.2.2 by Ian Clatworthy
get switch tests passing on heavyweight checkouts
86
        checkout = tree.branch.create_checkout('checkout',
87
            lightweight=self.lightweight)
2999.1.3 by Ian Clatworthy
fix pending merge detection and test
88
        # Change tree2 and merge it into the checkout without committing
89
        self.build_tree(['branch-2/file-2'])
90
        tree2.add('file-2')
91
        tree2.commit('rev2')
92
        checkout.merge_from_branch(tree2.branch)
93
        # Check the error reporting is as expected
94
        err = self.assertRaises(errors.BzrCommandError,
95
            switch.switch, checkout.bzrdir, tree2.branch)
96
        self.assertContainsRe(str(err),
97
            "Pending merges must be committed or reverted before using switch")
3078.2.2 by Ian Clatworthy
get switch tests passing on heavyweight checkouts
98
3984.5.1 by Daniel Watkins
Added whitebox test.
99
    def test_switch_with_revision(self):
100
        """Test switch when a revision is given."""
101
        # Create a tree with 2 revisions
3984.5.3 by Daniel Watkins
Updated testcase.
102
        tree = self.make_branch_and_tree('branch-1')
103
        self.build_tree(['branch-1/file-1'])
104
        tree.add('file-1')
105
        tree.commit(rev_id='rev1', message='rev1')
3984.5.1 by Daniel Watkins
Added whitebox test.
106
        self.build_tree(['branch-1/file-2'])
107
        tree.add('file-2')
3984.5.3 by Daniel Watkins
Updated testcase.
108
        tree.commit(rev_id='rev2', message='rev2')
3984.5.1 by Daniel Watkins
Added whitebox test.
109
        # Check it out and switch to revision 1
110
        checkout = tree.branch.create_checkout('checkout',
111
                                               lightweight=self.lightweight)
112
        switch.switch(checkout.bzrdir, tree.branch, revision_id="rev1")
113
        self.failUnlessExists('checkout/file-1')
114
        self.failIfExists('checkout/file-2')
115
3078.2.2 by Ian Clatworthy
get switch tests passing on heavyweight checkouts
116
117
class TestSwitchHeavyweight(TestSwitch):
118
119
    def setUp(self):
120
        super(TestSwitchHeavyweight, self).setUp()
121
        self.lightweight = False
3078.2.4 by Ian Clatworthy
Add test for local commits handling
122
123
    def test_switch_with_local_commits(self):
124
        """Test switch complains about local commits unless --force given."""
125
        tree = self._setup_tree()
126
        to_branch = tree.bzrdir.sprout('branch-2').open_branch()
127
        self.build_tree(['branch-1/file-2'])
128
        tree.add('file-2')
129
        tree.remove('file-1')
130
        tree.commit('rev2')
131
        checkout = tree.branch.create_checkout('checkout')
132
        self.build_tree(['checkout/file-3'])
133
        checkout.add('file-3')
134
        checkout.commit(message='local only commit', local=True)
135
        self.build_tree(['checkout/file-4'])
136
        # Check the error reporting is as expected
137
        err = self.assertRaises(errors.BzrCommandError,
138
            switch.switch, checkout.bzrdir, to_branch)
139
        self.assertContainsRe(str(err),
140
            'Cannot switch as local commits found in the checkout.')
141
        # Check all is ok when force is given
142
        self.failIfExists('checkout/file-1')
143
        self.failUnlessExists('checkout/file-2')
144
        switch.switch(checkout.bzrdir, to_branch, force=True)
145
        self.failUnlessExists('checkout/file-1')
146
        self.failIfExists('checkout/file-2')
147
        self.failIfExists('checkout/file-3')
148
        self.failUnlessExists('checkout/file-4')
149
        # Check that the checkout is a true mirror of the bound branch
3445.2.1 by John Arbash Meinel
Add tests for Branch.missing_revisions and deprecate it.
150
        self.assertEqual(to_branch.last_revision_info(),
151
                         checkout.branch.last_revision_info())