1
# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1
# Copyright (C) 2008 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
25
25
from bzrlib.revision import NULL_REVISION
26
from bzrlib.tests import TestNotApplicable, transport_util
26
from bzrlib.smart import server
27
from bzrlib.tests import TestNotApplicable, KnownFailure, transport_util
27
28
from bzrlib.tests.per_branch import TestCaseWithBranch
29
from bzrlib.transport import get_transport
30
32
unstackable_format_errors = (
205
207
self.assertRaises(errors.NotStacked,
206
208
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()
242
210
def make_stacked_bzrdir(self, in_directory=None):
243
211
"""Create a stacked branch and return its bzrdir.
254
222
tree = self.make_branch_and_tree(prefix + 'stacked-on')
255
223
tree.commit('Added foo')
256
224
stacked_bzrdir = tree.branch.bzrdir.sprout(
257
self.get_url(prefix + 'stacked'), tree.branch.last_revision(),
225
prefix + 'stacked', tree.branch.last_revision(), stacked=True)
259
226
return stacked_bzrdir
261
228
def test_clone_from_stacked_branch_preserve_stacking(self):
283
250
except unstackable_format_errors, e:
284
251
raise TestNotApplicable(e)
285
252
stacked_bzrdir.open_branch().set_stacked_on_url('../stacked-on')
286
cloned_bzrdir = stacked_bzrdir.clone(
287
self.get_url('cloned'), preserve_stacking=True)
253
cloned_bzrdir = stacked_bzrdir.clone('cloned', preserve_stacking=True)
288
254
self.assertEqual(
289
255
'../dir/stacked-on',
290
256
cloned_bzrdir.open_branch().get_stacked_on_url())