1
# Copyright (C) 2006 by Canonical Ltd
1
# Copyright (C) 2006 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
29
31
def test_update_standalone_trivial(self):
30
32
self.runbzr("init")
31
33
out, err = self.runbzr('update')
32
self.assertEqual('Tree is up to date.\n', err)
34
self.assertEqual('Tree is up to date at revision 0.\n', err)
35
self.assertEqual('', out)
37
def test_update_standalone_trivial_with_alias_up(self):
39
out, err = self.runbzr('up')
40
self.assertEqual('Tree is up to date at revision 0.\n', err)
33
41
self.assertEqual('', out)
35
43
def test_update_up_to_date_light_checkout(self):
36
44
self.make_branch_and_tree('branch')
37
45
self.runbzr('checkout --lightweight branch checkout')
38
46
out, err = self.runbzr('update checkout')
39
self.assertEqual('Tree is up to date.\n', err)
47
self.assertEqual('Tree is up to date at revision 0.\n', err)
48
self.assertEqual('', out)
50
def test_update_up_to_date_checkout(self):
51
self.make_branch_and_tree('branch')
52
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)
40
55
self.assertEqual('', out)
42
57
def test_update_out_of_date_standalone_tree(self):
43
58
# FIXME the default format has to change for this to pass
44
59
# because it currently uses the branch last-revision marker.
45
raise TestSkipped('default format too old')
46
60
self.make_branch_and_tree('branch')
48
62
self.runbzr('checkout --lightweight branch checkout')
98
113
def test_smoke_update_checkout_bound_branch_local_commits(self):
99
114
# smoke test for doing an update of a checkout of a bound
100
115
# branch with local commits.
101
self.make_branch_and_tree('master')
116
master = self.make_branch_and_tree('master')
102
117
# make a bound branch
103
118
self.run_bzr('checkout', 'master', 'child')
119
# get an object form of child
120
child = WorkingTree.open('child')
105
122
self.run_bzr('checkout', '--lightweight', 'child', 'checkout')
123
# get an object form of the checkout to manipulate
124
wt = WorkingTree.open('checkout')
107
126
a_file = file('master/file', 'wt')
108
127
a_file.write('Foo')
110
self.run_bzr('add', 'master')
111
self.run_bzr('commit', '-m', 'add file', 'master')
130
master_tip = master.commit('add file')
113
132
a_file = file('child/file_b', 'wt')
114
133
a_file.write('Foo')
116
self.run_bzr('add', 'child')
117
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)
119
138
a_file = file('checkout/file_c', 'wt')
120
139
a_file.write('Foo')
122
self.run_bzr('add', 'checkout')
124
143
# now, update checkout ->
125
144
# get all three files and a pending merge.
126
self.run_bzr('update', 'checkout')
127
wt = WorkingTree.open('checkout')
128
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())
129
151
self.failUnlessExists('checkout/file')
130
152
self.failUnlessExists('checkout/file_b')
131
153
self.failUnlessExists('checkout/file_c')
132
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:])
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'])