/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/selftest/whitebox.py

  • Committer: Robert Collins
  • Date: 2005-10-16 22:31:25 UTC
  • mto: This revision was merged to the branch mainline in revision 1458.
  • Revision ID: robertc@lifelesslap.robertcollins.net-20051016223125-26d4401cb94b7b82
Branch.relpath has been moved to WorkingTree.relpath.

WorkingTree no no longer takes an inventory, rather it takes an optional branch
parameter, and if None is given will open the branch at basedir implicitly.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import os
 
2
import unittest
 
3
 
 
4
from bzrlib.selftest import TestCaseInTempDir, TestCase
 
5
from bzrlib.branch import ScratchBranch, Branch
 
6
from bzrlib.errors import NotBranchError, NotVersionedError
 
7
 
 
8
 
 
9
class TestBranch(TestCaseInTempDir):
 
10
 
 
11
    def test_unknowns(self):
 
12
        b = Branch.initialize('.')
 
13
 
 
14
        self.build_tree(['hello.txt',
 
15
                         'hello.txt~'])
 
16
 
 
17
        self.assertEquals(list(b.unknowns()),
 
18
                          ['hello.txt'])
 
19
 
 
20
    def test_no_changes(self):
 
21
        from bzrlib.errors import PointlessCommit
 
22
        
 
23
        b = Branch.initialize('.')
 
24
 
 
25
        self.build_tree(['hello.txt'])
 
26
 
 
27
        self.assertRaises(PointlessCommit,
 
28
                          b.commit,
 
29
                          'commit without adding',
 
30
                          allow_pointless=False)
 
31
 
 
32
        b.commit('commit pointless tree',
 
33
                 allow_pointless=True)
 
34
 
 
35
        b.add('hello.txt')
 
36
        
 
37
        b.commit('commit first added file',
 
38
                 allow_pointless=False)
 
39
        
 
40
        self.assertRaises(PointlessCommit,
 
41
                          b.commit,
 
42
                          'commit after adding file',
 
43
                          allow_pointless=False)
 
44
        
 
45
        b.commit('commit pointless revision with one file',
 
46
                 allow_pointless=True)
 
47
 
 
48
 
 
49
class MoreTests(TestCaseInTempDir):
 
50
 
 
51
    def test_revert(self):
 
52
        """Test selected-file revert"""
 
53
        b = Branch.initialize('.')
 
54
 
 
55
        self.build_tree(['hello.txt'])
 
56
        file('hello.txt', 'w').write('initial hello')
 
57
 
 
58
        self.assertRaises(NotVersionedError,
 
59
                          b.revert, ['hello.txt'])
 
60
        
 
61
        b.add(['hello.txt'])
 
62
        b.commit('create initial hello.txt')
 
63
 
 
64
        self.check_file_contents('hello.txt', 'initial hello')
 
65
        file('hello.txt', 'w').write('new hello')
 
66
        self.check_file_contents('hello.txt', 'new hello')
 
67
 
 
68
        # revert file modified since last revision
 
69
        b.revert(['hello.txt'])
 
70
        self.check_file_contents('hello.txt', 'initial hello')
 
71
        self.check_file_contents('hello.txt~', 'new hello')
 
72
 
 
73
        # reverting again clobbers the backup
 
74
        b.revert(['hello.txt'])
 
75
        self.check_file_contents('hello.txt', 'initial hello')
 
76
        self.check_file_contents('hello.txt~', 'initial hello')
 
77
 
 
78
    def test_rename_dirs(self):
 
79
        """Test renaming directories and the files within them."""
 
80
        b = Branch.initialize('.')
 
81
        self.build_tree(['dir/', 'dir/sub/', 'dir/sub/file'])
 
82
        b.add(['dir', 'dir/sub', 'dir/sub/file'])
 
83
 
 
84
        b.commit('create initial state')
 
85
 
 
86
        # TODO: lift out to a test helper that checks the shape of
 
87
        # an inventory
 
88
        
 
89
        revid = b.revision_history()[0]
 
90
        self.log('first revision_id is {%s}' % revid)
 
91
        
 
92
        inv = b.get_revision_inventory(revid)
 
93
        self.log('contents of inventory: %r' % inv.entries())
 
94
 
 
95
        self.check_inventory_shape(inv,
 
96
                                   ['dir', 'dir/sub', 'dir/sub/file'])
 
97
 
 
98
        b.rename_one('dir', 'newdir')
 
99
 
 
100
        self.check_inventory_shape(b.inventory,
 
101
                                   ['newdir', 'newdir/sub', 'newdir/sub/file'])
 
102
 
 
103
        b.rename_one('newdir/sub', 'newdir/newsub')
 
104
        self.check_inventory_shape(b.inventory,
 
105
                                   ['newdir', 'newdir/newsub',
 
106
                                    'newdir/newsub/file'])
 
107
 
 
108
    def test_relpath(self):
 
109
        """test for branch path lookups
 
110
    
 
111
        bzrlib.osutils._relpath do a simple but subtle
 
112
        job: given a path (either relative to cwd or absolute), work out
 
113
        if it is inside a branch and return the path relative to the base.
 
114
        """
 
115
        from bzrlib.osutils import relpath
 
116
        import tempfile, shutil
 
117
        
 
118
        savedir = os.getcwdu()
 
119
        dtmp = tempfile.mkdtemp()
 
120
        # On Mac OSX, /tmp actually expands to /private/tmp
 
121
        dtmp = os.path.realpath(dtmp)
 
122
 
 
123
        def rp(p):
 
124
            return relpath(dtmp, p)
 
125
        
 
126
        try:
 
127
            # check paths inside dtmp while standing outside it
 
128
            self.assertEqual(rp(os.path.join(dtmp, 'foo')), 'foo')
 
129
 
 
130
            # root = nothing
 
131
            self.assertEqual(rp(dtmp), '')
 
132
 
 
133
            self.assertRaises(NotBranchError,
 
134
                              rp,
 
135
                              '/etc')
 
136
 
 
137
            # now some near-miss operations -- note that
 
138
            # os.path.commonprefix gets these wrong!
 
139
            self.assertRaises(NotBranchError,
 
140
                              rp,
 
141
                              dtmp.rstrip('\\/') + '2')
 
142
 
 
143
            self.assertRaises(NotBranchError,
 
144
                              rp,
 
145
                              dtmp.rstrip('\\/') + '2/foo')
 
146
 
 
147
            # now operations based on relpath of files in current
 
148
            # directory, or nearby
 
149
            os.chdir(dtmp)
 
150
 
 
151
            FOO_BAR_QUUX = os.path.join('foo', 'bar', 'quux')
 
152
            self.assertEqual(rp('foo/bar/quux'), FOO_BAR_QUUX)
 
153
 
 
154
            self.assertEqual(rp('foo'), 'foo')
 
155
 
 
156
            self.assertEqual(rp('./foo'), 'foo')
 
157
 
 
158
            self.assertEqual(rp(os.path.abspath('foo')), 'foo')
 
159
 
 
160
            self.assertRaises(NotBranchError,
 
161
                              rp, '../foo')
 
162
 
 
163
        finally:
 
164
            os.chdir(savedir)
 
165
            shutil.rmtree(dtmp)