~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_upgrade.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-07-07 21:30:06 UTC
  • mfrom: (5333.1.2 better_pyqt_include)
  • Revision ID: pqm@pqm.ubuntu.com-20100707213006-lriphkkbzwwrl7ne
(jameinel) Use a better list of PyQt includes and excludes. (Gary van der
 Merwe)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
 
1
# Copyright (C) 2005-2010 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""Tests for upgrade of old trees.
18
18
 
19
 
This file contains canned versions of some old trees, which are instantiated 
 
19
This file contains canned versions of some old trees, which are instantiated
20
20
and then upgraded to the new format."""
21
21
 
22
22
# TODO queue for upgrade:
31
31
    bzrdir,
32
32
    progress,
33
33
    repository,
 
34
    transport,
34
35
    workingtree,
35
36
    workingtree_4,
36
37
    )
37
38
import bzrlib.branch
38
39
from bzrlib.branch import Branch
39
40
from bzrlib.tests import TestCaseWithTransport
40
 
from bzrlib.transport import get_transport
41
41
from bzrlib.upgrade import upgrade
42
42
 
43
43
 
44
44
class TestUpgrade(TestCaseWithTransport):
45
 
    
 
45
 
46
46
    def test_build_tree(self):
47
47
        """Test tree-building test helper"""
48
48
        self.build_tree_contents(_upgrade1_template)
67
67
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
68
68
        rt = b.repository.revision_tree(rh[0])
69
69
        foo_id = 'foo-20051004035605-91e788d1875603ae'
70
 
        eq(rt.get_file_text(foo_id), 'initial contents\n')
 
70
        rt.lock_read()
 
71
        try:
 
72
            eq(rt.get_file_text(foo_id), 'initial contents\n')
 
73
        finally:
 
74
            rt.unlock()
71
75
        rt = b.repository.revision_tree(rh[1])
72
 
        eq(rt.get_file_text(foo_id), 'new contents\n')
 
76
        rt.lock_read()
 
77
        try:
 
78
            eq(rt.get_file_text(foo_id), 'new contents\n')
 
79
        finally:
 
80
            rt.unlock()
73
81
        # check a backup was made:
74
 
        transport = get_transport(b.base)
75
 
        transport.stat('.bzr.backup')
76
 
        transport.stat('.bzr.backup/README')
77
 
        transport.stat('.bzr.backup/branch-format')
78
 
        transport.stat('.bzr.backup/revision-history')
79
 
        transport.stat('.bzr.backup/merged-patches')
80
 
        transport.stat('.bzr.backup/pending-merged-patches')
81
 
        transport.stat('.bzr.backup/pending-merges')
82
 
        transport.stat('.bzr.backup/branch-name')
83
 
        transport.stat('.bzr.backup/branch-lock')
84
 
        transport.stat('.bzr.backup/inventory')
85
 
        transport.stat('.bzr.backup/stat-cache')
86
 
        transport.stat('.bzr.backup/text-store')
87
 
        transport.stat('.bzr.backup/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
88
 
        transport.stat('.bzr.backup/text-store/foo-20051004035756-4081373d897c3453.gz')
89
 
        transport.stat('.bzr.backup/inventory-store/')
90
 
        transport.stat('.bzr.backup/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
91
 
        transport.stat('.bzr.backup/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
92
 
        transport.stat('.bzr.backup/revision-store/')
93
 
        transport.stat('.bzr.backup/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
94
 
        transport.stat('.bzr.backup/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
 
82
        backup_dir = 'backup.bzr.~1~'
 
83
        t = transport.get_transport(b.base)
 
84
        t.stat(backup_dir)
 
85
        t.stat(backup_dir + '/README')
 
86
        t.stat(backup_dir + '/branch-format')
 
87
        t.stat(backup_dir + '/revision-history')
 
88
        t.stat(backup_dir + '/merged-patches')
 
89
        t.stat(backup_dir + '/pending-merged-patches')
 
90
        t.stat(backup_dir + '/pending-merges')
 
91
        t.stat(backup_dir + '/branch-name')
 
92
        t.stat(backup_dir + '/branch-lock')
 
93
        t.stat(backup_dir + '/inventory')
 
94
        t.stat(backup_dir + '/stat-cache')
 
95
        t.stat(backup_dir + '/text-store')
 
96
        t.stat(backup_dir + '/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
 
97
        t.stat(backup_dir + '/text-store/foo-20051004035756-4081373d897c3453.gz')
 
98
        t.stat(backup_dir + '/inventory-store/')
 
99
        t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
 
100
        t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
 
101
        t.stat(backup_dir + '/revision-store/')
 
102
        t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
 
103
        t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
95
104
 
96
105
    def test_upgrade_with_ghosts(self):
97
106
        """Upgrade v0.0.4 tree containing ghost references.
98
107
 
99
108
        That is, some of the parents of revisions mentioned in the branch
100
 
        aren't present in the branch's storage. 
 
109
        aren't present in the branch's storage.
101
110
 
102
 
        This shouldn't normally happen in branches created entirely in 
 
111
        This shouldn't normally happen in branches created entirely in
103
112
        bzr, but can happen in branches imported from baz and arch, or from
104
 
        other systems, where the importer knows about a revision but not 
 
113
        other systems, where the importer knows about a revision but not
105
114
        its contents."""
106
115
        eq = self.assertEquals
107
116
        self.build_tree_contents(_ghost_template)
117
126
        old_repodir = bzrlib.bzrdir.BzrDir.open_unsupported('.')
118
127
        old_repo_format = old_repodir.open_repository()._format
119
128
        upgrade('.')
120
 
        # this is the path to the literal file. As format changes 
 
129
        # this is the path to the literal file. As format changes
121
130
        # occur it needs to be updated. FIXME: ask the store for the
122
131
        # path.
123
132
        repo = bzrlib.repository.Repository.open('.')
124
133
        # it should have changed the format
125
134
        self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
126
 
        # and we should be able to read the names for the file id 
 
135
        # and we should be able to read the names for the file id
127
136
        # 'dir-20051005095101-da1441ea3fa6917a'
128
 
        self.assertNotEqual(
129
 
            [],
130
 
            repo.text_store.get_weave(
131
 
                'dir-20051005095101-da1441ea3fa6917a',
132
 
                repo.get_transaction()))
 
137
        repo.lock_read()
 
138
        self.addCleanup(repo.unlock)
 
139
        text_keys = repo.texts.keys()
 
140
        dir_keys = [key for key in text_keys if key[0] ==
 
141
                'dir-20051005095101-da1441ea3fa6917a']
 
142
        self.assertNotEqual([], dir_keys)
133
143
 
134
144
    def test_upgrade_to_meta_sets_workingtree_last_revision(self):
135
145
        self.build_tree_contents(_upgrade_dir_template)
143
153
        # such a branch to metadir must not setup a working tree.
144
154
        self.build_tree_contents(_upgrade1_template)
145
155
        upgrade('.', bzrdir.BzrDirFormat6())
146
 
        transport = get_transport('.')
147
 
        transport.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
148
 
        assert not transport.has('.bzr/stat-cache')
149
 
        # XXX: upgrade fails if a .bzr.backup is already present
 
156
        t = transport.get_transport('.')
 
157
        t.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
 
158
        self.assertFalse(t.has('.bzr/stat-cache'))
 
159
        # XXX: upgrade fails if a backup.bzr is already present
150
160
        # -- David Allouche 2006-08-11
151
 
        transport.delete_tree('.bzr.backup')
 
161
        t.delete_tree('backup.bzr.~1~')
152
162
        # At this point, we have a format6 branch without checkout files.
153
163
        upgrade('.', bzrdir.BzrDirMetaFormat1())
154
164
        # The upgrade should not have set up a working tree.
163
173
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
164
174
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
165
175
 
 
176
    def test_upgrade_rich_root(self):
 
177
        tree = self.make_branch_and_tree('tree', format='rich-root')
 
178
        rev_id = tree.commit('first post')
 
179
        upgrade('tree')
 
180
 
166
181
    def test_convert_branch5_branch6(self):
167
182
        branch = self.make_branch('branch', format='knit')
168
183
        branch.set_revision_history(['AB', 'CD'])
171
186
        branch.set_push_location('file:///IJ')
172
187
        target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
173
188
        converter = branch.bzrdir._format.get_converter(target)
174
 
        converter.convert(branch.bzrdir, progress.DummyProgress())
 
189
        converter.convert(branch.bzrdir, None)
175
190
        new_branch = _mod_branch.Branch.open(self.get_url('branch'))
176
191
        self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6)
177
192
        self.assertEqual('CD', new_branch.last_revision())
183
198
 
184
199
        branch2 = self.make_branch('branch2', format='knit')
185
200
        converter = branch2.bzrdir._format.get_converter(target)
186
 
        converter.convert(branch2.bzrdir, progress.DummyProgress())
 
201
        converter.convert(branch2.bzrdir, None)
187
202
        branch2 = _mod_branch.Branch.open(self.get_url('branch'))
188
203
        self.assertIs(branch2.__class__, _mod_branch.BzrBranch6)
189
204
 
 
205
    def test_convert_branch7_branch8(self):
 
206
        branch = self.make_branch('branch', format='1.9')
 
207
        target = bzrdir.format_registry.make_bzrdir('1.9')
 
208
        target.set_branch_format(_mod_branch.BzrBranchFormat8())
 
209
        converter = branch.bzrdir._format.get_converter(target)
 
210
        converter.convert(branch.bzrdir, None)
 
211
        branch = _mod_branch.Branch.open(self.get_url('branch'))
 
212
        self.assertIs(branch.__class__, _mod_branch.BzrBranch8)
 
213
        self.assertEqual({}, branch._get_all_reference_info())
 
214
 
190
215
    def test_convert_knit_dirstate_empty(self):
191
216
        # test that asking for an upgrade from knit to dirstate works.
192
217
        tree = self.make_branch_and_tree('tree', format='knit')
193
218
        target = bzrdir.format_registry.make_bzrdir('dirstate')
194
219
        converter = tree.bzrdir._format.get_converter(target)
195
 
        converter.convert(tree.bzrdir, progress.DummyProgress())
 
220
        converter.convert(tree.bzrdir, None)
196
221
        new_tree = workingtree.WorkingTree.open('tree')
197
222
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
198
 
        self.assertEqual(None, new_tree.last_revision())
 
223
        self.assertEqual('null:', new_tree.last_revision())
199
224
 
200
225
    def test_convert_knit_dirstate_content(self):
201
226
        # smoke test for dirstate conversion: we call dirstate primitives,
205
230
        tree.add(['file'], ['file-id'])
206
231
        target = bzrdir.format_registry.make_bzrdir('dirstate')
207
232
        converter = tree.bzrdir._format.get_converter(target)
208
 
        converter.convert(tree.bzrdir, progress.DummyProgress())
 
233
        converter.convert(tree.bzrdir, None)
209
234
        new_tree = workingtree.WorkingTree.open('tree')
210
235
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
211
 
        self.assertEqual(None, new_tree.last_revision())
 
236
        self.assertEqual('null:', new_tree.last_revision())
212
237
 
213
238
    def test_convert_knit_one_parent_dirstate(self):
214
239
        # test that asking for an upgrade from knit to dirstate works.
216
241
        rev_id = tree.commit('first post')
217
242
        target = bzrdir.format_registry.make_bzrdir('dirstate')
218
243
        converter = tree.bzrdir._format.get_converter(target)
219
 
        converter.convert(tree.bzrdir, progress.DummyProgress())
 
244
        converter.convert(tree.bzrdir, None)
220
245
        new_tree = workingtree.WorkingTree.open('tree')
221
246
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
222
247
        self.assertEqual(rev_id, new_tree.last_revision())
233
258
        tree.merge_from_branch(merge_tree.branch)
234
259
        target = bzrdir.format_registry.make_bzrdir('dirstate')
235
260
        converter = tree.bzrdir._format.get_converter(target)
236
 
        converter.convert(tree.bzrdir, progress.DummyProgress())
 
261
        converter.convert(tree.bzrdir, None)
237
262
        new_tree = workingtree.WorkingTree.open('tree')
238
263
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
239
264
        self.assertEqual(rev_id2, new_tree.last_revision())
248
273
     ('foo', 'new contents\n'),
249
274
     ('.bzr/',),
250
275
     ('.bzr/README',
251
 
      'This is a Bazaar-NG control directory.\nDo not change any files in this directory.\n'),
 
276
      'This is a Bazaar control directory.\n'
 
277
      'Do not change any files in this directory.\n'
 
278
      'See http://bazaar-vcs.org/ for more information about Bazaar.\n'),
252
279
     ('.bzr/branch-format', 'Bazaar-NG branch, format 0.0.4\n'),
253
280
     ('.bzr/revision-history',
254
281
      'mbp@sourcefrog.net-20051004035611-176b16534b086b3c\n'
288
315
    ),
289
316
    ( './.bzr/', ),
290
317
    ( './.bzr/README',
291
 
        'This is a Bazaar-NG control directory.\n'
292
 
        'Do not change any files in this directory.\n'
 
318
      'This is a Bazaar control directory.\n'
 
319
      'Do not change any files in this directory.\n'
 
320
      'See http://bazaar-vcs.org/ for more information about Bazaar.\n'
293
321
    ),
294
322
    ( './.bzr/branch-format',
295
323
        'Bazaar-NG branch, format 0.0.4\n'
353
381
_upgrade_dir_template = [
354
382
    ( './.bzr/', ),
355
383
    ( './.bzr/README',
356
 
        'This is a Bazaar-NG control directory.\n'
357
 
        'Do not change any files in this directory.\n'
 
384
      'This is a Bazaar control directory.\n'
 
385
      'Do not change any files in this directory.\n'
 
386
      'See http://bazaar-vcs.org/ for more information about Bazaar.\n'
358
387
    ),
359
388
    ( './.bzr/branch-format',
360
389
        'Bazaar-NG branch, format 0.0.4\n'