/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/blackbox/test_update.py

  • Committer: John Arbash Meinel
  • Date: 2009-12-22 16:28:47 UTC
  • mto: This revision was merged to the branch mainline in revision 4922.
  • Revision ID: john@arbash-meinel.com-20091222162847-tvnsc69to4l4uf5r
Implement a permute_for_extension helper.

Use it for all of the 'simple' extension permutations.
It basically permutes all tests in the current module, by setting TestCase.module.
Which works well for most of our extension tests. Some had more advanced
handling of permutations (extra permutations, custom vars, etc.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2006 Canonical Ltd
 
2
# -*- coding: utf-8 -*-
 
3
#
 
4
# This program is free software; you can redistribute it and/or modify
 
5
# it under the terms of the GNU General Public License as published by
 
6
# the Free Software Foundation; either version 2 of the License, or
 
7
# (at your option) any later version.
 
8
#
 
9
# This program is distributed in the hope that it will be useful,
 
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
# GNU General Public License for more details.
 
13
#
 
14
# You should have received a copy of the GNU General Public License
 
15
# along with this program; if not, write to the Free Software
 
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
17
 
 
18
 
 
19
"""Tests for the update command of bzr."""
 
20
 
 
21
import os
 
22
import re
 
23
 
 
24
from bzrlib import (
 
25
    branch,
 
26
    bzrdir,
 
27
    osutils,
 
28
    tests,
 
29
    urlutils,
 
30
    workingtree,
 
31
    )
 
32
 
 
33
 
 
34
class TestUpdate(tests.TestCaseWithTransport):
 
35
 
 
36
    def test_update_standalone_trivial(self):
 
37
        self.make_branch_and_tree('.')
 
38
        out, err = self.run_bzr('update')
 
39
        self.assertEqual(
 
40
            'Tree is up to date at revision 0 of branch %s\n' % self.test_dir,
 
41
            err)
 
42
        self.assertEqual('', out)
 
43
 
 
44
    def test_update_quiet(self):
 
45
        self.make_branch_and_tree('.')
 
46
        out, err = self.run_bzr('update --quiet')
 
47
        self.assertEqual('', err)
 
48
        self.assertEqual('', out)
 
49
 
 
50
    def test_update_standalone_trivial_with_alias_up(self):
 
51
        self.make_branch_and_tree('.')
 
52
        out, err = self.run_bzr('up')
 
53
        self.assertEqual('Tree is up to date at revision 0 of branch %s\n'
 
54
                         % self.test_dir,
 
55
                         err)
 
56
        self.assertEqual('', out)
 
57
 
 
58
    def test_update_up_to_date_light_checkout(self):
 
59
        self.make_branch_and_tree('branch')
 
60
        self.run_bzr('checkout --lightweight branch checkout')
 
61
        out, err = self.run_bzr('update checkout')
 
62
        self.assertEqual('Tree is up to date at revision 0 of branch %s\n'
 
63
                         % osutils.pathjoin(self.test_dir, 'branch'),
 
64
                         err)
 
65
        self.assertEqual('', out)
 
66
 
 
67
    def test_update_up_to_date_checkout(self):
 
68
        self.make_branch_and_tree('branch')
 
69
        self.run_bzr('checkout branch checkout')
 
70
        out, err = self.run_bzr('update checkout')
 
71
        self.assertEqual('Tree is up to date at revision 0 of branch %s\n'
 
72
                         % osutils.pathjoin(self.test_dir, 'branch'),
 
73
                         err)
 
74
        self.assertEqual('', out)
 
75
 
 
76
    def test_update_out_of_date_standalone_tree(self):
 
77
        # FIXME the default format has to change for this to pass
 
78
        # because it currently uses the branch last-revision marker.
 
79
        self.make_branch_and_tree('branch')
 
80
        # make a checkout
 
81
        self.run_bzr('checkout --lightweight branch checkout')
 
82
        self.build_tree(['checkout/file'])
 
83
        self.run_bzr('add checkout/file')
 
84
        self.run_bzr('commit -m add-file checkout')
 
85
        # now branch should be out of date
 
86
        out,err = self.run_bzr('update branch')
 
87
        self.assertEqual('', out)
 
88
        self.assertEqualDiff("""+N  file
 
89
All changes applied successfully.
 
90
Updated to revision 1 of branch %s
 
91
""" % osutils.pathjoin(self.test_dir, 'branch',),
 
92
                         err)
 
93
        self.failUnlessExists('branch/file')
 
94
 
 
95
    def test_update_out_of_date_light_checkout(self):
 
96
        self.make_branch_and_tree('branch')
 
97
        # make two checkouts
 
98
        self.run_bzr('checkout --lightweight branch checkout')
 
99
        self.run_bzr('checkout --lightweight branch checkout2')
 
100
        self.build_tree(['checkout/file'])
 
101
        self.run_bzr('add checkout/file')
 
102
        self.run_bzr('commit -m add-file checkout')
 
103
        # now checkout2 should be out of date
 
104
        out,err = self.run_bzr('update checkout2')
 
105
        self.assertEqualDiff('''+N  file
 
106
All changes applied successfully.
 
107
Updated to revision 1 of branch %s
 
108
''' % osutils.pathjoin(self.test_dir, 'branch',),
 
109
                         err)
 
110
        self.assertEqual('', out)
 
111
 
 
112
    def test_update_conflicts_returns_2(self):
 
113
        self.make_branch_and_tree('branch')
 
114
        # make two checkouts
 
115
        self.run_bzr('checkout --lightweight branch checkout')
 
116
        self.build_tree(['checkout/file'])
 
117
        self.run_bzr('add checkout/file')
 
118
        self.run_bzr('commit -m add-file checkout')
 
119
        self.run_bzr('checkout --lightweight branch checkout2')
 
120
        # now alter file in checkout
 
121
        a_file = file('checkout/file', 'wt')
 
122
        a_file.write('Foo')
 
123
        a_file.close()
 
124
        self.run_bzr('commit -m checnge-file checkout')
 
125
        # now checkout2 should be out of date
 
126
        # make a local change to file
 
127
        a_file = file('checkout2/file', 'wt')
 
128
        a_file.write('Bar')
 
129
        a_file.close()
 
130
        out,err = self.run_bzr('update checkout2', retcode=1)
 
131
        self.assertEqualDiff(''' M  file
 
132
Text conflict in file
 
133
1 conflicts encountered.
 
134
Updated to revision 2 of branch %s
 
135
''' % osutils.pathjoin(self.test_dir, 'branch',),
 
136
                         err)
 
137
        self.assertEqual('', out)
 
138
 
 
139
    def test_smoke_update_checkout_bound_branch_local_commits(self):
 
140
        # smoke test for doing an update of a checkout of a bound
 
141
        # branch with local commits.
 
142
        master = self.make_branch_and_tree('master')
 
143
        # make a bound branch
 
144
        self.run_bzr('checkout master child')
 
145
        # get an object form of child
 
146
        child = workingtree.WorkingTree.open('child')
 
147
        # check that out
 
148
        self.run_bzr('checkout --lightweight child checkout')
 
149
        # get an object form of the checkout to manipulate
 
150
        wt = workingtree.WorkingTree.open('checkout')
 
151
        # change master
 
152
        a_file = file('master/file', 'wt')
 
153
        a_file.write('Foo')
 
154
        a_file.close()
 
155
        master.add(['file'])
 
156
        master_tip = master.commit('add file')
 
157
        # change child
 
158
        a_file = file('child/file_b', 'wt')
 
159
        a_file.write('Foo')
 
160
        a_file.close()
 
161
        child.add(['file_b'])
 
162
        child_tip = child.commit('add file_b', local=True)
 
163
        # check checkout
 
164
        a_file = file('checkout/file_c', 'wt')
 
165
        a_file.write('Foo')
 
166
        a_file.close()
 
167
        wt.add(['file_c'])
 
168
 
 
169
        # now, update checkout ->
 
170
        # get all three files and a pending merge.
 
171
        out, err = self.run_bzr('update checkout')
 
172
        self.assertEqual('', out)
 
173
        self.assertEqualDiff("""+N  file
 
174
All changes applied successfully.
 
175
+N  file_b
 
176
All changes applied successfully.
 
177
Updated to revision 1 of branch %s
 
178
Your local commits will now show as pending merges with 'bzr status', and can be committed with 'bzr commit'.
 
179
""" % osutils.pathjoin(self.test_dir, 'master',),
 
180
                         err)
 
181
        self.assertEqual([master_tip, child_tip], wt.get_parent_ids())
 
182
        self.failUnlessExists('checkout/file')
 
183
        self.failUnlessExists('checkout/file_b')
 
184
        self.failUnlessExists('checkout/file_c')
 
185
        self.assertTrue(wt.has_filename('file_c'))
 
186
 
 
187
    def test_update_with_merges(self):
 
188
        # Test that 'bzr update' works correctly when you have
 
189
        # an update in the master tree, and a lightweight checkout
 
190
        # which has merged another branch
 
191
        master = self.make_branch_and_tree('master')
 
192
        self.build_tree(['master/file'])
 
193
        master.add(['file'])
 
194
        master.commit('one', rev_id='m1')
 
195
 
 
196
        self.build_tree(['checkout1/'])
 
197
        checkout_dir = bzrdir.BzrDirMetaFormat1().initialize('checkout1')
 
198
        branch.BranchReferenceFormat().initialize(checkout_dir, master.branch)
 
199
        checkout1 = checkout_dir.create_workingtree('m1')
 
200
 
 
201
        # Create a second branch, with an extra commit
 
202
        other = master.bzrdir.sprout('other').open_workingtree()
 
203
        self.build_tree(['other/file2'])
 
204
        other.add(['file2'])
 
205
        other.commit('other2', rev_id='o2')
 
206
 
 
207
        # Create a new commit in the master branch
 
208
        self.build_tree(['master/file3'])
 
209
        master.add(['file3'])
 
210
        master.commit('f3', rev_id='m2')
 
211
 
 
212
        # Merge the other branch into checkout
 
213
        os.chdir('checkout1')
 
214
        self.run_bzr('merge ../other')
 
215
 
 
216
        self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])
 
217
 
 
218
        # At this point, 'commit' should fail, because we are out of date
 
219
        self.run_bzr_error(["please run 'bzr update'"],
 
220
                           'commit -m merged')
 
221
 
 
222
        # This should not report about local commits being pending
 
223
        # merges, because they were real merges
 
224
        out, err = self.run_bzr('update')
 
225
        self.assertEqual('', out)
 
226
        self.assertEqualDiff('''+N  file3
 
227
All changes applied successfully.
 
228
Updated to revision 2 of branch %s
 
229
''' % osutils.pathjoin(self.test_dir, 'master',),
 
230
                         err)
 
231
        # The pending merges should still be there
 
232
        self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])
 
233
 
 
234
    def test_readonly_lightweight_update(self):
 
235
        """Update a light checkout of a readonly branch"""
 
236
        tree = self.make_branch_and_tree('branch')
 
237
        readonly_branch = branch.Branch.open(self.get_readonly_url('branch'))
 
238
        checkout = readonly_branch.create_checkout('checkout',
 
239
                                                   lightweight=True)
 
240
        tree.commit('empty commit')
 
241
        self.run_bzr('update checkout')