38
50
self.failUnlessExists('.bzr/README')
40
52
def test_upgrade_simple(self):
41
"""Upgrade simple v0.0.4 format to v6"""
53
"""Upgrade simple v0.0.4 format to latest format"""
42
54
eq = self.assertEquals
43
55
self.build_tree_contents(_upgrade1_template)
46
eq(b._branch_format, 6)
57
control = bzrdir.BzrDir.open('.')
58
b = control.open_branch()
59
# tsk, peeking under the covers.
63
bzrdir.BzrDirFormat.get_default_format().__class__))
47
64
rh = b.revision_history()
49
66
['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
50
67
'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
51
t = b.revision_tree(rh[0])
68
rt = b.repository.revision_tree(rh[0])
52
69
foo_id = 'foo-20051004035605-91e788d1875603ae'
53
eq(t.get_file_text(foo_id), 'initial contents\n')
54
t = b.revision_tree(rh[1])
55
eq(t.get_file_text(foo_id), 'new contents\n')
70
eq(rt.get_file_text(foo_id), 'initial contents\n')
71
rt = b.repository.revision_tree(rh[1])
72
eq(rt.get_file_text(foo_id), 'new contents\n')
73
# 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')
57
96
def test_upgrade_with_ghosts(self):
58
97
"""Upgrade v0.0.4 tree containing ghost references.
60
99
That is, some of the parents of revisions mentioned in the branch
61
aren't present in the branches storage.
100
aren't present in the branch's storage.
63
102
This shouldn't normally happen in branches created entirely in
64
bzr but can happen in imports from baz and arch, or from other
65
systems, where the importer knows about a revision but not
103
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
67
106
eq = self.assertEquals
68
107
self.build_tree_contents(_ghost_template)
70
109
b = Branch.open(u'.')
71
110
revision_id = b.revision_history()[1]
72
rev = b.get_revision(revision_id)
111
rev = b.repository.get_revision(revision_id)
73
112
eq(len(rev.parent_ids), 2)
74
113
eq(rev.parent_ids[1], 'wibble@wobble-2')
76
115
def test_upgrade_makes_dir_weaves(self):
77
116
self.build_tree_contents(_upgrade_dir_template)
117
old_repodir = bzrlib.bzrdir.BzrDir.open_unsupported('.')
118
old_repo_format = old_repodir.open_repository()._format
79
120
# this is the path to the literal file. As format changes
80
121
# occur it needs to be updated. FIXME: ask the store for the
82
self.failUnlessExists(
83
'.bzr/weaves/de/dir-20051005095101-da1441ea3fa6917a.weave')
123
repo = bzrlib.repository.Repository.open('.')
124
# it should have changed the format
125
self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
126
# and we should be able to read the names for the file id
127
# 'dir-20051005095101-da1441ea3fa6917a'
130
repo.weave_store.get_weave(
131
'dir-20051005095101-da1441ea3fa6917a',
132
repo.get_transaction()))
134
def test_upgrade_to_meta_sets_workingtree_last_revision(self):
135
self.build_tree_contents(_upgrade_dir_template)
136
upgrade('.', bzrdir.BzrDirMetaFormat1())
137
tree = workingtree.WorkingTree.open('.')
138
self.assertEqual([tree.branch.revision_history()[-1]],
139
tree.get_parent_ids())
141
def test_upgrade_v6_to_meta_no_workingtree(self):
142
# Some format6 branches do not have checkout files. Upgrading
143
# such a branch to metadir must not setup a working tree.
144
self.build_tree_contents(_upgrade1_template)
145
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
150
# -- David Allouche 2006-08-11
151
transport.delete_tree('.bzr.backup')
152
# At this point, we have a format6 branch without checkout files.
153
upgrade('.', bzrdir.BzrDirMetaFormat1())
154
# The upgrade should not have set up a working tree.
155
control = bzrdir.BzrDir.open('.')
156
self.assertFalse(control.has_workingtree())
157
# We have covered the scope of this test, we may as well check that
158
# upgrade has not eaten our data, even if it's a bit redundant with
160
self.failUnless(isinstance(control._format, bzrdir.BzrDirMetaFormat1))
161
branch = control.open_branch()
162
self.assertEquals(branch.revision_history(),
163
['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
164
'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
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'))
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)
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('null:', new_tree.last_revision())
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('null:', new_tree.last_revision())
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)
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)
86
246
_upgrade1_template = \