~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to zap.py

  • Committer: Aaron Bentley
  • Date: 2007-11-23 15:13:59 UTC
  • Revision ID: abentley@panoramicfeedback.com-20071123151359-yrjc6ta2fkbtu9ht
Remove switch (now in bzr itself)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
from shutil import rmtree
2
2
 
 
3
from bzrlib import (
 
4
    bzrdir,
 
5
    revision as _mod_revision,
 
6
    )
3
7
from bzrlib.branch import Branch
4
8
from bzrlib.errors import NoWorkingTree, NotLocalUrl, NotBranchError
5
9
from bzrlib.workingtree import WorkingTree
8
12
                    NoParent)
9
13
 
10
14
 
11
 
def zap(path, remove_branch=False):
 
15
def zap(path, remove_branch=False, allow_modified=False):
12
16
    try:
13
 
        wt = WorkingTree.open(path)
 
17
        wt = bzrdir.BzrDir.open(path).open_workingtree(path,
 
18
                                                       recommend_upgrade=False)
14
19
    except (NoWorkingTree, NotBranchError):
15
20
        raise NotCheckout(path)
16
21
    tree_base = wt.bzrdir.transport.base
18
23
    branch_base = branch.bzrdir.transport.base
19
24
    if tree_base == branch_base:
20
25
        raise NotCheckout(path)
21
 
    delta = wt.changes_from(wt.basis_tree(), want_unchanged=False)
22
 
    if delta.has_changed():
23
 
        raise UncommittedCheckout()
 
26
    if not allow_modified:
 
27
        delta = wt.changes_from(wt.basis_tree(), want_unchanged=False)
 
28
        if delta.has_changed():
 
29
            raise UncommittedCheckout()
24
30
    if remove_branch:
25
31
        parent_loc = branch.get_parent()
26
32
        if parent_loc is None:
27
33
            raise NoParent()
28
34
        parent = Branch.open(parent_loc)
29
 
        p_ancestry = parent.repository.get_ancestry(parent.last_revision())
30
 
        if branch.last_revision() not in p_ancestry:
 
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):
31
39
            raise ParentMissingRevisions(branch.get_parent())
32
40
    rmtree(path)
33
41
    if remove_branch:
94
102
            checkout.commit('commit changes to branch')
95
103
            zap('checkout')
96
104
 
 
105
        def test_allow_modified(self):
 
106
            checkout = self.make_checkout()
 
107
            os.mkdir('checkout/foo')
 
108
            checkout.add('foo')
 
109
            self.assertRaises(UncommittedCheckout, zap, 'checkout')
 
110
            zap('checkout', allow_modified=True)
 
111
 
97
112
    return makeSuite(TestZap)