14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
19
"""Tests for the update command of bzr."""
23
from bzrlib import branch, bzrdir
24
from bzrlib.tests import TestSkipped
25
from bzrlib.tests.blackbox import ExternalBase
26
from bzrlib.workingtree import WorkingTree
29
class TestUpdate(ExternalBase):
32
from bzrlib.tests.script import ScriptRunner
35
class TestUpdate(tests.TestCaseWithTransport):
31
37
def test_update_standalone_trivial(self):
32
38
self.make_branch_and_tree('.')
33
39
out, err = self.run_bzr('update')
34
self.assertEqual('Tree is up to date at revision 0.\n', err)
41
'Tree is up to date at revision 0 of branch %s\n' % self.test_dir,
43
self.assertEqual('', out)
45
def test_update_quiet(self):
46
self.make_branch_and_tree('.')
47
out, err = self.run_bzr('update --quiet')
48
self.assertEqual('', err)
35
49
self.assertEqual('', out)
37
51
def test_update_standalone_trivial_with_alias_up(self):
38
52
self.make_branch_and_tree('.')
39
53
out, err = self.run_bzr('up')
40
self.assertEqual('Tree is up to date at revision 0.\n', err)
54
self.assertEqual('Tree is up to date at revision 0 of branch %s\n'
41
57
self.assertEqual('', out)
43
59
def test_update_up_to_date_light_checkout(self):
44
60
self.make_branch_and_tree('branch')
45
61
self.run_bzr('checkout --lightweight branch checkout')
46
62
out, err = self.run_bzr('update checkout')
47
self.assertEqual('Tree is up to date at revision 0.\n', err)
63
self.assertEqual('Tree is up to date at revision 0 of branch %s\n'
64
% osutils.pathjoin(self.test_dir, 'branch'),
48
66
self.assertEqual('', out)
50
68
def test_update_up_to_date_checkout(self):
51
69
self.make_branch_and_tree('branch')
52
70
self.run_bzr('checkout branch checkout')
53
out, err = self.run_bzr('update checkout')
54
self.assertEqual('Tree is up to date at revision 0.\n', err)
55
self.assertEqual('', out)
72
sr.run_script(self, '''
74
2>Tree is up to date at revision 0 of branch .../branch
57
77
def test_update_out_of_date_standalone_tree(self):
58
78
# FIXME the default format has to change for this to pass
66
86
# now branch should be out of date
67
87
out,err = self.run_bzr('update branch')
68
88
self.assertEqual('', out)
69
self.assertContainsRe(err, '\+N file')
70
self.assertEndsWith(err, 'All changes applied successfully.\n'
71
'Updated to revision 1.\n')
89
self.assertEqualDiff("""+N file
90
All changes applied successfully.
91
Updated to revision 1 of branch %s
92
""" % osutils.pathjoin(self.test_dir, 'branch',),
72
94
self.failUnlessExists('branch/file')
74
96
def test_update_out_of_date_light_checkout(self):
81
103
self.run_bzr('commit -m add-file checkout')
82
104
# now checkout2 should be out of date
83
105
out,err = self.run_bzr('update checkout2')
84
self.assertContainsRe(err, '\+N file')
85
self.assertEndsWith(err, 'All changes applied successfully.\n'
86
'Updated to revision 1.\n')
106
self.assertEqualDiff('''+N file
107
All changes applied successfully.
108
Updated to revision 1 of branch %s
109
''' % osutils.pathjoin(self.test_dir, 'branch',),
87
111
self.assertEqual('', out)
89
113
def test_update_conflicts_returns_2(self):
105
129
a_file.write('Bar')
107
131
out,err = self.run_bzr('update checkout2', retcode=1)
108
self.assertContainsRe(err, 'M file')
109
self.assertEqual(['1 conflicts encountered.',
110
'Updated to revision 2.'],
111
err.split('\n')[-3:-1])
112
self.assertContainsRe(err, 'Text conflict in file\n')
132
self.assertEqualDiff(''' M file
133
Text conflict in file
134
1 conflicts encountered.
135
Updated to revision 2 of branch %s
136
''' % osutils.pathjoin(self.test_dir, 'branch',),
113
138
self.assertEqual('', out)
115
140
def test_smoke_update_checkout_bound_branch_local_commits(self):
119
144
# make a bound branch
120
145
self.run_bzr('checkout master child')
121
146
# get an object form of child
122
child = WorkingTree.open('child')
147
child = workingtree.WorkingTree.open('child')
124
149
self.run_bzr('checkout --lightweight child checkout')
125
150
# get an object form of the checkout to manipulate
126
wt = WorkingTree.open('checkout')
151
wt = workingtree.WorkingTree.open('checkout')
128
153
a_file = file('master/file', 'wt')
129
154
a_file.write('Foo')
146
171
# get all three files and a pending merge.
147
172
out, err = self.run_bzr('update checkout')
148
173
self.assertEqual('', out)
149
self.assertContainsRe(err, '\+N file')
150
self.assertContainsRe(err, '\+N file_b')
151
self.assertContainsRe(err, 'Updated to revision 1.\n'
152
'Your local commits will now show as'
174
self.assertEqualDiff("""+N file
175
All changes applied successfully.
177
All changes applied successfully.
178
Updated to revision 1 of branch %s
179
Your local commits will now show as pending merges with 'bzr status', and can be committed with 'bzr commit'.
180
""" % osutils.pathjoin(self.test_dir, 'master',),
154
182
self.assertEqual([master_tip, child_tip], wt.get_parent_ids())
155
183
self.failUnlessExists('checkout/file')
156
184
self.failUnlessExists('checkout/file_b')
196
224
# merges, because they were real merges
197
225
out, err = self.run_bzr('update')
198
226
self.assertEqual('', out)
199
self.assertEndsWith(err, 'All changes applied successfully.\n'
200
'Updated to revision 2.\n')
201
self.assertContainsRe(err, r'\+N file3')
227
self.assertEqualDiff('''+N file3
228
All changes applied successfully.
229
Updated to revision 2 of branch %s
230
''' % osutils.pathjoin(self.test_dir, 'master',),
202
232
# The pending merges should still be there
203
233
self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])
210
240
lightweight=True)
211
241
tree.commit('empty commit')
212
242
self.run_bzr('update checkout')
244
def test_update_dash_r(self):
245
# Test that 'bzr update' works correctly when you have
246
# an update in the master tree, and a lightweight checkout
247
# which has merged another branch
248
master = self.make_branch_and_tree('master')
250
self.build_tree(['./file1'])
251
master.add(['file1'])
252
master.commit('one', rev_id='m1')
253
self.build_tree(['./file2'])
254
master.add(['file2'])
255
master.commit('two', rev_id='m2')
258
sr.run_script(self, '''
261
2>All changes applied successfully.
262
2>Updated to revision 1 of .../master
264
self.failUnlessExists('./file1')
265
self.failIfExists('./file2')
266
self.assertEquals(['m1'], master.get_parent_ids())
268
def test_update_dash_r_outside_history(self):
269
# Test that 'bzr update' works correctly when you have
270
# an update in the master tree, and a lightweight checkout
271
# which has merged another branch
272
master = self.make_branch_and_tree('master')
273
self.build_tree(['master/file1'])
274
master.add(['file1'])
275
master.commit('one', rev_id='m1')
277
# Create a second branch, with an extra commit
278
other = master.bzrdir.sprout('other').open_workingtree()
279
self.build_tree(['other/file2'])
281
other.commit('other2', rev_id='o2')
284
self.run_bzr('merge ../other')
285
master.commit('merge', rev_id='merge')
287
out, err = self.run_bzr('update -r revid:o2',
289
self.assertEqual('', out)
290
self.assertEqual('bzr: ERROR: branch has no revision o2\n'
291
'bzr update --revision only works'
292
' for a revision in the branch history\n',
295
def test_update_dash_r_in_master(self):
296
# Test that 'bzr update' works correctly when you have
297
# an update in the master tree,
298
master = self.make_branch_and_tree('master')
299
self.build_tree(['master/file1'])
300
master.add(['file1'])
301
master.commit('one', rev_id='m1')
303
self.run_bzr('checkout master checkout')
305
# add a revision in the master.
306
self.build_tree(['master/file2'])
307
master.add(['file2'])
308
master.commit('two', rev_id='m2')
312
sr.run_script(self, '''
313
$ bzr update -r revid:m2
315
2>All changes applied successfully.
316
2>Updated to revision 2 of branch .../master