~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_upgrade.py

  • Committer: Robert Collins
  • Date: 2007-07-04 08:08:13 UTC
  • mfrom: (2572 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2587.
  • Revision ID: robertc@robertcollins.net-20070704080813-wzebx0r88fvwj5rq
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 by Canonical Ltd
 
1
# Copyright (C) 2005 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
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
    )
29
37
import bzrlib.branch
30
38
from bzrlib.branch import Branch
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
 
39
from bzrlib.tests import TestCaseWithTransport
35
40
from bzrlib.transport import get_transport
36
41
from bzrlib.upgrade import upgrade
37
 
import bzrlib.workingtree as workingtree
38
 
 
39
 
 
40
 
class TestUpgrade(TestCaseInTempDir):
 
42
 
 
43
 
 
44
class TestUpgrade(TestCaseWithTransport):
41
45
    
42
46
    def test_build_tree(self):
43
47
        """Test tree-building test helper"""
159
163
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
160
164
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
161
165
 
 
166
    def test_convert_branch5_branch6(self):
 
167
        branch = self.make_branch('branch', format='knit')
 
168
        branch.set_revision_history(['AB', 'CD'])
 
169
        branch.set_parent('file:///EF')
 
170
        branch.set_bound_location('file:///GH')
 
171
        branch.set_push_location('file:///IJ')
 
172
        target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
 
173
        converter = branch.bzrdir._format.get_converter(target)
 
174
        converter.convert(branch.bzrdir, progress.DummyProgress())
 
175
        new_branch = _mod_branch.Branch.open(self.get_url('branch'))
 
176
        self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6)
 
177
        self.assertEqual('CD', new_branch.last_revision())
 
178
        self.assertEqual('file:///EF', new_branch.get_parent())
 
179
        self.assertEqual('file:///GH', new_branch.get_bound_location())
 
180
        branch_config = new_branch.get_config()._get_branch_data_config()
 
181
        self.assertEqual('file:///IJ',
 
182
            branch_config.get_user_option('push_location'))
 
183
 
 
184
        branch2 = self.make_branch('branch2', format='knit')
 
185
        converter = branch2.bzrdir._format.get_converter(target)
 
186
        converter.convert(branch2.bzrdir, progress.DummyProgress())
 
187
        branch2 = _mod_branch.Branch.open(self.get_url('branch'))
 
188
        self.assertIs(branch2.__class__, _mod_branch.BzrBranch6)
 
189
 
 
190
    def test_convert_knit_dirstate_empty(self):
 
191
        # test that asking for an upgrade from knit to dirstate works.
 
192
        tree = self.make_branch_and_tree('tree', format='knit')
 
193
        target = bzrdir.format_registry.make_bzrdir('dirstate')
 
194
        converter = tree.bzrdir._format.get_converter(target)
 
195
        converter.convert(tree.bzrdir, progress.DummyProgress())
 
196
        new_tree = workingtree.WorkingTree.open('tree')
 
197
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
 
198
        self.assertEqual(None, new_tree.last_revision())
 
199
 
 
200
    def test_convert_knit_dirstate_content(self):
 
201
        # smoke test for dirstate conversion: we call dirstate primitives,
 
202
        # and its there that the core logic is tested.
 
203
        tree = self.make_branch_and_tree('tree', format='knit')
 
204
        self.build_tree(['tree/file'])
 
205
        tree.add(['file'], ['file-id'])
 
206
        target = bzrdir.format_registry.make_bzrdir('dirstate')
 
207
        converter = tree.bzrdir._format.get_converter(target)
 
208
        converter.convert(tree.bzrdir, progress.DummyProgress())
 
209
        new_tree = workingtree.WorkingTree.open('tree')
 
210
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
 
211
        self.assertEqual(None, new_tree.last_revision())
 
212
 
 
213
    def test_convert_knit_one_parent_dirstate(self):
 
214
        # test that asking for an upgrade from knit to dirstate works.
 
215
        tree = self.make_branch_and_tree('tree', format='knit')
 
216
        rev_id = tree.commit('first post')
 
217
        target = bzrdir.format_registry.make_bzrdir('dirstate')
 
218
        converter = tree.bzrdir._format.get_converter(target)
 
219
        converter.convert(tree.bzrdir, progress.DummyProgress())
 
220
        new_tree = workingtree.WorkingTree.open('tree')
 
221
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
 
222
        self.assertEqual(rev_id, new_tree.last_revision())
 
223
        for path in ['basis-inventory-cache', 'inventory', 'last-revision',
 
224
            'pending-merges', 'stat-cache']:
 
225
            self.failIfExists('tree/.bzr/checkout/' + path)
 
226
 
 
227
    def test_convert_knit_merges_dirstate(self):
 
228
        tree = self.make_branch_and_tree('tree', format='knit')
 
229
        rev_id = tree.commit('first post')
 
230
        merge_tree = tree.bzrdir.sprout('tree2').open_workingtree()
 
231
        rev_id2 = tree.commit('second post')
 
232
        rev_id3 = merge_tree.commit('second merge post')
 
233
        tree.merge_from_branch(merge_tree.branch)
 
234
        target = bzrdir.format_registry.make_bzrdir('dirstate')
 
235
        converter = tree.bzrdir._format.get_converter(target)
 
236
        converter.convert(tree.bzrdir, progress.DummyProgress())
 
237
        new_tree = workingtree.WorkingTree.open('tree')
 
238
        self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
 
239
        self.assertEqual(rev_id2, new_tree.last_revision())
 
240
        self.assertEqual([rev_id2, rev_id3], new_tree.get_parent_ids())
 
241
        for path in ['basis-inventory-cache', 'inventory', 'last-revision',
 
242
            'pending-merges', 'stat-cache']:
 
243
            self.failIfExists('tree/.bzr/checkout/' + path)
 
244
 
162
245
 
163
246
_upgrade1_template = \
164
247
     [