1
from shutil import rmtree
3
from bzrlib.errors import NoWorkingTree, NotLocalUrl, NotBranchError
4
from bzrlib.delta import compare_trees
5
from bzrlib.workingtree import WorkingTree
7
from errors import NotCheckout, UncommittedCheckout
10
def zap(path, remove_branch=False):
12
wt = WorkingTree.open(path)
13
except (NoWorkingTree, NotBranchError):
14
raise NotCheckout(path)
15
tree_base = wt.bzrdir.transport.base
17
branch_base = branch.bzrdir.transport.base
18
if tree_base == branch_base:
19
raise NotCheckout(path)
20
delta = compare_trees(wt.basis_tree(), wt, want_unchanged=False)
21
if delta.has_changed():
22
raise UncommittedCheckout()
25
t = branch.bzrdir.transport
26
while t.base != branch_base:
34
from unittest import makeSuite
36
from bzrlib.bzrdir import BzrDir, BzrDirMetaFormat1
37
from bzrlib.branch import BranchReferenceFormat
38
from bzrlib.tests import TestCaseInTempDir
40
class TestZap(TestCaseInTempDir):
42
def make_checkout(self):
43
wt = BzrDir.create_standalone_workingtree('source')
45
checkout = BzrDirMetaFormat1().initialize('checkout')
46
BranchReferenceFormat().initialize(checkout, wt.branch)
47
return checkout.create_workingtree()
49
def test_is_checkout(self):
50
self.assertRaises(NotCheckout, zap, '.')
51
wt = BzrDir.create_standalone_workingtree('.')
52
self.assertRaises(NotCheckout, zap, '.')
54
def test_zap_works(self):
56
self.assertIs(True, os.path.exists('checkout'))
58
self.assertIs(False, os.path.exists('checkout'))
59
self.assertIs(True, os.path.exists('source'))
61
def test_zap_branch(self):
63
base = WorkingTree.open('checkout').branch.base
64
self.assertIs(True, os.path.exists('checkout'))
65
zap('checkout', remove_branch=True)
66
self.assertIs(False, os.path.exists('checkout'))
67
self.assertIs(False, os.path.exists('source'))
69
def test_checks_modified(self):
70
checkout = self.make_checkout()
71
os.mkdir('checkout/foo')
73
self.assertRaises(UncommittedCheckout, zap, 'checkout')
74
checkout.commit('commit changes to branch')
77
return makeSuite(TestZap)