1
1
# Copyright (C) 2006 by Canonical Ltd
2
2
# -*- coding: utf-8 -*-
4
4
# This program is free software; you can redistribute it and/or modify
5
5
# it under the terms of the GNU General Public License as published by
6
6
# the Free Software Foundation; either version 2 of the License, or
7
7
# (at your option) any later version.
9
9
# This program is distributed in the hope that it will be useful,
10
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
12
# GNU General Public License for more details.
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
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
105
113
def test_smoke_update_checkout_bound_branch_local_commits(self):
106
114
# smoke test for doing an update of a checkout of a bound
107
115
# branch with local commits.
108
self.make_branch_and_tree('master')
116
master = self.make_branch_and_tree('master')
109
117
# make a bound branch
110
118
self.run_bzr('checkout', 'master', 'child')
119
# get an object form of child
120
child = WorkingTree.open('child')
112
122
self.run_bzr('checkout', '--lightweight', 'child', 'checkout')
123
# get an object form of the checkout to manipulate
124
wt = WorkingTree.open('checkout')
114
126
a_file = file('master/file', 'wt')
115
127
a_file.write('Foo')
117
self.run_bzr('add', 'master')
118
self.run_bzr('commit', '-m', 'add file', 'master')
130
master_tip = master.commit('add file')
120
132
a_file = file('child/file_b', 'wt')
121
133
a_file.write('Foo')
123
self.run_bzr('add', 'child')
124
self.run_bzr('commit', '--local', '-m', 'add file_b', 'child')
135
child.add(['file_b'])
136
child_tip = child.commit('add file_b', local=True)
126
138
a_file = file('checkout/file_c', 'wt')
127
139
a_file.write('Foo')
129
self.run_bzr('add', 'checkout')
131
143
# now, update checkout ->
132
144
# get all three files and a pending merge.
133
self.run_bzr('update', 'checkout')
134
wt = WorkingTree.open('checkout')
135
self.assertNotEqual([], wt.pending_merges())
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())
136
151
self.failUnlessExists('checkout/file')
137
152
self.failUnlessExists('checkout/file_b')
138
153
self.failUnlessExists('checkout/file_c')
139
154
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:])