/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/tests/test_info.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-18 18:18:36 UTC
  • mto: This revision was merged to the branch mainline in revision 4461.
  • Revision ID: john@arbash-meinel.com-20090618181836-biodfkat9a8eyzjz
The new add_inventory_by_delta is returning a CHKInventory when mapping from NULL
Which is completely valid, but 'broke' one of the tests.
So to fix it, changed the test to use CHKInventories on both sides, and add an __eq__
member. The nice thing is that CHKInventory.__eq__ is fairly cheap, since it only
has to check the root keys.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2007 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
 
 
17
import sys
 
18
from urllib import quote
 
19
 
 
20
from bzrlib import (
 
21
    branch as _mod_branch,
 
22
    bzrdir,
 
23
    info,
 
24
    tests,
 
25
    workingtree,
 
26
    repository as _mod_repository,
 
27
    )
 
28
 
 
29
 
 
30
class TestInfo(tests.TestCaseWithTransport):
 
31
 
 
32
    def test_describe_standalone_layout(self):
 
33
        tree = self.make_branch_and_tree('tree')
 
34
        self.assertEqual('Empty control directory', info.describe_layout())
 
35
        self.assertEqual('Unshared repository with trees',
 
36
            info.describe_layout(tree.branch.repository))
 
37
        tree.branch.repository.set_make_working_trees(False)
 
38
        self.assertEqual('Unshared repository',
 
39
            info.describe_layout(tree.branch.repository))
 
40
        self.assertEqual('Standalone branch',
 
41
            info.describe_layout(tree.branch.repository, tree.branch))
 
42
        self.assertEqual('Standalone branchless tree',
 
43
            info.describe_layout(tree.branch.repository, None, tree))
 
44
        self.assertEqual('Standalone tree',
 
45
            info.describe_layout(tree.branch.repository, tree.branch, tree))
 
46
        tree.branch.bind(tree.branch)
 
47
        self.assertEqual('Bound branch',
 
48
            info.describe_layout(tree.branch.repository, tree.branch))
 
49
        self.assertEqual('Checkout',
 
50
            info.describe_layout(tree.branch.repository, tree.branch, tree))
 
51
        checkout = tree.branch.create_checkout('checkout', lightweight=True)
 
52
        self.assertEqual('Lightweight checkout',
 
53
            info.describe_layout(checkout.branch.repository, checkout.branch,
 
54
                                 checkout))
 
55
 
 
56
    def test_describe_repository_layout(self):
 
57
        repository = self.make_repository('.', shared=True)
 
58
        tree = bzrdir.BzrDir.create_branch_convenience('tree',
 
59
            force_new_tree=True).bzrdir.open_workingtree()
 
60
        self.assertEqual('Shared repository with trees',
 
61
            info.describe_layout(tree.branch.repository))
 
62
        repository.set_make_working_trees(False)
 
63
        self.assertEqual('Shared repository',
 
64
            info.describe_layout(tree.branch.repository))
 
65
        self.assertEqual('Repository branch',
 
66
            info.describe_layout(tree.branch.repository, tree.branch))
 
67
        self.assertEqual('Repository branchless tree',
 
68
            info.describe_layout(tree.branch.repository, None, tree))
 
69
        self.assertEqual('Repository tree',
 
70
            info.describe_layout(tree.branch.repository, tree.branch, tree))
 
71
        tree.branch.bind(tree.branch)
 
72
        self.assertEqual('Repository checkout',
 
73
            info.describe_layout(tree.branch.repository, tree.branch, tree))
 
74
        checkout = tree.branch.create_checkout('checkout', lightweight=True)
 
75
        self.assertEqual('Lightweight checkout',
 
76
            info.describe_layout(checkout.branch.repository, checkout.branch,
 
77
                                 checkout))
 
78
 
 
79
    def assertTreeDescription(self, format):
 
80
        """Assert a tree's format description matches expectations"""
 
81
        self.make_branch_and_tree('%s_tree' % format, format=format)
 
82
        tree = workingtree.WorkingTree.open('%s_tree' % format)
 
83
        self.assertEqual(format, info.describe_format(tree.bzrdir,
 
84
            tree.branch.repository, tree.branch, tree))
 
85
 
 
86
    def assertCheckoutDescription(self, format, expected=None):
 
87
        """Assert a checkout's format description matches expectations"""
 
88
        if expected is None:
 
89
            expected = format
 
90
        branch = self.make_branch('%s_cobranch' % format, format=format)
 
91
        # this ought to be easier...
 
92
        branch.create_checkout('%s_co' % format,
 
93
            lightweight=True).bzrdir.destroy_workingtree()
 
94
        control = bzrdir.BzrDir.open('%s_co' % format)
 
95
        old_format = control._format.workingtree_format
 
96
        try:
 
97
            control._format.workingtree_format = \
 
98
                bzrdir.format_registry.make_bzrdir(format).workingtree_format
 
99
            control.create_workingtree()
 
100
            tree = workingtree.WorkingTree.open('%s_co' % format)
 
101
            format_description = info.describe_format(tree.bzrdir,
 
102
                    tree.branch.repository, tree.branch, tree)
 
103
            self.assertEqual(expected, format_description,
 
104
                "checkout of format called %r was described as %r" %
 
105
                (expected, format_description))
 
106
        finally:
 
107
            control._format.workingtree_format = old_format
 
108
 
 
109
    def assertBranchDescription(self, format, expected=None):
 
110
        """Assert branch's format description matches expectations"""
 
111
        if expected is None:
 
112
            expected = format
 
113
        self.make_branch('%s_branch' % format, format=format)
 
114
        branch = _mod_branch.Branch.open('%s_branch' % format)
 
115
        self.assertEqual(expected, info.describe_format(branch.bzrdir,
 
116
            branch.repository, branch, None))
 
117
 
 
118
    def assertRepoDescription(self, format, expected=None):
 
119
        """Assert repository's format description matches expectations"""
 
120
        if expected is None:
 
121
            expected = format
 
122
        self.make_repository('%s_repo' % format, format=format)
 
123
        repo = _mod_repository.Repository.open('%s_repo' % format)
 
124
        self.assertEqual(expected, info.describe_format(repo.bzrdir,
 
125
            repo, None, None))
 
126
 
 
127
    def test_describe_tree_format(self):
 
128
        for key in bzrdir.format_registry.keys():
 
129
            if key in bzrdir.format_registry.aliases():
 
130
                continue
 
131
            self.assertTreeDescription(key)
 
132
 
 
133
    def test_describe_checkout_format(self):
 
134
        for key in bzrdir.format_registry.keys():
 
135
            if key in bzrdir.format_registry.aliases():
 
136
                # Aliases will not describe correctly in the UI because the
 
137
                # real format is found.
 
138
                continue
 
139
            # legacy: weave does not support checkouts
 
140
            if key == 'weave':
 
141
                continue
 
142
            if bzrdir.format_registry.get_info(key).experimental:
 
143
                # We don't require that experimental formats support checkouts
 
144
                # or describe correctly in the UI.
 
145
                continue
 
146
            expected = None
 
147
            if key in ('dirstate', 'dirstate-tags', 'dirstate-with-subtree',
 
148
                'pack-0.92', 'pack-0.92-subtree', 'rich-root',
 
149
                'rich-root-pack', '1.6', '1.6.1-rich-root',
 
150
                '1.9', '1.9-rich-root'):
 
151
                expected = '1.6 or 1.6.1-rich-root or ' \
 
152
                    '1.9 or 1.9-rich-root or ' \
 
153
                    'dirstate or dirstate-tags or pack-0.92 or'\
 
154
                    ' rich-root or rich-root-pack'
 
155
            elif key in ('knit', 'metaweave'):
 
156
                expected = 'knit or metaweave'
 
157
            elif key in ('1.14', '1.14-rich-root'):
 
158
                expected = '1.14 or 1.14-rich-root'
 
159
            self.assertCheckoutDescription(key, expected)
 
160
 
 
161
    def test_describe_branch_format(self):
 
162
        for key in bzrdir.format_registry.keys():
 
163
            if key in bzrdir.format_registry.aliases():
 
164
                continue
 
165
            if bzrdir.format_registry.get_info(key).hidden:
 
166
                continue
 
167
            expected = None
 
168
            if key in ('dirstate', 'knit'):
 
169
                expected = 'dirstate or knit'
 
170
            elif key in ('1.9', '1.14'):
 
171
                expected = '1.14 or 1.9'
 
172
            elif key in ('1.9-rich-root', '1.14-rich-root'):
 
173
                expected = '1.14-rich-root or 1.9-rich-root'
 
174
            self.assertBranchDescription(key, expected)
 
175
 
 
176
    def test_describe_repo_format(self):
 
177
        for key in bzrdir.format_registry.keys():
 
178
            if key in bzrdir.format_registry.aliases():
 
179
                continue
 
180
            if bzrdir.format_registry.get_info(key).hidden:
 
181
                continue
 
182
            expected = None
 
183
            if key in ('dirstate', 'knit', 'dirstate-tags'):
 
184
                expected = 'dirstate or dirstate-tags or knit'
 
185
            elif key in ('1.9', '1.14'):
 
186
                expected = '1.14 or 1.9'
 
187
            elif key in ('1.9-rich-root', '1.14-rich-root'):
 
188
                expected = '1.14-rich-root or 1.9-rich-root'
 
189
            self.assertRepoDescription(key, expected)
 
190
 
 
191
        format = bzrdir.format_registry.make_bzrdir('metaweave')
 
192
        format.set_branch_format(_mod_branch.BzrBranchFormat6())
 
193
        tree = self.make_branch_and_tree('unknown', format=format)
 
194
        self.assertEqual('unnamed', info.describe_format(tree.bzrdir,
 
195
            tree.branch.repository, tree.branch, tree))
 
196
 
 
197
    def test_gather_location_standalone(self):
 
198
        tree = self.make_branch_and_tree('tree')
 
199
        self.assertEqual([('branch root', tree.bzrdir.root_transport.base)],
 
200
            info.gather_location_info(tree.branch.repository, tree.branch,
 
201
                                      tree))
 
202
        self.assertEqual([('branch root', tree.bzrdir.root_transport.base)],
 
203
            info.gather_location_info(tree.branch.repository, tree.branch))
 
204
        return tree
 
205
 
 
206
    def test_gather_location_repo(self):
 
207
        srepo = self.make_repository('shared', shared=True)
 
208
        self.assertEqual([('shared repository',
 
209
                          srepo.bzrdir.root_transport.base)],
 
210
                          info.gather_location_info(srepo))
 
211
        urepo = self.make_repository('unshared')
 
212
        self.assertEqual([('repository',
 
213
                          urepo.bzrdir.root_transport.base)],
 
214
                          info.gather_location_info(urepo))
 
215
 
 
216
    def test_gather_location_repo_branch(self):
 
217
        srepo = self.make_repository('shared', shared=True)
 
218
        self.assertEqual([('shared repository',
 
219
                          srepo.bzrdir.root_transport.base)],
 
220
                          info.gather_location_info(srepo))
 
221
        tree = self.make_branch_and_tree('shared/tree')
 
222
        self.assertEqual([('shared repository',
 
223
                          srepo.bzrdir.root_transport.base),
 
224
                          ('repository branch', tree.branch.base)],
 
225
                          info.gather_location_info(srepo, tree.branch, tree))
 
226
 
 
227
    def test_gather_location_light_checkout(self):
 
228
        tree = self.make_branch_and_tree('tree')
 
229
        lcheckout = tree.branch.create_checkout('lcheckout', lightweight=True)
 
230
        self.assertEqual(
 
231
            [('light checkout root', lcheckout.bzrdir.root_transport.base),
 
232
             ('checkout of branch', tree.bzrdir.root_transport.base)],
 
233
            self.gather_tree_location_info(lcheckout))
 
234
 
 
235
    def test_gather_location_heavy_checkout(self):
 
236
        tree = self.make_branch_and_tree('tree')
 
237
        checkout = tree.branch.create_checkout('checkout')
 
238
        self.assertEqual(
 
239
            [('checkout root', checkout.bzrdir.root_transport.base),
 
240
             ('checkout of branch', tree.bzrdir.root_transport.base)],
 
241
            self.gather_tree_location_info(checkout))
 
242
        light_checkout = checkout.branch.create_checkout('light_checkout',
 
243
                                                         lightweight=True)
 
244
        self.assertEqual(
 
245
            [('light checkout root',
 
246
              light_checkout.bzrdir.root_transport.base),
 
247
             ('checkout root', checkout.bzrdir.root_transport.base),
 
248
             ('checkout of branch', tree.bzrdir.root_transport.base)],
 
249
             self.gather_tree_location_info(light_checkout)
 
250
             )
 
251
 
 
252
    def test_gather_location_shared_repo_checkout(self):
 
253
        tree = self.make_branch_and_tree('tree')
 
254
        srepo = self.make_repository('shared', shared=True)
 
255
        shared_checkout = tree.branch.create_checkout('shared/checkout')
 
256
        self.assertEqual(
 
257
            [('repository checkout root',
 
258
              shared_checkout.bzrdir.root_transport.base),
 
259
             ('checkout of branch', tree.bzrdir.root_transport.base),
 
260
             ('shared repository', srepo.bzrdir.root_transport.base)],
 
261
             self.gather_tree_location_info(shared_checkout))
 
262
 
 
263
    def gather_tree_location_info(self, tree):
 
264
        return info.gather_location_info(tree.branch.repository, tree.branch,
 
265
                                         tree)
 
266
 
 
267
    def test_gather_location_bound(self):
 
268
        branch = self.make_branch('branch')
 
269
        bound_branch = self.make_branch('bound_branch')
 
270
        bound_branch.bind(branch)
 
271
        self.assertEqual(
 
272
            [('branch root', bound_branch.bzrdir.root_transport.base),
 
273
             ('bound to branch', branch.bzrdir.root_transport.base)],
 
274
            info.gather_location_info(bound_branch.repository, bound_branch)
 
275
        )
 
276
 
 
277
    def test_location_list(self):
 
278
        if sys.platform == 'win32':
 
279
            raise tests.TestSkipped('Windows-unfriendly test')
 
280
        locs = info.LocationList('/home/foo')
 
281
        locs.add_url('a', 'file:///home/foo/')
 
282
        locs.add_url('b', 'file:///home/foo/bar/')
 
283
        locs.add_url('c', 'file:///home/bar/bar')
 
284
        locs.add_url('d', 'http://example.com/example/')
 
285
        locs.add_url('e', None)
 
286
        self.assertEqual(locs.locs, [('a', '.'),
 
287
                                     ('b', 'bar'),
 
288
                                     ('c', '/home/bar/bar'),
 
289
                                     ('d', 'http://example.com/example/')])
 
290
        self.assertEqualDiff('  a: .\n  b: bar\n  c: /home/bar/bar\n'
 
291
                             '  d: http://example.com/example/\n',
 
292
                             ''.join(locs.get_lines()))
 
293
 
 
294
    def test_gather_related_braches(self):
 
295
        branch = self.make_branch('.')
 
296
        branch.set_public_branch('baz')
 
297
        branch.set_push_location('bar')
 
298
        branch.set_parent('foo')
 
299
        branch.set_submit_branch('qux')
 
300
        self.assertEqual(
 
301
            [('public branch', 'baz'), ('push branch', 'bar'),
 
302
             ('parent branch', 'foo'), ('submit branch', 'qux')],
 
303
            info._gather_related_branches(branch).locs)