61
61
tree.bzrdir.sprout('child')
64
self.run_bzr('bind ../base')
63
self.run_bzr('bind ../base', working_dir='child')
65
d = BzrDir.open('child')
67
66
self.assertNotEqual(None, d.open_branch().get_master_branch())
69
self.run_bzr('unbind')
68
self.run_bzr('unbind', working_dir='child')
70
69
self.assertEqual(None, d.open_branch().get_master_branch())
72
self.run_bzr('unbind', retcode=3)
71
self.run_bzr('unbind', retcode=3, working_dir='child')
74
73
def test_bind_branch6(self):
75
74
branch1 = self.make_branch('branch1', format='dirstate-tags')
77
error = self.run_bzr('bind', retcode=3)[1]
75
error = self.run_bzr('bind', retcode=3, working_dir='branch1')[1]
78
76
self.assertContainsRe(error, 'no previous location known')
80
78
def setup_rebind(self, format):
86
84
def test_rebind_branch6(self):
87
85
self.setup_rebind('dirstate-tags')
86
self.run_bzr('bind', working_dir='branch2')
87
b = Branch.open('branch2')
91
88
self.assertContainsRe(b.get_bound_location(), '\/branch1\/$')
93
90
def test_rebind_branch5(self):
94
91
self.setup_rebind('knit')
96
error = self.run_bzr('bind', retcode=3)[1]
92
error = self.run_bzr('bind', retcode=3, working_dir='branch2')[1]
97
93
self.assertContainsRe(error, 'old locations')
99
95
def test_bound_commit(self):
152
149
self.check_revno(2, 'base')
154
151
self.check_revno(1, 'child')
156
self.run_bzr("commit -m child", retcode=3)
158
self.run_bzr('unbind')
152
self.run_bzr("commit -m child", retcode=3, working_dir='child')
153
self.check_revno(1, 'child')
154
self.run_bzr('unbind', working_dir='child')
155
child_tree = BzrDir.open('child').open_workingtree()
159
156
child_tree.commit(message='child')
157
self.check_revno(2, 'child')
162
159
def test_commit_remote_bound(self):
163
160
# It is not possible to commit to a branch
165
162
base_tree, child_tree = self.create_branches()
166
163
base_tree.bzrdir.sprout('newbase')
169
165
# There is no way to know that B has already
170
166
# been bound by someone else, otherwise it
171
167
# might be nice if this would fail
172
self.run_bzr('bind ../newbase')
168
self.run_bzr('bind ../newbase', working_dir='base')
175
self.run_bzr('commit -m failure --unchanged', retcode=3)
170
self.run_bzr('commit -m failure --unchanged', retcode=3,
177
173
def test_pull_updates_both(self):
178
174
base_tree = self.create_branches()[0]
181
177
newchild_tree.commit(message='newchild')
182
178
self.check_revno(2, 'newchild')
185
180
# The pull should succeed, and update
186
181
# the bound parent branch
187
self.run_bzr('pull ../newchild')
182
self.run_bzr('pull ../newchild', working_dir='child')
183
self.check_revno(2, 'child')
190
self.check_revno(2, '../base')
185
self.check_revno(2, 'base')
192
187
def test_pull_local_updates_local(self):
193
188
base_tree = self.create_branches()[0]
196
191
newchild_tree.commit(message='newchild')
197
192
self.check_revno(2, 'newchild')
200
194
# The pull should succeed, and update
201
195
# the bound parent branch
202
self.run_bzr('pull ../newchild --local')
196
self.run_bzr('pull ../newchild --local', working_dir='child')
197
self.check_revno(2, 'child')
205
self.check_revno(1, '../base')
199
self.check_revno(1, 'base')
207
201
def test_bind_diverged(self):
208
202
base_tree, child_tree = self.create_branches()
209
203
base_branch = base_tree.branch
210
204
child_branch = child_tree.branch
213
self.run_bzr('unbind')
206
self.run_bzr('unbind', working_dir='child')
208
child_tree = BzrDir.open('child').open_workingtree()
215
209
child_tree.commit(message='child', allow_pointless=True)
210
self.check_revno(2, 'child')
219
212
self.check_revno(1, 'base')
220
213
base_tree.commit(message='base', allow_pointless=True)
221
214
self.check_revno(2, 'base')
224
216
# These branches have diverged, but bind should succeed anyway
225
self.run_bzr('bind ../base')
217
self.run_bzr('bind ../base', working_dir='child')
227
219
# This should turn the local commit into a merge
220
child_tree = BzrDir.open('child').open_workingtree()
228
221
child_tree.update()
229
222
child_tree.commit(message='merged')
223
self.check_revno(3, 'child')
232
225
self.assertEquals(
233
226
child_tree.branch.last_revision(),
236
229
def test_bind_parent_ahead(self):
237
230
base_tree = self.create_branches()[0]
240
self.run_bzr('unbind')
232
self.run_bzr('unbind', working_dir='child')
242
234
base_tree.commit(message='base', allow_pointless=True)
245
self.run_bzr('bind ../base')
236
self.check_revno(1, 'child')
237
self.run_bzr('bind ../base', working_dir='child')
247
239
# binding does not pull data:
249
self.run_bzr('unbind')
240
self.check_revno(1, 'child')
241
self.run_bzr('unbind', working_dir='child')
251
243
# Check and make sure it also works if parent is ahead multiple
252
244
base_tree.commit(message='base 3', allow_pointless=True)
253
245
base_tree.commit(message='base 4', allow_pointless=True)
254
246
base_tree.commit(message='base 5', allow_pointless=True)
255
self.check_revno(5, '../base')
247
self.check_revno(5, 'base')
258
self.run_bzr('bind ../base')
249
self.check_revno(1, 'child')
250
self.run_bzr('bind ../base', working_dir='child')
251
self.check_revno(1, 'child')
261
253
def test_bind_child_ahead(self):
262
254
# test binding when the master branches history is a prefix of the
265
257
child_tree = self.create_branches()[1]
268
self.run_bzr('unbind')
259
self.run_bzr('unbind', working_dir='child')
260
# Refresh the child tree/branch objects as 'bind' modified them
261
child_tree = BzrDir.open('child').open_workingtree()
269
262
child_tree.commit(message='child', allow_pointless=True)
271
self.check_revno(1, '../base')
263
self.check_revno(2, 'child')
264
self.check_revno(1, 'base')
273
self.run_bzr('bind ../base')
274
self.check_revno(1, '../base')
266
self.run_bzr('bind ../base', working_dir='child')
267
self.check_revno(1, 'base')
276
269
# Check and make sure it also works if child is ahead multiple
277
self.run_bzr('unbind')
270
self.run_bzr('unbind', working_dir='child')
278
271
child_tree.commit(message='child 3', allow_pointless=True)
279
272
child_tree.commit(message='child 4', allow_pointless=True)
280
273
child_tree.commit(message='child 5', allow_pointless=True)
274
self.check_revno(5, 'child')
283
self.check_revno(1, '../base')
284
self.run_bzr('bind ../base')
285
self.check_revno(1, '../base')
276
self.check_revno(1, 'base')
277
self.run_bzr('bind ../base', working_dir='child')
278
self.check_revno(1, 'base')
287
280
def test_bind_fail_if_missing(self):
288
281
"""We should not be able to bind to a missing branch."""
289
282
tree = self.make_branch_and_tree('tree_1')
290
283
tree.commit('dummy commit')
291
self.run_bzr_error(['Not a branch.*no-such-branch/'], ['bind', '../no-such-branch'],
292
working_dir='tree_1')
284
self.run_bzr_error(['Not a branch.*no-such-branch/'],
285
['bind', '../no-such-branch'],
286
working_dir='tree_1')
293
287
self.assertIs(None, tree.branch.get_bound_location())
295
289
def test_bind_nick(self):
296
290
"""Bind should not update implicit nick."""
297
291
base = self.make_branch_and_tree('base')
298
292
child = self.make_branch_and_tree('child')
300
293
self.assertEqual(child.branch.nick, 'child')
301
self.assertEqual(child.branch.get_config().has_explicit_nickname(),
303
self.run_bzr('bind ../base')
294
self.assertEqual(False,
295
child.branch.get_config().has_explicit_nickname())
296
self.run_bzr('bind ../base', working_dir='child')
297
# Refresh the child tree/branch objects as 'bind' modified them
298
child = BzrDir.open('child').open_workingtree()
304
299
self.assertEqual(child.branch.nick, base.branch.nick)
305
self.assertEqual(child.branch.get_config().has_explicit_nickname(),
300
self.assertEqual(False,
301
child.branch.get_config().has_explicit_nickname())
308
303
def test_bind_explicit_nick(self):
309
304
"""Bind should update explicit nick."""
310
305
base = self.make_branch_and_tree('base')
311
306
child = self.make_branch_and_tree('child')
313
307
child.branch.nick = "explicit_nick"
314
self.assertEqual(child.branch.nick, "explicit_nick")
315
self.assertEqual(child.branch.get_config()._get_explicit_nickname(),
317
self.run_bzr('bind ../base')
308
self.assertEqual("explicit_nick", child.branch.nick)
309
self.assertEqual("explicit_nick",
310
child.branch.get_config()._get_explicit_nickname())
311
self.run_bzr('bind ../base', working_dir='child')
312
# Refresh the child tree/branch objects as 'bind' modified them
313
child = BzrDir.open('child').open_workingtree()
318
314
self.assertEqual(child.branch.nick, base.branch.nick)
319
315
self.assertEqual(child.branch.get_config()._get_explicit_nickname(),
322
318
def test_commit_after_merge(self):
323
319
base_tree, child_tree = self.create_branches()