113
111
def test_smoke_update_checkout_bound_branch_local_commits(self):
114
112
# smoke test for doing an update of a checkout of a bound
115
113
# branch with local commits.
116
master = self.make_branch_and_tree('master')
114
self.make_branch_and_tree('master')
117
115
# make a bound branch
118
116
self.run_bzr('checkout', 'master', 'child')
119
# get an object form of child
120
child = WorkingTree.open('child')
122
118
self.run_bzr('checkout', '--lightweight', 'child', 'checkout')
123
# get an object form of the checkout to manipulate
124
wt = WorkingTree.open('checkout')
126
120
a_file = file('master/file', 'wt')
127
121
a_file.write('Foo')
130
master_tip = master.commit('add file')
123
self.run_bzr('add', 'master')
124
self.run_bzr('commit', '-m', 'add file', 'master')
132
126
a_file = file('child/file_b', 'wt')
133
127
a_file.write('Foo')
135
child.add(['file_b'])
136
child_tip = child.commit('add file_b', local=True)
129
self.run_bzr('add', 'child')
130
self.run_bzr('commit', '--local', '-m', 'add file_b', 'child')
138
132
a_file = file('checkout/file_c', 'wt')
139
133
a_file.write('Foo')
135
self.run_bzr('add', 'checkout')
143
137
# now, update checkout ->
144
138
# get all three files and a pending merge.
145
out, err = self.run_bzr('update', 'checkout')
146
self.assertEqual('', out)
147
self.assertContainsRe(err, 'Updated to revision 1.\n'
148
'Your local commits will now show as'
150
self.assertEqual([master_tip, child_tip], wt.get_parent_ids())
139
self.run_bzr('update', 'checkout')
140
wt = WorkingTree.open('checkout')
141
self.assertNotEqual([], wt.pending_merges())
151
142
self.failUnlessExists('checkout/file')
152
143
self.failUnlessExists('checkout/file_b')
153
144
self.failUnlessExists('checkout/file_c')
154
145
self.assertTrue(wt.has_filename('file_c'))
156
def test_update_with_merges(self):
157
# Test that 'bzr update' works correctly when you have
158
# an update in the master tree, and a lightweight checkout
159
# which has merged another branch
160
master = self.make_branch_and_tree('master')
161
self.build_tree(['master/file'])
163
master.commit('one', rev_id='m1')
165
self.build_tree(['checkout1/'])
166
checkout_dir = bzrdir.BzrDirMetaFormat1().initialize('checkout1')
167
branch.BranchReferenceFormat().initialize(checkout_dir, master.branch)
168
checkout1 = checkout_dir.create_workingtree('m1')
170
# Create a second branch, with an extra commit
171
other = master.bzrdir.sprout('other').open_workingtree()
172
self.build_tree(['other/file2'])
174
other.commit('other2', rev_id='o2')
176
# Create a new commit in the master branch
177
self.build_tree(['master/file3'])
178
master.add(['file3'])
179
master.commit('f3', rev_id='m2')
181
# Merge the other branch into checkout
182
os.chdir('checkout1')
183
self.run_bzr('merge', '../other')
185
self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])
187
# At this point, 'commit' should fail, because we are out of date
188
self.run_bzr_error(["please run 'bzr update'"],
189
'commit', '-m', 'merged')
191
# This should not report about local commits being pending
192
# merges, because they were real merges
193
out, err = self.run_bzr('update')
194
self.assertEqual('', out)
195
self.assertEqual('All changes applied successfully.\n'
196
'Updated to revision 2.\n', err)
198
# The pending merges should still be there
199
self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])
201
def test_readonly_lightweight_update(self):
202
"""Update a light checkout of a readonly branch"""
203
tree = self.make_branch_and_tree('branch')
204
readonly_branch = branch.Branch.open(self.get_readonly_url('branch'))
205
checkout = readonly_branch.create_checkout('checkout',
207
tree.commit('empty commit')
208
self.runbzr(['update', 'checkout'])