~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_switch.py

(vila) Fix bzrlib.tests.test_gpg.TestVerify.test_verify_revoked_signature
 with recent versions of gpg. (Vincent Ladeuil)

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
22
22
from bzrlib import (
23
23
    branch,
24
24
    errors,
 
25
    lock,
25
26
    merge as _mod_merge,
26
27
    switch,
27
28
    tests,
28
 
)
 
29
    workingtree,
 
30
    )
29
31
 
30
32
 
31
33
class TestSwitch(tests.TestCaseWithTransport):
34
36
        super(TestSwitch, self).setUp()
35
37
        self.lightweight = True
36
38
 
 
39
    @staticmethod
 
40
    def _master_if_present(branch):
 
41
        master = branch.get_master_branch()
 
42
        if master:
 
43
            return master
 
44
        else:
 
45
            return branch
 
46
 
37
47
    def _setup_tree(self):
38
48
        tree = self.make_branch_and_tree('branch-1')
39
49
        self.build_tree(['branch-1/file-1'])
41
51
        tree.commit('rev1')
42
52
        return tree
43
53
 
 
54
    def _setup_uncommitted(self, same_revision=False):
 
55
        tree = self._setup_tree()
 
56
        to_branch = tree.bzrdir.sprout('branch-2').open_branch()
 
57
        self.build_tree(['branch-1/file-2'])
 
58
        if not same_revision:
 
59
            tree.add('file-2')
 
60
            tree.remove('file-1')
 
61
            tree.commit('rev2')
 
62
        checkout = tree.branch.create_checkout('checkout',
 
63
            lightweight=self.lightweight)
 
64
        self.build_tree(['checkout/file-3'])
 
65
        checkout.add('file-3')
 
66
        return checkout, to_branch
 
67
 
 
68
    def test_switch_store_uncommitted(self):
 
69
        """Test switch updates tree and stores uncommitted changes."""
 
70
        checkout, to_branch = self._setup_uncommitted()
 
71
        self.assertPathDoesNotExist('checkout/file-1')
 
72
        self.assertPathExists('checkout/file-2')
 
73
        switch.switch(checkout.bzrdir, to_branch, store_uncommitted=True)
 
74
        self.assertPathExists('checkout/file-1')
 
75
        self.assertPathDoesNotExist('checkout/file-2')
 
76
        self.assertPathDoesNotExist('checkout/file-3')
 
77
 
 
78
    def test_switch_restore_uncommitted(self):
 
79
        """Test switch updates tree and restores uncommitted changes."""
 
80
        checkout, to_branch = self._setup_uncommitted()
 
81
        old_branch = self._master_if_present(checkout.branch)
 
82
        self.assertPathDoesNotExist('checkout/file-1')
 
83
        self.assertPathExists('checkout/file-2')
 
84
        self.assertPathExists('checkout/file-3')
 
85
        switch.switch(checkout.bzrdir, to_branch, store_uncommitted=True)
 
86
        checkout = workingtree.WorkingTree.open('checkout')
 
87
        switch.switch(checkout.bzrdir, old_branch, store_uncommitted=True)
 
88
        self.assertPathDoesNotExist('checkout/file-1')
 
89
        self.assertPathExists('checkout/file-2')
 
90
        self.assertPathExists('checkout/file-3')
 
91
 
 
92
    def test_switch_restore_uncommitted_same_revision(self):
 
93
        """Test switch updates tree and restores uncommitted changes."""
 
94
        checkout, to_branch = self._setup_uncommitted(same_revision=True)
 
95
        old_branch = self._master_if_present(checkout.branch)
 
96
        switch.switch(checkout.bzrdir, to_branch, store_uncommitted=True)
 
97
        checkout = workingtree.WorkingTree.open('checkout')
 
98
        switch.switch(checkout.bzrdir, old_branch, store_uncommitted=True)
 
99
        self.assertPathExists('checkout/file-3')
 
100
 
44
101
    def test_switch_updates(self):
45
102
        """Test switch updates tree and keeps uncommitted changes."""
46
 
        tree = self._setup_tree()
47
 
        to_branch = tree.bzrdir.sprout('branch-2').open_branch()
48
 
        self.build_tree(['branch-1/file-2'])
49
 
        tree.add('file-2')
50
 
        tree.remove('file-1')
51
 
        tree.commit('rev2')
52
 
        checkout = tree.branch.create_checkout('checkout',
53
 
            lightweight=self.lightweight)
54
 
        self.build_tree(['checkout/file-3'])
55
 
        checkout.add('file-3')
56
 
        self.failIfExists('checkout/file-1')
57
 
        self.failUnlessExists('checkout/file-2')
 
103
        checkout, to_branch = self._setup_uncommitted()
 
104
        self.assertPathDoesNotExist('checkout/file-1')
 
105
        self.assertPathExists('checkout/file-2')
58
106
        switch.switch(checkout.bzrdir, to_branch)
59
 
        self.failUnlessExists('checkout/file-1')
60
 
        self.failIfExists('checkout/file-2')
61
 
        self.failUnlessExists('checkout/file-3')
 
107
        self.assertPathExists('checkout/file-1')
 
108
        self.assertPathDoesNotExist('checkout/file-2')
 
109
        self.assertPathExists('checkout/file-3')
62
110
 
63
111
    def test_switch_after_branch_moved(self):
64
112
        """Test switch after the branch is moved."""
84
132
                'Unable to connect to current master branch .*'
85
133
                'To switch anyway, use --force.')
86
134
        switch.switch(checkout.bzrdir, to_branch, force=True)
87
 
        self.failIfExists('checkout/file-1')
88
 
        self.failUnlessExists('checkout/file-2')
89
 
        self.failUnlessExists('checkout/file-3')
 
135
        self.assertPathDoesNotExist('checkout/file-1')
 
136
        self.assertPathExists('checkout/file-2')
 
137
        self.assertPathExists('checkout/file-3')
90
138
 
91
139
    def test_switch_when_pending_merges(self):
92
140
        """Test graceful failure if pending merges are outstanding."""
120
168
        checkout = tree.branch.create_checkout('checkout',
121
169
            lightweight=self.lightweight)
122
170
        switch.switch(checkout.bzrdir, tree.branch, revision_id="rev1")
123
 
        self.failUnlessExists('checkout/file-1')
124
 
        self.failIfExists('checkout/file-2')
 
171
        self.assertPathExists('checkout/file-1')
 
172
        self.assertPathDoesNotExist('checkout/file-2')
125
173
 
126
174
    def test_switch_changing_root_id(self):
127
175
        tree = self._setup_tree()
179
227
        self.assertContainsRe(str(err),
180
228
            'Cannot switch as local commits found in the checkout.')
181
229
        # Check all is ok when force is given
182
 
        self.failIfExists('checkout/file-1')
183
 
        self.failUnlessExists('checkout/file-2')
 
230
        self.assertPathDoesNotExist('checkout/file-1')
 
231
        self.assertPathExists('checkout/file-2')
184
232
        switch.switch(checkout.bzrdir, to_branch, force=True)
185
 
        self.failUnlessExists('checkout/file-1')
186
 
        self.failIfExists('checkout/file-2')
187
 
        self.failIfExists('checkout/file-3')
188
 
        self.failUnlessExists('checkout/file-4')
 
233
        self.assertPathExists('checkout/file-1')
 
234
        self.assertPathDoesNotExist('checkout/file-2')
 
235
        self.assertPathDoesNotExist('checkout/file-3')
 
236
        self.assertPathExists('checkout/file-4')
189
237
        # Check that the checkout is a true mirror of the bound branch
190
238
        self.assertEqual(to_branch.last_revision_info(),
191
239
                         checkout.branch.last_revision_info())