~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_whitebox.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-04 17:12:29 UTC
  • mto: This revision was merged to the branch mainline in revision 4410.
  • Revision ID: john@arbash-meinel.com-20090604171229-kbgfatt63y3u3uh1
Some small tweaks to decoding strings (avoid passing over the length 2x)

Down to 1.1s (from 1.4s) for decoding all of bzr.dev.
Also, favor decoding strings and then lists in _decode_object, since that is the
frequency we have those types inside Revisions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
 
1
17
import os
2
18
import unittest
3
19
 
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'])
 
20
from bzrlib import (
 
21
    osutils,
 
22
    )
 
23
from bzrlib.tests import TestCaseWithTransport, TestCase
 
24
from bzrlib.branch import Branch
 
25
from bzrlib.errors import PathNotChild
 
26
from bzrlib.osutils import relpath, pathjoin, abspath, realpath
 
27
 
 
28
 
 
29
class MoreTests(TestCaseWithTransport):
107
30
 
108
31
    def test_relpath(self):
109
32
        """test for branch path lookups
110
 
    
 
33
 
111
34
        bzrlib.osutils._relpath do a simple but subtle
112
35
        job: given a path (either relative to cwd or absolute), work out
113
36
        if it is inside a branch and return the path relative to the base.
114
37
        """
115
 
        from bzrlib.osutils import relpath
116
 
        import tempfile, shutil
117
 
        
 
38
        import tempfile
 
39
 
118
40
        savedir = os.getcwdu()
119
 
        dtmp = tempfile.mkdtemp()
 
41
        dtmp = osutils.mkdtemp()
120
42
        # On Mac OSX, /tmp actually expands to /private/tmp
121
 
        dtmp = os.path.realpath(dtmp)
 
43
        dtmp = realpath(dtmp)
122
44
 
123
45
        def rp(p):
124
46
            return relpath(dtmp, p)
125
 
        
 
47
 
126
48
        try:
127
49
            # check paths inside dtmp while standing outside it
128
 
            self.assertEqual(rp(os.path.join(dtmp, 'foo')), 'foo')
 
50
            self.assertEqual(rp(pathjoin(dtmp, 'foo')), 'foo')
129
51
 
130
52
            # root = nothing
131
53
            self.assertEqual(rp(dtmp), '')
132
54
 
133
 
            self.assertRaises(NotBranchError,
 
55
            self.assertRaises(PathNotChild,
134
56
                              rp,
135
57
                              '/etc')
136
58
 
137
59
            # now some near-miss operations -- note that
138
60
            # os.path.commonprefix gets these wrong!
139
 
            self.assertRaises(NotBranchError,
 
61
            self.assertRaises(PathNotChild,
140
62
                              rp,
141
63
                              dtmp.rstrip('\\/') + '2')
142
64
 
143
 
            self.assertRaises(NotBranchError,
 
65
            self.assertRaises(PathNotChild,
144
66
                              rp,
145
67
                              dtmp.rstrip('\\/') + '2/foo')
146
68
 
148
70
            # directory, or nearby
149
71
            os.chdir(dtmp)
150
72
 
151
 
            FOO_BAR_QUUX = os.path.join('foo', 'bar', 'quux')
152
 
            self.assertEqual(rp('foo/bar/quux'), FOO_BAR_QUUX)
 
73
            self.assertEqual(rp('foo/bar/quux'), 'foo/bar/quux')
153
74
 
154
75
            self.assertEqual(rp('foo'), 'foo')
155
76
 
156
77
            self.assertEqual(rp('./foo'), 'foo')
157
78
 
158
 
            self.assertEqual(rp(os.path.abspath('foo')), 'foo')
 
79
            self.assertEqual(rp(abspath('foo')), 'foo')
159
80
 
160
 
            self.assertRaises(NotBranchError,
 
81
            self.assertRaises(PathNotChild,
161
82
                              rp, '../foo')
162
83
 
163
84
        finally:
164
85
            os.chdir(savedir)
165
 
            shutil.rmtree(dtmp)
 
86
            osutils.rmtree(dtmp)