19
19
"""Tests for the update command of bzr."""
23
from bzrlib import branch, bzrdir
24
from bzrlib.tests.blackbox import ExternalBase
25
from bzrlib.workingtree import WorkingTree
26
from bzrlib.osutils import pathjoin
29
class TestUpdate(ExternalBase):
34
class TestUpdate(tests.TestCaseWithTransport):
31
36
def test_update_standalone_trivial(self):
32
37
self.make_branch_and_tree('.')
33
38
out, err = self.run_bzr('update')
34
self.assertContainsRe(err, 'Tree is up to date at revision 0'
35
' of branch %s.' % re.escape(self.test_dir))
40
'Tree is up to date at revision 0 of branch %s\n' % self.test_dir,
36
42
self.assertEqual('', out)
38
44
def test_update_quiet(self):
44
50
def test_update_standalone_trivial_with_alias_up(self):
45
51
self.make_branch_and_tree('.')
46
52
out, err = self.run_bzr('up')
47
self.assertContainsRe(err, 'Tree is up to date at revision 0'
48
' of branch %s.' % re.escape(self.test_dir))
53
self.assertEqual('Tree is up to date at revision 0 of branch %s\n'
49
56
self.assertEqual('', out)
51
58
def test_update_up_to_date_light_checkout(self):
52
59
self.make_branch_and_tree('branch')
53
60
self.run_bzr('checkout --lightweight branch checkout')
54
61
out, err = self.run_bzr('update checkout')
55
branch_path = pathjoin(self.test_dir, 'branch/')
56
self.assertContainsRe(err, 'Tree is up to date at revision 0'
57
' of branch %s.' % re.escape(branch_path))
62
self.assertEqual('Tree is up to date at revision 0 of branch %s\n'
63
% osutils.pathjoin(self.test_dir, 'branch'),
58
65
self.assertEqual('', out)
60
67
def test_update_up_to_date_checkout(self):
61
68
self.make_branch_and_tree('branch')
62
69
self.run_bzr('checkout branch checkout')
63
70
out, err = self.run_bzr('update checkout')
64
branch_path = pathjoin(self.test_dir, 'branch/')
65
self.assertContainsRe(err, 'Tree is up to date at revision 0'
66
' of branch %s.' % re.escape(branch_path))
71
self.assertEqual('Tree is up to date at revision 0 of branch %s\n'
72
% osutils.pathjoin(self.test_dir, 'branch'),
67
74
self.assertEqual('', out)
69
76
def test_update_out_of_date_standalone_tree(self):
78
85
# now branch should be out of date
79
86
out,err = self.run_bzr('update branch')
80
87
self.assertEqual('', out)
81
self.assertContainsRe(err, '\+N file')
82
self.assertContainsRe(err, 'All changes applied successfully.')
83
branch_path = pathjoin(self.test_dir, 'branch/')
84
self.assertContainsRe(err, 'Updated to revision 1 of branch %s.' %
85
re.escape(branch_path))
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',),
86
93
self.failUnlessExists('branch/file')
88
95
def test_update_out_of_date_light_checkout(self):
95
102
self.run_bzr('commit -m add-file checkout')
96
103
# now checkout2 should be out of date
97
104
out,err = self.run_bzr('update checkout2')
98
self.assertContainsRe(err, '\+N file')
99
self.assertContainsRe(err, r'All changes applied successfully\.')
100
branch_path = pathjoin(self.test_dir, 'branch/')
101
self.assertContainsRe(err, r'Updated to revision 1 of branch %s.' %
102
re.escape(branch_path))
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',),
103
110
self.assertEqual('', out)
105
112
def test_update_conflicts_returns_2(self):
121
128
a_file.write('Bar')
123
130
out,err = self.run_bzr('update checkout2', retcode=1)
124
self.assertContainsRe(err, 'M file')
125
self.assertContainsRe(err, '1 conflicts encountered.')
126
branch_path = pathjoin(self.test_dir, 'branch/')
127
self.assertContainsRe(err, 'Updated to revision 2 of branch %s.' %
128
re.escape(branch_path))
129
self.assertContainsRe(err, 'Text conflict in file\n')
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',),
130
137
self.assertEqual('', out)
132
139
def test_smoke_update_checkout_bound_branch_local_commits(self):
136
143
# make a bound branch
137
144
self.run_bzr('checkout master child')
138
145
# get an object form of child
139
child = WorkingTree.open('child')
146
child = workingtree.WorkingTree.open('child')
141
148
self.run_bzr('checkout --lightweight child checkout')
142
149
# get an object form of the checkout to manipulate
143
wt = WorkingTree.open('checkout')
150
wt = workingtree.WorkingTree.open('checkout')
145
152
a_file = file('master/file', 'wt')
146
153
a_file.write('Foo')
163
170
# get all three files and a pending merge.
164
171
out, err = self.run_bzr('update checkout')
165
172
self.assertEqual('', out)
166
self.assertContainsRe(err, '\+N file')
167
self.assertContainsRe(err, '\+N file_b')
168
branch_path = pathjoin(self.test_dir, 'master/')
169
self.assertContainsRe(err, 'Updated to revision 1 of branch %s.' %
170
re.escape(branch_path))
171
self.assertContainsRe(err, 'Your local commits will now show as'
173
self.assertEqualDiff("""+N file
174
All changes applied successfully.
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',),
173
181
self.assertEqual([master_tip, child_tip], wt.get_parent_ids())
174
182
self.failUnlessExists('checkout/file')
175
183
self.failUnlessExists('checkout/file_b')
215
223
# merges, because they were real merges
216
224
out, err = self.run_bzr('update')
217
225
self.assertEqual('', out)
218
self.assertContainsRe(err, 'All changes applied successfully.')
219
branch_path = pathjoin(self.test_dir, 'master/')
220
self.assertContainsRe(err, 'Updated to revision 2 of branch %s.' %
221
re.escape(branch_path))
222
self.assertContainsRe(err, r'\+N file3')
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',),
223
231
# The pending merges should still be there
224
232
self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])