~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to zap.py

  • Committer: Michael Ellerman
  • Date: 2005-10-19 09:34:33 UTC
  • mto: (0.3.1 shelf-dev) (325.1.2 bzrtools)
  • mto: This revision was merged to the branch mainline in revision 246.
  • Revision ID: michael@ellerman.id.au-20051019093433-39720aedce6799e9
Upated patches.py to version from bzrtools-0.1.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
from shutil import rmtree
2
 
 
3
 
from bzrlib import (
4
 
    bzrdir,
5
 
    revision as _mod_revision,
6
 
    )
7
 
from bzrlib.branch import Branch
8
 
from bzrlib.errors import NoWorkingTree, NotBranchError
9
 
from bzrlib.workingtree import WorkingTree
10
 
 
11
 
from errors import (NotCheckout, UncommittedCheckout, ParentMissingRevisions,
12
 
                    NoParent)
13
 
 
14
 
 
15
 
def zap(path, remove_branch=False, allow_modified=False):
16
 
    try:
17
 
        wt = bzrdir.BzrDir.open(path).open_workingtree(path,
18
 
                                                       recommend_upgrade=False)
19
 
    except (NoWorkingTree, NotBranchError):
20
 
        raise NotCheckout(path)
21
 
    tree_base = wt.bzrdir.transport.base
22
 
    branch = wt.branch
23
 
    branch_base = branch.bzrdir.transport.base
24
 
    if tree_base == branch_base:
25
 
        raise NotCheckout(path)
26
 
    if not allow_modified:
27
 
        delta = wt.changes_from(wt.basis_tree(), want_unchanged=False)
28
 
        if delta.has_changed():
29
 
            raise UncommittedCheckout()
30
 
    if remove_branch:
31
 
        parent_loc = branch.get_parent()
32
 
        if parent_loc is None:
33
 
            raise NoParent()
34
 
        parent = Branch.open(parent_loc)
35
 
        last_revision = _mod_revision.ensure_null(parent.last_revision())
36
 
        p_ancestry = parent.repository.get_ancestry(last_revision)
37
 
        if (last_revision != _mod_revision.NULL_REVISION and
38
 
            branch.last_revision() not in p_ancestry):
39
 
            raise ParentMissingRevisions(branch.get_parent())
40
 
    rmtree(path)
41
 
    if remove_branch:
42
 
        t = branch.bzrdir.transport
43
 
        while t.base != branch_base:
44
 
            t = t.clone('..')
45
 
        t = t.clone('..')
46
 
        t.delete_tree('')
47
 
 
48
 
 
49
 
def test_suite():
50
 
    import os
51
 
    from unittest import makeSuite
52
 
 
53
 
    from bzrlib.tests import TestCaseInTempDir
54
 
 
55
 
    class TestZap(TestCaseInTempDir):
56
 
 
57
 
        def make_checkout(self):
58
 
            wt = bzrdir.BzrDir.create_standalone_workingtree('source')
59
 
            return wt.branch.create_checkout('checkout', lightweight=True)
60
 
 
61
 
        def make_checkout2(self):
62
 
            wt = self.make_checkout()
63
 
            wt2 = wt.branch.bzrdir.sprout('source2').open_workingtree()
64
 
            return wt2.branch.create_checkout('checkout2', lightweight=True)
65
 
 
66
 
        def test_is_checkout(self):
67
 
            self.assertRaises(NotCheckout, zap, '.')
68
 
            wt = bzrdir.BzrDir.create_standalone_workingtree('.')
69
 
            self.assertRaises(NotCheckout, zap, '.')
70
 
 
71
 
        def test_zap_works(self):
72
 
            self.make_checkout()
73
 
            self.assertIs(True, os.path.exists('checkout'))
74
 
            zap('checkout')
75
 
            self.assertIs(False, os.path.exists('checkout'))
76
 
            self.assertIs(True, os.path.exists('source'))
77
 
 
78
 
        def test_zap_branch(self):
79
 
            self.make_checkout2()
80
 
            base = WorkingTree.open('checkout').branch.base
81
 
            self.assertIs(True, os.path.exists('checkout'))
82
 
            self.assertRaises(NoParent, zap, 'checkout', remove_branch=True)
83
 
            self.assertIs(True, os.path.exists('checkout'))
84
 
            self.assertIs(True, os.path.exists('source'))
85
 
            zap('checkout2', remove_branch=True)
86
 
            self.assertIs(False, os.path.exists('checkout2'))
87
 
            self.assertIs(False, os.path.exists('source2'))
88
 
 
89
 
        def test_checks_modified(self):
90
 
            checkout = self.make_checkout()
91
 
            os.mkdir('checkout/foo')
92
 
            checkout.add('foo')
93
 
            self.assertRaises(UncommittedCheckout, zap, 'checkout')
94
 
            checkout.commit('commit changes to branch')
95
 
            zap('checkout')
96
 
 
97
 
        def test_allow_modified(self):
98
 
            checkout = self.make_checkout()
99
 
            os.mkdir('checkout/foo')
100
 
            checkout.add('foo')
101
 
            self.assertRaises(UncommittedCheckout, zap, 'checkout')
102
 
            zap('checkout', allow_modified=True)
103
 
 
104
 
    return makeSuite(TestZap)