~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to zap.py

  • Committer: Aaron Bentley
  • Date: 2006-08-24 17:02:37 UTC
  • Revision ID: abentley@panoramicfeedback.com-20060824170237-5c5300d92f6e741e
Avoid spurious failure with RepositoryFormatKnit2 and later

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
 
    )
7
3
from bzrlib.branch import Branch
8
 
from bzrlib.errors import NoWorkingTree, NotBranchError
 
4
from bzrlib.errors import NoWorkingTree, NotLocalUrl, NotBranchError
9
5
from bzrlib.workingtree import WorkingTree
10
6
 
11
 
from errors import (NotCheckout, UncommittedCheckout, ParentMissingRevisions,
 
7
from errors import (NotCheckout, UncommittedCheckout, ParentMissingRevisions, 
12
8
                    NoParent)
13
9
 
14
10
 
15
 
def zap(path, remove_branch=False, allow_modified=False):
 
11
def zap(path, remove_branch=False):
16
12
    try:
17
 
        wt = bzrdir.BzrDir.open(path).open_workingtree(path,
18
 
                                                       recommend_upgrade=False)
 
13
        wt = WorkingTree.open(path)
19
14
    except (NoWorkingTree, NotBranchError):
20
15
        raise NotCheckout(path)
21
16
    tree_base = wt.bzrdir.transport.base
23
18
    branch_base = branch.bzrdir.transport.base
24
19
    if tree_base == branch_base:
25
20
        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()
 
21
    delta = wt.changes_from(wt.basis_tree(), want_unchanged=False)
 
22
    if delta.has_changed():
 
23
        raise UncommittedCheckout()
30
24
    if remove_branch:
31
25
        parent_loc = branch.get_parent()
32
26
        if parent_loc is None:
33
27
            raise NoParent()
34
28
        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):
 
29
        p_ancestry = parent.repository.get_ancestry(parent.last_revision())
 
30
        if branch.last_revision() not in p_ancestry:
39
31
            raise ParentMissingRevisions(branch.get_parent())
40
32
    rmtree(path)
41
33
    if remove_branch:
49
41
def test_suite():
50
42
    import os
51
43
    from unittest import makeSuite
52
 
 
 
44
    
 
45
    from bzrlib.bzrdir import BzrDir, BzrDirMetaFormat1
 
46
    from bzrlib.branch import BranchReferenceFormat
53
47
    from bzrlib.tests import TestCaseInTempDir
54
48
 
55
49
    class TestZap(TestCaseInTempDir):
56
50
 
57
51
        def make_checkout(self):
58
 
            wt = bzrdir.BzrDir.create_standalone_workingtree('source')
59
 
            return wt.branch.create_checkout('checkout', lightweight=True)
 
52
            wt = BzrDir.create_standalone_workingtree('source')
 
53
            os.mkdir('checkout')
 
54
            checkout = BzrDirMetaFormat1().initialize('checkout')
 
55
            BranchReferenceFormat().initialize(checkout, wt.branch)
 
56
            return checkout.create_workingtree()
60
57
 
61
58
        def make_checkout2(self):
62
59
            wt = self.make_checkout()
63
60
            wt2 = wt.branch.bzrdir.sprout('source2').open_workingtree()
64
 
            return wt2.branch.create_checkout('checkout2', lightweight=True)
 
61
            os.mkdir('checkout2')
 
62
            checkout = BzrDirMetaFormat1().initialize('checkout2')
 
63
            BranchReferenceFormat().initialize(checkout, wt2.branch)
 
64
            return checkout.create_workingtree()
65
65
 
66
66
        def test_is_checkout(self):
67
67
            self.assertRaises(NotCheckout, zap, '.')
68
 
            wt = bzrdir.BzrDir.create_standalone_workingtree('.')
 
68
            wt = BzrDir.create_standalone_workingtree('.')
69
69
            self.assertRaises(NotCheckout, zap, '.')
70
70
 
71
71
        def test_zap_works(self):
75
75
            self.assertIs(False, os.path.exists('checkout'))
76
76
            self.assertIs(True, os.path.exists('source'))
77
77
 
78
 
        def test_zap_branch(self):
 
78
        def test_zap_branch(self):
79
79
            self.make_checkout2()
80
80
            base = WorkingTree.open('checkout').branch.base
81
81
            self.assertIs(True, os.path.exists('checkout'))
94
94
            checkout.commit('commit changes to branch')
95
95
            zap('checkout')
96
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
97
    return makeSuite(TestZap)