~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_upgrade.py

  • Committer: Alexander Belchenko
  • Date: 2007-01-30 23:05:35 UTC
  • mto: This revision was merged to the branch mainline in revision 2259.
  • Revision ID: bialix@ukr.net-20070130230535-kx1rd478rtigyc3v
standalone installer: win98 support

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import os
27
27
import sys
28
28
 
29
 
from bzrlib import (
30
 
    branch as _mod_branch,
31
 
    bzrdir,
32
 
    progress,
33
 
    repository,
34
 
    workingtree,
35
 
    workingtree_4,
36
 
    )
37
29
import bzrlib.branch
38
30
from bzrlib.branch import Branch
39
 
from bzrlib.tests import TestCaseWithTransport
 
31
import bzrlib.bzrdir as bzrdir
 
32
import bzrlib.repository as repository
 
33
from bzrlib.revision import is_ancestor
 
34
from bzrlib.tests import TestCase, TestCaseInTempDir
40
35
from bzrlib.transport import get_transport
41
36
from bzrlib.upgrade import upgrade
42
 
 
43
 
 
44
 
class TestUpgrade(TestCaseWithTransport):
 
37
import bzrlib.workingtree as workingtree
 
38
 
 
39
 
 
40
class TestUpgrade(TestCaseInTempDir):
45
41
    
46
42
    def test_build_tree(self):
47
43
        """Test tree-building test helper"""
67
63
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
68
64
        rt = b.repository.revision_tree(rh[0])
69
65
        foo_id = 'foo-20051004035605-91e788d1875603ae'
70
 
        rt.lock_read()
71
 
        try:
72
 
            eq(rt.get_file_text(foo_id), 'initial contents\n')
73
 
        finally:
74
 
            rt.unlock()
 
66
        eq(rt.get_file_text(foo_id), 'initial contents\n')
75
67
        rt = b.repository.revision_tree(rh[1])
76
 
        rt.lock_read()
77
 
        try:
78
 
            eq(rt.get_file_text(foo_id), 'new contents\n')
79
 
        finally:
80
 
            rt.unlock()
 
68
        eq(rt.get_file_text(foo_id), 'new contents\n')
81
69
        # check a backup was made:
82
70
        transport = get_transport(b.base)
83
 
        transport.stat('backup.bzr')
84
 
        transport.stat('backup.bzr/README')
85
 
        transport.stat('backup.bzr/branch-format')
86
 
        transport.stat('backup.bzr/revision-history')
87
 
        transport.stat('backup.bzr/merged-patches')
88
 
        transport.stat('backup.bzr/pending-merged-patches')
89
 
        transport.stat('backup.bzr/pending-merges')
90
 
        transport.stat('backup.bzr/branch-name')
91
 
        transport.stat('backup.bzr/branch-lock')
92
 
        transport.stat('backup.bzr/inventory')
93
 
        transport.stat('backup.bzr/stat-cache')
94
 
        transport.stat('backup.bzr/text-store')
95
 
        transport.stat('backup.bzr/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
96
 
        transport.stat('backup.bzr/text-store/foo-20051004035756-4081373d897c3453.gz')
97
 
        transport.stat('backup.bzr/inventory-store/')
98
 
        transport.stat('backup.bzr/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
99
 
        transport.stat('backup.bzr/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
100
 
        transport.stat('backup.bzr/revision-store/')
101
 
        transport.stat('backup.bzr/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
102
 
        transport.stat('backup.bzr/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
 
71
        transport.stat('.bzr.backup')
 
72
        transport.stat('.bzr.backup/README')
 
73
        transport.stat('.bzr.backup/branch-format')
 
74
        transport.stat('.bzr.backup/revision-history')
 
75
        transport.stat('.bzr.backup/merged-patches')
 
76
        transport.stat('.bzr.backup/pending-merged-patches')
 
77
        transport.stat('.bzr.backup/pending-merges')
 
78
        transport.stat('.bzr.backup/branch-name')
 
79
        transport.stat('.bzr.backup/branch-lock')
 
80
        transport.stat('.bzr.backup/inventory')
 
81
        transport.stat('.bzr.backup/stat-cache')
 
82
        transport.stat('.bzr.backup/text-store')
 
83
        transport.stat('.bzr.backup/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
 
84
        transport.stat('.bzr.backup/text-store/foo-20051004035756-4081373d897c3453.gz')
 
85
        transport.stat('.bzr.backup/inventory-store/')
 
86
        transport.stat('.bzr.backup/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
 
87
        transport.stat('.bzr.backup/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
 
88
        transport.stat('.bzr.backup/revision-store/')
 
89
        transport.stat('.bzr.backup/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
 
90
        transport.stat('.bzr.backup/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
103
91
 
104
92
    def test_upgrade_with_ghosts(self):
105
93
        """Upgrade v0.0.4 tree containing ghost references.
133
121
        self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
134
122
        # and we should be able to read the names for the file id 
135
123
        # 'dir-20051005095101-da1441ea3fa6917a'
136
 
        repo.lock_read()
137
 
        self.addCleanup(repo.unlock)
138
124
        self.assertNotEqual(
139
125
            [],
140
 
            repo.weave_store.get_weave(
 
126
            repo.text_store.get_weave(
141
127
                'dir-20051005095101-da1441ea3fa6917a',
142
 
                repo.get_transaction()).versions())
 
128
                repo.get_transaction()))
143
129
 
144
130
    def test_upgrade_to_meta_sets_workingtree_last_revision(self):
145
131
        self.build_tree_contents(_upgrade_dir_template)
156
142
        transport = get_transport('.')
157
143
        transport.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
158
144
        assert not transport.has('.bzr/stat-cache')
159
 
        # XXX: upgrade fails if a backup.bzr is already present
 
145
        # XXX: upgrade fails if a .bzr.backup is already present
160
146
        # -- David Allouche 2006-08-11
161
 
        transport.delete_tree('backup.bzr')
 
147
        transport.delete_tree('.bzr.backup')
162
148
        # At this point, we have a format6 branch without checkout files.
163
149
        upgrade('.', bzrdir.BzrDirMetaFormat1())
164
150
        # The upgrade should not have set up a working tree.
173
159
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
174
160
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
175
161
 
176
 
    def test_convert_branch5_branch6(self):
177
 
        branch = self.make_branch('branch', format='knit')
178
 
        branch.set_revision_history(['AB', 'CD'])
179
 
        branch.set_parent('file:///EF')
180
 
        branch.set_bound_location('file:///GH')
181
 
        branch.set_push_location('file:///IJ')
182
 
        target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
183
 
        converter = branch.bzrdir._format.get_converter(target)
184
 
        converter.convert(branch.bzrdir, progress.DummyProgress())
185
 
        new_branch = _mod_branch.Branch.open(self.get_url('branch'))
186
 
        self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6)
187
 
        self.assertEqual('CD', new_branch.last_revision())
188
 
        self.assertEqual('file:///EF', new_branch.get_parent())
189
 
        self.assertEqual('file:///GH', new_branch.get_bound_location())
190
 
        branch_config = new_branch.get_config()._get_branch_data_config()
191
 
        self.assertEqual('file:///IJ',
192
 
            branch_config.get_user_option('push_location'))
193
 
 
194
 
        branch2 = self.make_branch('branch2', format='knit')
195
 
        converter = branch2.bzrdir._format.get_converter(target)
196
 
        converter.convert(branch2.bzrdir, progress.DummyProgress())
197
 
        branch2 = _mod_branch.Branch.open(self.get_url('branch'))
198
 
        self.assertIs(branch2.__class__, _mod_branch.BzrBranch6)
199
 
 
200
 
    def test_convert_knit_dirstate_empty(self):
201
 
        # test that asking for an upgrade from knit to dirstate works.
202
 
        tree = self.make_branch_and_tree('tree', format='knit')
203
 
        target = bzrdir.format_registry.make_bzrdir('dirstate')
204
 
        converter = tree.bzrdir._format.get_converter(target)
205
 
        converter.convert(tree.bzrdir, progress.DummyProgress())
206
 
        new_tree = workingtree.WorkingTree.open('tree')
207
 
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
208
 
        self.assertEqual('null:', new_tree.last_revision())
209
 
 
210
 
    def test_convert_knit_dirstate_content(self):
211
 
        # smoke test for dirstate conversion: we call dirstate primitives,
212
 
        # and its there that the core logic is tested.
213
 
        tree = self.make_branch_and_tree('tree', format='knit')
214
 
        self.build_tree(['tree/file'])
215
 
        tree.add(['file'], ['file-id'])
216
 
        target = bzrdir.format_registry.make_bzrdir('dirstate')
217
 
        converter = tree.bzrdir._format.get_converter(target)
218
 
        converter.convert(tree.bzrdir, progress.DummyProgress())
219
 
        new_tree = workingtree.WorkingTree.open('tree')
220
 
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
221
 
        self.assertEqual('null:', new_tree.last_revision())
222
 
 
223
 
    def test_convert_knit_one_parent_dirstate(self):
224
 
        # test that asking for an upgrade from knit to dirstate works.
225
 
        tree = self.make_branch_and_tree('tree', format='knit')
226
 
        rev_id = tree.commit('first post')
227
 
        target = bzrdir.format_registry.make_bzrdir('dirstate')
228
 
        converter = tree.bzrdir._format.get_converter(target)
229
 
        converter.convert(tree.bzrdir, progress.DummyProgress())
230
 
        new_tree = workingtree.WorkingTree.open('tree')
231
 
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
232
 
        self.assertEqual(rev_id, new_tree.last_revision())
233
 
        for path in ['basis-inventory-cache', 'inventory', 'last-revision',
234
 
            'pending-merges', 'stat-cache']:
235
 
            self.failIfExists('tree/.bzr/checkout/' + path)
236
 
 
237
 
    def test_convert_knit_merges_dirstate(self):
238
 
        tree = self.make_branch_and_tree('tree', format='knit')
239
 
        rev_id = tree.commit('first post')
240
 
        merge_tree = tree.bzrdir.sprout('tree2').open_workingtree()
241
 
        rev_id2 = tree.commit('second post')
242
 
        rev_id3 = merge_tree.commit('second merge post')
243
 
        tree.merge_from_branch(merge_tree.branch)
244
 
        target = bzrdir.format_registry.make_bzrdir('dirstate')
245
 
        converter = tree.bzrdir._format.get_converter(target)
246
 
        converter.convert(tree.bzrdir, progress.DummyProgress())
247
 
        new_tree = workingtree.WorkingTree.open('tree')
248
 
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
249
 
        self.assertEqual(rev_id2, new_tree.last_revision())
250
 
        self.assertEqual([rev_id2, rev_id3], new_tree.get_parent_ids())
251
 
        for path in ['basis-inventory-cache', 'inventory', 'last-revision',
252
 
            'pending-merges', 'stat-cache']:
253
 
            self.failIfExists('tree/.bzr/checkout/' + path)
254
 
 
255
162
 
256
163
_upgrade1_template = \
257
164
     [
258
165
     ('foo', 'new contents\n'),
259
166
     ('.bzr/',),
260
167
     ('.bzr/README',
261
 
      'This is a Bazaar control directory.\n'
262
 
      'Do not change any files in this directory.\n'
263
 
      'See http://bazaar-vcs.org/ for more information about Bazaar.\n'),
 
168
      'This is a Bazaar-NG control directory.\nDo not change any files in this directory.\n'),
264
169
     ('.bzr/branch-format', 'Bazaar-NG branch, format 0.0.4\n'),
265
170
     ('.bzr/revision-history',
266
171
      'mbp@sourcefrog.net-20051004035611-176b16534b086b3c\n'
300
205
    ),
301
206
    ( './.bzr/', ),
302
207
    ( './.bzr/README',
303
 
      'This is a Bazaar control directory.\n'
304
 
      'Do not change any files in this directory.\n'
305
 
      'See http://bazaar-vcs.org/ for more information about Bazaar.\n'
 
208
        'This is a Bazaar-NG control directory.\n'
 
209
        'Do not change any files in this directory.\n'
306
210
    ),
307
211
    ( './.bzr/branch-format',
308
212
        'Bazaar-NG branch, format 0.0.4\n'
366
270
_upgrade_dir_template = [
367
271
    ( './.bzr/', ),
368
272
    ( './.bzr/README',
369
 
      'This is a Bazaar control directory.\n'
370
 
      'Do not change any files in this directory.\n'
371
 
      'See http://bazaar-vcs.org/ for more information about Bazaar.\n'
 
273
        'This is a Bazaar-NG control directory.\n'
 
274
        'Do not change any files in this directory.\n'
372
275
    ),
373
276
    ( './.bzr/branch-format',
374
277
        'Bazaar-NG branch, format 0.0.4\n'