25
25
from bzrlib.revision import NULL_REVISION
26
from bzrlib.smart import server
27
from bzrlib.tests import TestNotApplicable, KnownFailure, transport_util
26
from bzrlib.tests import TestNotApplicable, transport_util
28
27
from bzrlib.tests.per_branch import TestCaseWithBranch
206
205
self.assertRaises(errors.NotStacked,
207
206
new_branch.get_stacked_on_url)
208
def test_unstack_already_locked(self):
209
"""Removing the stacked-on branch with an already write-locked branch
215
stacked_bzrdir = self.make_stacked_bzrdir()
216
except unstackable_format_errors, e:
217
raise TestNotApplicable(e)
218
stacked_branch = stacked_bzrdir.open_branch()
219
stacked_branch.lock_write()
220
stacked_branch.set_stacked_on_url(None)
221
stacked_branch.unlock()
223
def test_unstack_already_multiple_locked(self):
224
"""Unstacking a branch preserves the lock count (even though it
225
replaces the br.repository object).
227
This is a more extreme variation of test_unstack_already_locked.
230
stacked_bzrdir = self.make_stacked_bzrdir()
231
except unstackable_format_errors, e:
232
raise TestNotApplicable(e)
233
stacked_branch = stacked_bzrdir.open_branch()
234
stacked_branch.lock_write()
235
stacked_branch.lock_write()
236
stacked_branch.lock_write()
237
stacked_branch.set_stacked_on_url(None)
238
stacked_branch.unlock()
239
stacked_branch.unlock()
240
stacked_branch.unlock()
209
242
def make_stacked_bzrdir(self, in_directory=None):
210
243
"""Create a stacked branch and return its bzrdir.
221
254
tree = self.make_branch_and_tree(prefix + 'stacked-on')
222
255
tree.commit('Added foo')
223
256
stacked_bzrdir = tree.branch.bzrdir.sprout(
224
prefix + 'stacked', tree.branch.last_revision(), stacked=True)
257
self.get_url(prefix + 'stacked'), tree.branch.last_revision(),
225
259
return stacked_bzrdir
227
261
def test_clone_from_stacked_branch_preserve_stacking(self):
249
283
except unstackable_format_errors, e:
250
284
raise TestNotApplicable(e)
251
285
stacked_bzrdir.open_branch().set_stacked_on_url('../stacked-on')
252
cloned_bzrdir = stacked_bzrdir.clone('cloned', preserve_stacking=True)
286
cloned_bzrdir = stacked_bzrdir.clone(
287
self.get_url('cloned'), preserve_stacking=True)
253
288
self.assertEqual(
254
289
'../dir/stacked-on',
255
290
cloned_bzrdir.open_branch().get_stacked_on_url())