1
# Copyright (C) 2007 Canonical Ltd
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
branch as _mod_branch,
27
class TestReconfigure(tests.TestCaseWithTransport):
29
def test_tree_to_branch(self):
30
tree = self.make_branch_and_tree('tree')
31
reconfiguration = reconfigure.Reconfigure.to_branch(tree.bzrdir)
32
reconfiguration.apply()
33
self.assertRaises(errors.NoWorkingTree, workingtree.WorkingTree.open,
36
def test_modified_tree_to_branch(self):
37
tree = self.make_branch_and_tree('tree')
38
self.build_tree(['tree/file'])
40
reconfiguration = reconfigure.Reconfigure.to_branch(tree.bzrdir)
41
self.assertRaises(errors.UncommittedChanges, reconfiguration.apply)
42
reconfiguration.apply(force=True)
43
self.assertRaises(errors.NoWorkingTree, workingtree.WorkingTree.open,
46
def test_branch_to_branch(self):
47
branch = self.make_branch('branch')
48
self.assertRaises(errors.AlreadyBranch,
49
reconfigure.Reconfigure.to_branch, branch.bzrdir)
51
def test_repo_to_branch(self):
52
repo = self.make_repository('repo')
53
reconfiguration = reconfigure.Reconfigure.to_branch(repo.bzrdir)
54
reconfiguration.apply()
56
def test_checkout_to_branch(self):
57
branch = self.make_branch('branch')
58
checkout = branch.create_checkout('checkout')
59
reconfiguration = reconfigure.Reconfigure.to_branch(checkout.bzrdir)
60
reconfiguration.apply()
61
self.assertIs(None, checkout.branch.get_bound_location())
63
def prepare_lightweight_checkout_to_branch(self):
64
branch = self.make_branch('branch')
65
checkout = branch.create_checkout('checkout', lightweight=True)
66
checkout.commit('first commit', rev_id='rev1')
67
reconfiguration = reconfigure.Reconfigure.to_branch(checkout.bzrdir)
68
return reconfiguration, checkout
70
def test_lightweight_checkout_to_branch(self):
71
reconfiguration, checkout = \
72
self.prepare_lightweight_checkout_to_branch()
73
reconfiguration.apply()
74
checkout_branch = checkout.bzrdir.open_branch()
75
self.assertEqual(checkout_branch.bzrdir.root_transport.base,
76
checkout.bzrdir.root_transport.base)
77
self.assertEqual('rev1', checkout_branch.last_revision())
78
repo = checkout.bzrdir.open_repository()
79
repo.get_revision('rev1')
81
def test_lightweight_checkout_to_branch_tags(self):
82
reconfiguration, checkout = \
83
self.prepare_lightweight_checkout_to_branch()
84
checkout.branch.tags.set_tag('foo', 'bar')
85
reconfiguration.apply()
86
checkout_branch = checkout.bzrdir.open_branch()
87
self.assertEqual('bar', checkout_branch.tags.lookup_tag('foo'))
89
def prepare_lightweight_checkout_to_checkout(self):
90
branch = self.make_branch('branch')
91
checkout = branch.create_checkout('checkout', lightweight=True)
92
reconfiguration = reconfigure.Reconfigure.to_checkout(checkout.bzrdir)
93
return reconfiguration, checkout
95
def test_lightweight_checkout_to_checkout(self):
96
reconfiguration, checkout = \
97
self.prepare_lightweight_checkout_to_checkout()
98
reconfiguration.apply()
99
checkout_branch = checkout.bzrdir.open_branch()
100
self.assertIsNot(checkout_branch.get_bound_location(), None)
102
def test_lightweight_checkout_to_checkout_tags(self):
103
reconfiguration, checkout = \
104
self.prepare_lightweight_checkout_to_checkout()
105
checkout.branch.tags.set_tag('foo', 'bar')
106
reconfiguration.apply()
107
checkout_branch = checkout.bzrdir.open_branch()
108
self.assertEqual('bar', checkout_branch.tags.lookup_tag('foo'))
110
def test_lightweight_conversion_uses_shared_repo(self):
111
parent = self.make_branch('parent')
112
shared_repo = self.make_repository('repo', shared=True)
113
checkout = parent.create_checkout('repo/checkout', lightweight=True)
114
reconfigure.Reconfigure.to_tree(checkout.bzrdir).apply()
115
checkout_repo = checkout.bzrdir.open_branch().repository
116
self.assertEqual(shared_repo.bzrdir.root_transport.base,
117
checkout_repo.bzrdir.root_transport.base)
119
def test_branch_to_tree(self):
120
branch = self.make_branch('branch')
121
reconfiguration=reconfigure.Reconfigure.to_tree(branch.bzrdir)
122
reconfiguration.apply()
123
branch.bzrdir.open_workingtree()
125
def test_tree_to_tree(self):
126
tree = self.make_branch_and_tree('tree')
127
self.assertRaises(errors.AlreadyTree, reconfigure.Reconfigure.to_tree,
130
def test_select_bind_location(self):
131
branch = self.make_branch('branch')
132
reconfiguration = reconfigure.Reconfigure(branch.bzrdir)
133
self.assertRaises(errors.NoBindLocation,
134
reconfiguration._select_bind_location)
135
branch.set_parent('http://parent')
136
self.assertEqual('http://parent',
137
reconfiguration._select_bind_location())
138
branch.set_push_location('sftp://push')
139
self.assertEqual('sftp://push',
140
reconfiguration._select_bind_location())
141
branch.set_bound_location('bzr://foo/old-bound')
142
branch.set_bound_location(None)
143
self.assertEqual('bzr://foo/old-bound',
144
reconfiguration._select_bind_location())
145
branch.set_bound_location('bzr://foo/cur-bound')
146
self.assertEqual('bzr://foo/cur-bound',
147
reconfiguration._select_bind_location())
148
reconfiguration.new_bound_location = 'ftp://user-specified'
149
self.assertEqual('ftp://user-specified',
150
reconfiguration._select_bind_location())
152
def test_select_reference_bind_location(self):
153
branch = self.make_branch('branch')
154
checkout = branch.create_checkout('checkout', lightweight=True)
155
reconfiguration = reconfigure.Reconfigure(checkout.bzrdir)
156
self.assertEqual(branch.base,
157
reconfiguration._select_bind_location())
159
def test_tree_to_checkout(self):
160
# A tree with no related branches and no supplied bind location cannot
162
parent = self.make_branch('parent')
164
tree = self.make_branch_and_tree('tree')
165
reconfiguration = reconfigure.Reconfigure.to_checkout(tree.bzrdir)
166
self.assertRaises(errors.NoBindLocation, reconfiguration.apply)
167
# setting a parent allows it to become a checkout
168
tree.branch.set_parent(parent.base)
169
reconfiguration.apply()
170
# supplying a location allows it to become a checkout
171
tree2 = self.make_branch_and_tree('tree2')
172
reconfiguration = reconfigure.Reconfigure.to_checkout(tree2.bzrdir,
174
reconfiguration.apply()
176
def test_tree_to_lightweight_checkout(self):
177
# A tree with no related branches and no supplied bind location cannot
179
parent = self.make_branch('parent')
181
tree = self.make_branch_and_tree('tree')
182
reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
184
self.assertRaises(errors.NoBindLocation, reconfiguration.apply)
185
# setting a parent allows it to become a checkout
186
tree.branch.set_parent(parent.base)
187
reconfiguration.apply()
188
# supplying a location allows it to become a checkout
189
tree2 = self.make_branch_and_tree('tree2')
190
reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
191
tree2.bzrdir, parent.base)
192
reconfiguration.apply()
194
def test_checkout_to_checkout(self):
195
parent = self.make_branch('parent')
196
checkout = parent.create_checkout('checkout')
197
self.assertRaises(errors.AlreadyCheckout,
198
reconfigure.Reconfigure.to_checkout, checkout.bzrdir)
200
def test_checkout_to_lightweight(self):
201
parent = self.make_branch('parent')
202
checkout = parent.create_checkout('checkout')
203
checkout.commit('test', rev_id='new-commit', local=True)
204
reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
206
reconfiguration.apply()
207
wt = checkout.bzrdir.open_workingtree()
208
self.assertTrue(parent.repository.has_same_location(
209
wt.branch.repository))
210
parent.repository.get_revision('new-commit')
211
self.assertRaises(errors.NoRepositoryPresent,
212
checkout.bzrdir.open_repository)
214
def prepare_branch_to_lightweight_checkout(self):
215
parent = self.make_branch('parent')
216
child = parent.bzrdir.sprout('child').open_workingtree()
217
child.commit('test', rev_id='new-commit')
218
child.bzrdir.destroy_workingtree()
219
reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
221
return parent, child, reconfiguration
223
def test_branch_to_lightweight_checkout(self):
224
parent, child, reconfiguration = \
225
self.prepare_branch_to_lightweight_checkout()
226
reconfiguration.apply()
227
self.assertTrue(reconfiguration._destroy_branch)
228
wt = child.bzrdir.open_workingtree()
229
self.assertTrue(parent.repository.has_same_location(
230
wt.branch.repository))
231
parent.repository.get_revision('new-commit')
232
self.assertRaises(errors.NoRepositoryPresent,
233
child.bzrdir.open_repository)
235
def test_branch_to_lightweight_checkout_failure(self):
236
parent, child, reconfiguration = \
237
self.prepare_branch_to_lightweight_checkout()
238
old_Repository_fetch = repository.Repository.fetch
239
repository.Repository.fetch = None
241
self.assertRaises(TypeError, reconfiguration.apply)
243
repository.Repository.fetch = old_Repository_fetch
244
child = _mod_branch.Branch.open('child')
245
self.assertContainsRe(child.base, 'child/$')
247
def test_branch_to_lightweight_checkout_fetch_tags(self):
248
parent, child, reconfiguration = \
249
self.prepare_branch_to_lightweight_checkout()
250
child.branch.tags.set_tag('foo', 'bar')
251
reconfiguration.apply()
252
child = _mod_branch.Branch.open('child')
253
self.assertEqual('bar', parent.tags.lookup_tag('foo'))
255
def test_lightweight_checkout_to_lightweight_checkout(self):
256
parent = self.make_branch('parent')
257
checkout = parent.create_checkout('checkout', lightweight=True)
258
self.assertRaises(errors.AlreadyLightweightCheckout,
259
reconfigure.Reconfigure.to_lightweight_checkout,
262
def test_repo_to_tree(self):
263
repo = self.make_repository('repo')
264
reconfiguration = reconfigure.Reconfigure.to_tree(repo.bzrdir)
265
reconfiguration.apply()
266
workingtree.WorkingTree.open('repo')
268
def test_shared_repo_to_lightweight_checkout(self):
269
repo = self.make_repository('repo', shared=True)
270
reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
272
self.assertRaises(errors.NoBindLocation, reconfiguration.apply)
273
branch = self.make_branch('branch')
274
reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
275
repo.bzrdir, 'branch')
276
reconfiguration.apply()
277
workingtree.WorkingTree.open('repo')
278
repository.Repository.open('repo')
280
def test_unshared_repo_to_lightweight_checkout(self):
281
repo = self.make_repository('repo', shared=False)
282
branch = self.make_branch('branch')
283
reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
284
repo.bzrdir, 'branch')
285
reconfiguration.apply()
286
workingtree.WorkingTree.open('repo')
287
self.assertRaises(errors.NoRepositoryPresent,
288
repository.Repository.open, 'repo')