24
24
import bzrlib.branch
25
import bzrlib.bzrdir as bzrdir
26
35
from bzrlib.branch import Branch, needs_read_lock, needs_write_lock
27
36
from bzrlib.check import check
28
import bzrlib.errors as errors
29
37
from bzrlib.errors import (FileExists,
32
40
UninitializableFormat,
35
import bzrlib.repository as repository
36
43
import bzrlib.revision
37
44
from bzrlib.tests import (
43
50
from bzrlib.trace import mutter
44
import bzrlib.transactions as transactions
45
import bzrlib.transport as transport
46
51
from bzrlib.transport import get_transport
47
import bzrlib.ui as ui
48
52
from bzrlib.upgrade import upgrade
49
import bzrlib.workingtree as workingtree
52
55
class TestCaseWithBzrDir(TestCaseWithTransport):
150
153
wt = dir.create_workingtree(revision_id=bzrlib.revision.NULL_REVISION)
151
154
self.assertEqual([], wt.get_parent_ids())
156
def test_destroy_workingtree(self):
157
tree = self.make_branch_and_tree('tree')
158
self.build_tree(['tree/file'])
160
tree.commit('first commit')
163
bzrdir.destroy_workingtree()
164
except errors.UnsupportedOperation:
165
raise TestSkipped('Format does not support destroying tree')
166
self.failIfExists('tree/file')
167
self.assertRaises(errors.NoWorkingTree, bzrdir.open_workingtree)
168
bzrdir.create_workingtree()
169
self.failUnlessExists('tree/file')
170
bzrdir.destroy_workingtree_metadata()
171
self.failUnlessExists('tree/file')
172
self.assertRaises(errors.NoWorkingTree, bzrdir.open_workingtree)
153
174
def test_clone_bzrdir_empty(self):
154
175
dir = self.make_bzrdir('source')
155
176
target = dir.clone(self.get_url('target'))
1317
1338
unused_repo = thisdir.create_repository()
1318
1339
master.lock_write()
1319
1340
unused_repo.lock_write()
1320
# two yes's : branch and repository. If the repo in this
1321
# dir is inappropriately accessed, 3 will be needed, and
1322
# we'll see that because the stream will be fully consumed
1323
bzrlib.ui.ui_factory.stdin = StringIO("y\ny\ny\n")
1324
master.bzrdir.break_lock()
1325
# only two ys should have been read
1326
self.assertEqual("y\n", bzrlib.ui.ui_factory.stdin.read())
1327
# we should be able to lock a newly opened branch now
1328
branch = master.bzrdir.open_branch()
1331
# we should not be able to lock the repository in thisdir as its still
1332
# held by the explicit lock we took, and the break lock should not have
1334
repo = thisdir.open_repository()
1335
self.assertRaises(errors.LockContention, repo.lock_write)
1336
unused_repo.unlock()
1342
# two yes's : branch and repository. If the repo in this
1343
# dir is inappropriately accessed, 3 will be needed, and
1344
# we'll see that because the stream will be fully consumed
1345
bzrlib.ui.ui_factory.stdin = StringIO("y\ny\ny\n")
1346
master.bzrdir.break_lock()
1347
# only two ys should have been read
1348
self.assertEqual("y\n", bzrlib.ui.ui_factory.stdin.read())
1349
# we should be able to lock a newly opened branch now
1350
branch = master.bzrdir.open_branch()
1353
# we should not be able to lock the repository in thisdir as its still
1354
# held by the explicit lock we took, and the break lock should not have
1356
repo = thisdir.open_repository()
1357
orig_default = lockdir._DEFAULT_TIMEOUT_SECONDS
1359
lockdir._DEFAULT_TIMEOUT_SECONDS = 1
1360
self.assertRaises(errors.LockContention, repo.lock_write)
1362
lockdir._DEFAULT_TIMEOUT_SECONDS = orig_default
1364
unused_repo.unlock()
1337
1365
self.assertRaises(errors.LockBroken, master.unlock)
1339
1367
def test_break_lock_tree(self):